CVE-2023-7028_gitlab 任意用户密码重置漏洞复现
2024-1-15 15:23:4 Author: www.freebuf.com(查看原文) 阅读量:21 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

漏洞简介

GitLab 是一个用于仓库管理系统的开源项目,其使用 Git 作为代码管理工具,可通过 Web 界面访问公开或私人项目。 GitLab CE/EE 中支持用户通过辅助电子邮件地址重置密码。GitLab CE/EE 多个受影响版本中,由于电子邮件验证过程中存在错误,用户帐户密码重置电子邮件可以发送到未经验证的电子邮件地址,可能导致在无需用户交互的情况下通过密码重置进行帐户接管。 CVSS3 评分为 10.0,严重。

影响版本

16.1 <= Gitlab < 16.1.6
16.2 <= Gitlab < 16.2.9
16.3 <= Gitlab < 16.3.7
16.4 <= Gitlab < 16.4.5
16.5 <= Gitlab < 16.5.6
16.6 <= Gitlab < 16.6.4
16.7 <= Gitlab < 16.7.2

环境搭建

首先在 docker 中安装 gitlab-ee:16.7.0
docker pull gitlab/gitlab-ee:16.7.0-ee.0
启动容器:
docker run --detach --publish 8443:443 --publish 2222:22 --publish 9999:80 --name gitlab-container --restart always --volume $GITLAB\_HOME/config:/etc/gitlab --volume $GITLAB\_HOME/logs:/var/log/gitlab --volume $GITLAB\_HOME/data:/var/opt/gitlab --shm-size 256m gitlab/gitlab-ee:16.7.0-ee.0
其中部分参数解释如下:

  • --detach:在后台运行

  • --publish 8443:443 --publish 2222:22 --publish 9999:80: 将容器内部的端口映射到宿主机上,分别将容器的443端口映射到宿主机的8443端口、容器的22端口映射到宿主机的2222端口、容器的80端口映射到宿主机的 9999端口

  • --restart always: 如果容器停止,Docker 会自动重新启动容器

  • --shm-size 256m: 设置容器中的共享内存大小为256兆字节 容器成功启动后,访问 9999 端口,以 root 登录,密码为随机值,进入容器后查看文件/etc/gitlab/initial_root_password 即可。 下面配置/etc/gitlab/gitlab.rb 文件,配置完成后,才能通过忘记密码功能发送邮件。
    image

搜索 smtp_enable,将对应选项打开,将 smtp 邮件服务器地址改为对应的值,此处我使用的是 163 邮箱,即改为 smtp.163.com,user_name 就是发送邮箱的账户,password 为授权码:
image最后将 gitlab_rails['gitlab_email_from']和 user['git_user_email']也改为发件人地址即可。 配置文件修改完成后,更新一下配置:
gitlab-ctl stop
imagegitlab-ctl reconfigure
imagegitlab-ctl start
image通过 gitlab-rails 测试是否配置成功:
gitlab-rails console
Notify.test_email('[email protected]', 'title', 'test').deliver_now
image测试邮件发送失败,提示 sendmail not found。 按照 sendmail 即可。
apt-get update
apt-get install sendmail
service sendmail start
下面再次测试:
image

等待两分钟左右,成功接收到邮件,至此已经完成所有配置。

漏洞复现

新建一个用户,邮箱设置为 [email protected][1] ,作为受害者账户。

脚本一键利用

Fetching Data#zet5[2]
image

-e 后输入自己的邮箱,运行后会收到一封重置邮件,将链接复制到 cmd 中即可一键完成密码修改,默认密码为一串随机值。 成功登录:
image

burp 改包

点击忘记密码,输入受害者邮箱,抓包:
image
将 body 部分改为 user[email][]=a.com&user[email][]=b.com 即可。密码重置邮件会同时发送给 a,b 两个邮箱,从而导致密码重置。
image

修复方案

官方已发布安全更新,建议升级至最新版本,若无法升级,建议开启双因素认证功能。

References
[1] [email protected]: mailto:[email protected]
[2] Fetching Data#zet5: https://github.com/Vozec/CVE-2023-7028


文章来源: https://www.freebuf.com/vuls/389702.html
如有侵权请联系:admin#unsafe.sh