GitLab任意用户接管漏洞复现(CVE-2023-7028)
GitLab任意用户接管漏洞复现(CVE-2023-7028)
0x01 简介
GitLab 是一个基于 Git 版本控制系统的开源软件平台,用于软件开发和协作。它提供了代码仓库管理、问题跟踪、持续集成、代码审查等功能,旨在帮助团队高效地协作和管理软件开发项目。
0x02 漏洞概述
CVE-2023-7028 GitLab 任意用户密码重置漏洞,攻击者可以利用忘记密码功能,构造恶意请求获取任意账号密码重置链接从而重置密码。因此漏洞的利用条件为:
- 任意用户的邮箱
- 邮件功能正常使用
总得来说利用条件还是有点难度的。
0x03 影响版本
16.1 <= Gitlab CE/EE < 16.1.6
16.2 <= Gitlab CE/EE < 16.2.9
16.3 <= Gitlab CE/EE < 16.3.7
16.4 <= Gitlab CE/EE < 16.4.5
16.5 <= Gitlab CE/EE < 16.5.6
16.6 <= Gitlab CE/EE < 16.6.4
16.7 <= Gitlab CE/EE < 16.7.2
0x04 环境搭建
Gitlab 提供了 Docker 镜像,环境搭建就比较简单,本次复现用到的环境为 Gitlab CE 16.1.2 版本,使用 docker pull
拉取镜像。
1 | docker pull gitlab/gitlab-ce:16.1.2-ce.0 |
拉取完成后,启动镜像
1 | docker run -d -p 8443:443 -p 8080:80 gitlab/gitlab-ce:16.1.2-ce.0 |
启动过程有点慢,需要等待一分钟,随后访问 http://
用 docker exec 命令进入容器,查看管理员的密码
1 | docker exec -it <xx> bash |
下一步配置邮箱, Gitlab 的邮箱配置文件在 /etc/gitlab/gitlab.rb
,这里以 QQ 邮箱为例。
1 | gitlab_rails['smtp_enable'] = true |
配置完成后重启相关服务
1 | gitlab-ctl reconfigure |
重启之后验证邮箱是否配置成功
1 | # 进入控制台 |
若成功会得到如下提示:
0x05 漏洞复现
在复现之前要为管理员账号分配一个邮箱,因为默认的 admin@example.com
邮箱不能发送邮件,配置过程如下:
进入 /users/password/new
进入到重置密码的页面,这里受害者为 qq.com,攻击者为 163.com,输入邮箱并抓包
具体数据包如下:
1 | POST /users/password HTTP/1.1 |
随后在攻击者的邮箱收到了重置密码的邮件
Gitlab 将重制密码邮件发送到了两个邮箱,攻击者可以利用邮件中的链接重制受害者的密码,从而接管账号。
使用邮件中重制密码的链接重制密码
重制密码成功后,使用修改的密码成功登陆 A 账号
0x06 修复方式
官方已发布新补丁,请及时更新到新版本。