
GitLab 任意文件读取漏洞利用
该脚本可针对 GitLab 社区版(CE)和企业版(EE)实现远程代码执行。该 CVE 是一个任意文件读取漏洞,通过下载 GitLab 的 secrets.yaml 文件,可以提取 Rails 的 secret_key_base。进而,你可以通过签名 GitLab 内部用于 A/B 测试的 experimentation_subject_id cookie 来获得代码执行能力。cookie 中嵌入的 payload 包含一个反序列化漏洞,允许在 GitLab 实例上运行代码。
任意文件读取漏洞存在于 GitLab EE/CE 8.5 及更高版本中。该漏洞已在 12.9.1、12.8.8 和 12.7.8 中修复。但是,RCE 仅影响 12.4.0 及以上版本,因为易受攻击的 experimentation_subject_id cookie 是在该版本中引入的。
已在 12.8.1 上测试
该模块在 python 3.9 下测试通过,并需要以下依赖:
如果你安装了 pipenv,可以通过运行 pipenv install 和 pipenv shell 快速进入 pipenv 虚拟环境。
$ ./cve_2020_10977.py --help
usage: cve_2020_10977.py [-h] --url URL -u USERNAME -p PASSWORD [--cmd CMD]
optional arguments:
-h, --help show this help message and exit
--url URL Target URL
-u USERNAME, --username USERNAME
Gitlab username
-p PASSWORD, --password PASSWORD
Gitlab password
--cmd CMD Command to execute
包含一个 Makefile,以方便本地开发或测试该漏洞利用程序。它依赖 docker 和 docker-compose 来快速启动一个存在此 CVE 漏洞的本地 GitLab 版本。
make up
将启动一个本地 GitLab 实例和一个 debian 实例,以便更容易测试反向 shell。GitLab 实例将在你的 localhost 的 5580 端口上可用。这个额外的镜像为你提供了一个可从 docker 网络内访问的 IP。你可以让 docker 容器访问你的 localhost,但在我看来不值得这样做,而且我绝对不希望宣传使用 --privileged。
连接 RHOST debian 实例可以轻松完成:
make shell
这允许你使用 nc -lnvp 9000 准备反向 shell。
完成此操作后,你就可以测试该漏洞利用程序了。你可以运行:
make exploit
运行该漏洞利用程序时,它不会执行 RCE,而是会打印出 GitLab rails secret。
make exploit-rce
会将此 CVE 与上述 RCE payload 链接起来,以获得反向 shell。
祝黑客之旅愉快!