什么是 Swagger?
Swagger 是一种 API 文档生成工具,能够帮助开发者自动生成 RESTful API 的接口文档。它的主要组件是 Swagger UI 和 OpenAPI 规范文件(通常为 JSON 或 YAML 格式)。
常见 Swagger 漏洞类型
- 未授权访问
- Swagger 接口文档暴露在公网,没有进行访问控制,导致任何人可以查看接口信息,甚至执行敏感操作。
- 敏感信息泄露
- Swagger 文档中包含敏感信息,如调试参数、用户数据、硬编码的 API 密钥等。
- 不安全的默认配置
- 默认启用了 API 调用功能,攻击者可以直接在文档中发起恶意请求。
- 过多暴露接口
- Swagger 文档中列出了一些内部开发测试用的接口,这些接口可能存在高风险漏洞。
- XSS(跨站脚本攻击)
- Swagger UI 的实现中如果允许用户传递恶意输入,可能导致 XSS 攻击。
漏洞复现步骤
1. 环境准备
使用 Docker 或手动配置一个包含 Swagger 的测试环境。
示例:使用 Swagger Petstore Swagger 官方提供了一个示例 API:
- 在线地址:Swagger UI
- 本地运行:
Swagger 文档地址:http://localhost:8080docker pull swaggerapi/petstore docker run -d -p 8080:8080 swaggerapi/petstore
2. 漏洞复现案例
(1) 未授权访问
漏洞描述: Swagger UI 文档页面对所有用户开放,攻击者可以通过直接访问 swagger-ui.html
获得接口信息。
复现步骤:
- 访问 Swagger 文档页面(例如
http://localhost:8080/swagger-ui.html
)。 - 查看 API 列表。
- 调用任意接口(如用户管理接口)测试是否需要身份认证。
解决方法:
- 限制 Swagger UI 的访问,设置 IP 白名单或通过身份认证访问文档。
- 在生产环境中关闭 Swagger。
(2) 敏感信息泄露
漏洞描述: Swagger 文档中泄露敏感信息,如硬编码的 Token、密码字段等。
复现步骤:
- 在 Swagger 文档页面中查找敏感字段。
- 例如在用户注册或登录接口中检查是否有调试信息泄露:
{ "username": "testuser", "password": "P@ssw0rd", "debugToken": "hardcoded-debug-token" }
解决方法:
- 确保 Swagger 文档中没有暴露调试参数或敏感字段。
- 定期审计接口文档内容。
(3) 不安全的默认配置
漏洞描述: 默认情况下,Swagger 文档允许直接发起接口请求,攻击者可以利用这一功能调用敏感接口。
复现步骤:
- 进入 Swagger 文档页面。
- 找到一个管理接口(如删除用户)。
- 在 Swagger UI 中直接填入参数并发起请求。
- 检查是否能成功执行敏感操作。
解决方法:
- 禁用 Swagger UI 的 Try it out 功能。
- 在生产环境中移除 Swagger UI。
(4) XSS 漏洞
漏洞描述: 如果 Swagger 文档的输入字段没有正确过滤,攻击者可以通过输入恶意脚本触发 XSS 攻击。
复现步骤:
- 找到 Swagger 文档中支持用户输入的字段。
- 输入恶意脚本代码,例如:
<script>alert('XSS')</script>
- 提交请求,观察是否弹出提示框或执行脚本。
解决方法:
- 对用户输入进行严格的验证和过滤。
- 更新 Swagger UI 到最新版本,避免已知漏洞。
(5) 过多暴露接口
漏洞描述: Swagger 文档中暴露了一些测试接口,这些接口可能带有调试逻辑或权限绕过漏洞。
复现步骤:
- 查看文档中是否有测试接口,例如:
/debug/logs
/test/clear-cache
- 调用接口,观察返回结果是否包含敏感信息。
解决方法:
- 从 Swagger 文档中移除不必要的测试接口。
- 确保敏感接口只允许内网访问。
3. 工具辅助检测
使用以下工具可以帮助你检测 Swagger 的常见漏洞:
- Burp Suite
- 拦截 Swagger API 调用,检查是否有敏感信息泄露或认证绕过漏洞。
- Swagger Editor
- 验证 Swagger 文档的配置,检查是否存在不安全的设置。
- Swagger-Hunter
- 专门用于扫描 Swagger 文档的安全问题。
- 项目地址:https://github.com/Swaggger-Hunter
4. 安全最佳实践
- 生产环境禁用 Swagger UI
- 将 Swagger 文档的访问限制为开发或测试环境。
- 文档访问控制
- 配置 API 文档的访问权限,启用 IP 白名单或身份认证。
- API 认证与授权
- 确保所有 API 接口都需要身份认证,不暴露未授权接口。
- 定期审计
- 定期检查 Swagger 文档内容,确保不会泄露敏感信息。
- 更新 Swagger UI
- 使用最新版本的 Swagger UI 和相关组件,修复已知漏洞。