GitLab 远程命令执行漏洞复现CVE-2021-22205


雨笋教育小编今天分享我们工程师发布的关于GitLab 远程命令执行漏洞复现的一篇技术干货,分享给你们一起学习。

GitLab 官方发布安全补丁更新修复了GitLab命令执行漏洞(CVE-2021- 22205)。由于GitLab中的ExifTool没有对传?的图像文件的扩展名进行正确处理,攻击者通过 上传特制的恶意图片,可以在目标服务器上执行任意命令,且发现由于GitLab存在未授权的端点,导致该漏洞在无需进行身份验证的情况下即可进行利用,影响了从 11.9 开始的版本。

0x00漏洞描述

GitLab是一款Ruby开发的Git项目管理平台。

在11.9以后的GitLab中,因为使用了图片处理工具ExifTool而受到漏洞CVE-2021-22204的影响,攻击者可以通过一个未授权的接口上传一张恶意构造的图片,进而在GitLab服务器上执行任意命令。

0x01影响范围

  • Gitlab CE/EE < 13.10.3
  • Gitlab CE/EE < 13.9.6
  • Gitlab CE/EE < 13.8.8

0x02环境搭建

docker-compose.yml

version: '2.3'

services:

redis:

image: redis:5.0.9-alpine

postgresql:

image: postgres:12-alpine

environment:

- POSTGRES_USER=gitlab

- POSTGRES_PASSWORD=password

- POSTGRES_DB=gitlabhq_production

- DB_EXTENSION=pg_trgm,btree_gist

gitlab:

image: vulhub/gitlab:13.10.1

depends_on:

- redis

- postgresql

ports:

- "8080:80"

- "10022:22"

environment:

- DEBUG=false

- DB_ADAPTER=postgresql

- DB_HOST=postgresql

- DB_PORT=5432

- DB_USER=gitlab

- DB_PASS=password

- DB_NAME=gitlabhq_production

- REDIS_HOST=redis

- REDIS_PORT=6379

- GITLAB_HTTPS=false

- SSL_SELF_SIGNED=false

- GITLAB_HOST=localhost

- GITLAB_PORT=8080

- GITLAB_SSH_PORT=10022

- GITLAB_RELATIVE_URL_ROOT=

- GITLAB_SECRETS_DB_KEY_BASE=long-long-long-long-long-long-secret-key-is-here1

- GITLAB_SECRETS_SECRET_KEY_BASE=long-long-long-long-long-long-secret-key-is-here2

- GITLAB_SECRETS_OTP_KEY_BASE=long-long-long-long-long-long-secret-key-is-her3

- TZ=Asia/Kolkata

- GITLAB_TIMEZONE=Kolkata

- GITLAB_ROOT_PASSWORD=vulhub123456

启动命令

docker-compose up -d

0x03漏洞复现

环境启动后,访问http://your-ip:8080即可查看到GitLab的登录页面。

  • 获取cookie
  • 使用登录页面返回的 Cookie 值和 csrf-token 值

  • 构造RCE数据包

使用登录页面返回的 Cookie 值和 csrf-token 值,实现 RCE。

获得dnslog:

0x03修复建议

升级到最新版本。

*本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。具体请参考《网络安全法》

 

雨笋教育渗透测试线上线下都可以学习,想要学更多渗透技术留言小编!

领取免费学习资料:15386496074