GitLab 是一款被广泛应用的基于 Web 的代码仓库管理器,为软件开发项目中的源代码管理、集成、维护和协作提供了全面的平台CVE-2023-7028 是一个允许攻击者通过 reset password 表单接管用户账户 (Account TakeOver) 的漏洞版本中:
reset password 表单中,具体是 GitLab 的 API 端点 POST /users/password。攻击者利用 email address 字段中的漏洞,绕过格式校验,从而能够插入自己的邮箱。当 GitLab 发送 reset token 时,该令牌会发送到攻击者的邮箱基于 GitLab 提供的代码片段,我们可以发现以下内容:

处理 Reset Password 请求的部分位于文件 spec/controllers/passwords_controller_spec.rb 中,该部分允许从输入中接收多个邮箱,但没有任何邮箱验证机制来确认该邮箱是否属于用户
服务器端仅要求攻击者在表单提交中提供 authenticity_token(这是一个用于防止 CSRF 的隐藏令牌)即可发送重置密码请求

→ 因此,我们可以插入自己的邮箱来接收受害者的密码重置 reset token,从而接管用户账户
捕获重置密码请求后,我们得到如下内容:

authenticity_token,被重置密码的用户邮箱名称位于变量 user[email] 中按照如下 payload 添加攻击者的邮箱 &user[email][]=victim_email&user[email][]=attacker_email 并发送请求:

→ 检查攻击者的邮箱,发现重置密码令牌已发送至该邮箱,并且可以访问该令牌来更改密码

