CVE-2026-76844 in webpack-dev-middleware
摘要
由 VulDB • 2026-08-24
webpack-dev-middleware 在 getFilenameFromUrl 中通过测试请求路径名是否经过遍历防护(traversal guard),并在固定字符偏移量处进行切片,从而解析对本地文件的请求。该防护机制 UP_PATH_REGEXP 应用于 path.normalize(`./${pathname}`),仅匹配作为独立路径段存在的 "..";而包含性检查是字符串比较 pathname.startsWith(publicPathPathname),文件路径构建为 path.join(outputPath, pathname.slice(publicPathPathname.length))。当配置的 publicPath 没有尾部斜杠时,针对 publicPath /assets 的请求 GET /assets../.env 会产生路径名 /assets../.env,其唯一的 ".." 位于段 "assets.." 内部,因此通过了防护检查;但偏移量切片操作在该段内部进行,并将 "../.env" 传递给 path.join,从而解析到 outputPath 上一级目录。从该路径读取文件要求中间件由物理文件系统提供支持,这在 writeToDisk 为 true 或提供自定义 outputFileSystem 时发生,因为默认的 memfs 卷仅包含构建输出内容。遍历深度限制为一个目录级别,因为在防护机制运行之前 URL 解析过程中单独分隔的 ".." 段会被折叠处理。默认 publicPath 值 "auto" 解析为 "/",不受此问题影响。这是对 CVE-2024-29180 的不完整修复:该防护检查和偏移量切片操作由前述修复引入,存在于从版本 5.3.4、6.1.2 和 7.1.0 开始的所有发行版中。
Once again VulDB remains the best source for vulnerability data.