Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/ser0n-ath/multiparty-cve-2026-8161
漏洞分析漏洞利用Web应用程序漏洞利用Web安全
GitHubser0n-ath/multiparty-cve-2026-8161

multiparty-CVE-2026-8161

CVE-2026-8161 的概念验证漏洞利用程序,这是 multiparty multipart 解析器中的一个拒绝服务漏洞,演示了原型污染导致未捕获异常和崩溃的过程。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
3个月前尚未审核
分享

CVE-2026-8161

CVE-2026-8161(Multiparty)的概念验证

描述

[email protected] 及更早版本容易受到未捕获异常导致的拒绝服务攻击。

解析器将上传的字段和文件存储在普通 JavaScript 对象中,并且无法安全地区分解析器拥有的键与继承的对象属性。精心构造的 multipart 字段名可能导致解析器读取意外的原型链值,并在处理上传时崩溃。

任何通过易受攻击的 multiparty 版本接受 multipart 上传的服务都可能受到影响。

工作原理

问题在于 fields 和 files 是普通 JavaScript 对象,但它们被当作安全的键值映射来存储用户控制的名称。

root@kitploit:~
var fieldsArray = fields[name] || (fields[name] = [])
fieldsArray.push(value)

var filesArray = files[name] || (files[name] = [])
filesArray.push(file)

问题在于 fields[name] 和 files[name] 使用普通的 JavaScript 属性查找。对于普通对象,这种查找可能返回原型链中的继承属性,而不仅仅是存储在对象本身上的值。

当 name 为 __proto__ 时,JavaScript 可以通过原型链解析它,并返回继承的原型对象而不是 undefined。由于该值是 truthy,因此会跳过回退赋值,解析器永远不会为该字段创建真正的数组。

该补丁通过只信任直接属于对象的键来修复此问题:

root@kitploit:~
var filesArray = Object.prototype.hasOwnProperty.call(files, name)
  ? files[name]
  : undefined

然后解析器仅在存储的值确实是数组时才追加,否则会初始化一个新的数组:

root@kitploit:~
if (Array.isArray(filesArray)) {
  filesArray.push(file)
} else {
  files[name] = [file]
}

当对不是数组的值调用 .push() 时,会抛出 TypeError。由于这发生在 Multiparty 的异步解析流程内部,调用方的常规错误处理可能无法捕获它,从而允许异常导致进程崩溃。

时间线

  • 2026-01-12:向 multiparty 维护者报告漏洞。
  • 2026-01-17:报告被接受,开始修复工作。
  • 2026-02-14:与 @pillarjs/security-triage 开始协调审查。
  • 2026-02-16:补丁讨论 -> Object.prototype.hasOwnProperty.call(...)。
  • 2026-03-29:更新公告标题和元数据以反映拒绝服务影响。
  • 2026-04:修复方案经过审查并获得批准。
  • 2026-05-08:公告定稿并保留 CVE-2026-8161。
  • 2026-05-11:修复已合并到 pillarjs:master。

演示用法

运行 mocklab 环境并将测试载荷发送到两个目标:

root@kitploit:~
docker compose up -d
python3 secdos.py -u http://localhost:8080/api/submit
python3 secdos.py -u http://localhost:8081/api/submit

易受攻击的目标将崩溃并返回 [PASS]。已修补的目标将安全地处理请求并返回 [FAIL]。

如果针对易受攻击的服务器重新运行,请先重启它

设置概述

易受攻击的服务器

  • 在 localhost:8080 上访问
  • Nginx 服务器充当反向代理,失败时显示状态码为 502 的错误页面
  • Nginx 通过服务名称解析漏洞服务器地址
  • 使用 multiparty 4.2.3(易受攻击)

已修补的服务器

  • 在 localhost:8081 上运行和访问
  • 不需要 Nginx
  • 使用 multiparty 4.3.0(已修补)

从 dockerfile 构建已修补镜像需要构建参数 PATCHED=1

参考

https://github.com/pillarjs/multiparty/security/advisories/GHSA-qxch-whhj-8956 https://github.com/pillarjs/multiparty/commit/8ee6aca09aca29e923da48da8260c87aa964b282

下载工具