🟠 【深度分析】高危安全漏洞:CVE-2026-48795

CVSS 评分: 高危(8.6)🟠  状态: Deferred  发布时间: 2026-07-15


🔍 技术细节速览

字段 值
CVE ID CVE-2026-48795
CVSS 评分 8.6 🟠
严重程度 高危
CVSS 向量 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H
CWE 分类 CWE-1321
发布时间 2026-07-15
最后更新 2026-07-16
状态 Deferred
数据来源 security-advisories@github.com

好的,作为一名资深网络安全分析师,我将基于您提供的 NVD 原始数据,生成一篇专业的漏洞深度分析文章。


CVE-2026-48795:AdonisJS Bodyparser 原型污染漏洞深度分析

CVSS 评分:8.6(高危)
CVSS 向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:H


漏洞概述

CVE-2026-48795 是一个存在于 AdonisJS Web 框架 @adonisjs/bodyparser 组件中的**原型污染(Prototype Pollution)**漏洞。该漏洞源于对先前类似漏洞(CVE-2026-25754)的不完全修复,导致攻击者仍能通过精心构造的、包含嵌套字段的多部分(multipart)请求载荷,污染 JavaScript 的 Object.prototype。

当 Object.prototype 被污染后,可能会引发一系列严重的安全问题,包括但不限于:拒绝服务(DoS)、绕过安全校验、属性注入以及在特定情况下可能导致远程代码执行(RCE)。由于该漏洞可通过网络远程触发,无需身份验证,且攻击复杂度低,因此被评为 高危。

受影响组件与版本

  • 受影响项目: @adonisjs/bodyparser
  • 受影响框架版本:
    • AdonisJS v10.x (从 10.1.3 开始至 10.1.5 之前的版本)
    • AdonisJS v11.x (从开始至 11.0.3 之前的版本)
  • 修复版本:
    • AdonisJS v10.1.5 及更高版本
    • AdonisJS v11.0.3 及更高版本
  • 利用位置: 应用程序中所有解析 multipart/form-data 类型请求的端点。

漏洞原理分析

该漏洞属于 CWE-1321: Improperly Controlled Modification of Object Prototype Attributes (‘Prototype Pollution’)。

  1. 漏洞成因:
    AdonisJS 使用 @poppinss/utils 工具库中的 lodash_.set() 方法来处理嵌套的请求体数据。在接收到多部分表单数据时,@adonisjs/bodyparser 会将表单字段名(如 user.name)解析为一个路径,并使用 _.set() 方法将对应的值设置到目标对象中。

  2. 不完整的修复:
    前一个漏洞 CVE-2026-25754 被修复后,开发者可能阻止了诸如 __proto__ 这种直接的、作为顶层键的污染,但并未考虑到 JavaScript 原型链污染的其他变体。例如,攻击者可以构造如下嵌套的字段名:

    • user.__proto__.polluted
    • constructor.prototype.polluted
  3. 利用过程:
    当 @adonisjs/bodyparser 解析一个包含 user.__proto__.polluted 字段的 multipart 请求时,_.set() 函数会执行以下操作:

    • Step 1: 创建目标对象 result = {}。
    • Step 2: 解析路径 ["user", "__proto__", "polluted"]。
    • Step 3: 创建中间对象。当路径解析到 __proto__ 时,_.set() 会创建一个普通的中间对象(如 result.user = {}),并访问 result.user.__proto__。
    • Step 4: 关键点在于,result.user.__proto__ 指向的是 Object.prototype。因此,当 _.set() 继续执行设置 polluted 属性时,它实际上是在全局的 Object.prototype 上设置了一个名为 polluted 的属性。

    类似地,constructor.prototype.polluted 路径通过 result.user.constructor 获取到 Object 构造函数,再访问其 prototype 属性,最终也指向了 Object.prototype,从而达到相同的污染效果。

影响评估

攻击复杂度:低 (AC:L)

  • 攻击向量:网络 (AV:N) - 攻击者无需物理或本地网络访问,只需能够向目标服务器发送 HTTP 请求。
  • 所需权限:无 (PR:N) - 漏洞利用不需要任何身份验证或用户会话。
  • 用户交互:无 (UI:N) - 攻击无需诱骗用户点击链接或执行任何操作,完全由服务端解析逻辑触发。
  • 影响范围:无变化 (S:U) - 漏洞影响的主体是同一个安全组件,而非其向外的子系统。

潜在后果:

  • 高可用性影响 (A:H): 这是最直接的威胁。攻击者可以污染 Object.prototype,在其中注入一个 toString、valueOf 或其他广泛使用的属性。这会导致几乎所有对象在隐式转换时都抛出一个 TypeError,或者返回一个导致无限循环的字符串,从而引发服务器进程崩溃或不可响应,实现 拒绝服务(DoS)。
  • 低机密性影响 (C:L) 和 低完整性影响 (I:L): 原型污染也可能被用于绕过安全检查(例如,通过设置 admin: true 到某个对象的原型上),或者在特定情况下(如配合模板引擎或代码生成器)被利用为远程代码执行,但这通常需要更复杂的条件。然而,仅仅 DoS 就足以使该漏洞的严重性达到高危级别。

修复建议

1. 立即升级(强烈推荐)

最直接、最有效的修复方案是立即将您的 AdonisJS 项目更新到包含修复的版本。

  • 如果您使用的是 AdonisJS v10.x,请升级到 v10.1.5 或更高版本。
  • 如果您使用的是 AdonisJS v11.x,请升级到 v11.0.3 或更高版本。

请执行以下命令:

# 升级到指定版本
npm install @adonisjs/bodyparser@10.1.5 # 或 11.0.3
# 或者,如果框架已经整合了该依赖
npm update

2. 临时缓解措施(在无法立即升级的情况下)

如果由于业务原因无法立即升级,可以考虑以下临时缓解措施:

  • 中间件过滤: 编写一个自定义中间件,在所有涉及 multipart/form-data 的请求处理逻辑之前,检查请求体中的字段名。拒绝任何包含 __proto__、constructor、prototype 等敏感关键字的字段。这种方法可以作为一种临时防护,但可能被复杂的编码绕过,且会影响正常业务逻辑的健壮性。
  • 输入验证与清洗: 在处理完请求体后,对所有对象属性进行严格的验证。例如,检查对象是否有非预期的属性,或者使用 Object.create(null) 创建不带原型的纯净对象来存储用户可控的数据。
  • 禁用不安全的功能: 如果业务场景允许,暂时关闭或替换 @adonisjs/bodyparser 对深层嵌套路径的解析能力,避免使用 _.set() 进行对象赋值。

参考资料