dinosn/CVE-protobufjs-GHSA-xq3m-2v4x-88gg

GitHub: dinosn/CVE-protobufjs-GHSA-xq3m-2v4x-88gg

一个用于复现与验证 protobuf.js 远程代码执行漏洞的 PoC 工具。

Stars: 0 | Forks: 0

# GHSA-xq3m-2v4x-88gg: protobuf.js 远程代码执行 [protobuf.js](https://github.com/protobufjs/protobuf.js)(`protobufjs` npm 包)中的关键代码注入漏洞,通过精心构造的 Protobuf 模式类型名称可实现**完全远程代码执行**。 | 字段 | 值 | |------|------| | **安全公告** | [GHSA-xq3m-2v4x-88gg](https://github.com/advisories/GHSA-xq3m-2v4x-88gg) | | **CVSS** | **9.4(严重)** | | **CWE** | CWE-94(不当代码生成控制) | | **受影响版本** | `protobufjs` <= 7.5.4,<= 8.0.0 | | **已修复版本** | `protobufjs` 7.5.5,8.0.1 | | **修复提交** | [`535df44`](https://github.com/protobufjs/protobuf.js/commit/535df444ac060243722ac5d672db205e5c531d75) | | **报告时间** | 2026-03-02 | | **补丁时间** | 2026-03-11 | ## 根本原因 `protobuf.js` 库使用代码生成模块(`@protobufjs/codegen`),通过**字符串拼接**构建 JavaScript 函数并使用 [`Function()` 构造函数](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/Function) 执行。Protobuf 模式中的类型名称被直接插入到生成的函数标识符中,**未经过任何净化处理**。 `src/type.js` 中的漏洞代码路径: ``` // Type.generateConstructor builds a constructor function: var gen = util.codegen(["p"], mtype.name); // mtype.name is UNSANITIZED // ... adds body lines ... return gen; // gen() later calls Function(source)() ``` 代码生成的 `toString()` 构建出: ``` function NAME(p){ body } ``` 其前缀为 `return`,并通过 `Function("return function NAME(p){ body }")()` 执行,返回一个构造函数。攻击者可控的类型名称会突破函数标识符,从而将任意代码注入构造函数体。 ## 利用 ### 注入技术 精心构造的类型名称结构为: ``` X(p){PAYLOAD};if(true){// ``` 经过代码生成后生成: ``` return function X(p){PAYLOAD};if(true){//(p){ if(p)for(var ks=Object.keys(p),i=0;i
标签:CMS安全, CVE, CVSS 9.4, CWE-94, GHSA, GNU通用公共许可证, JavaScript, MITM代理, Node.js, npm包, PoC, Protobuf, RCE, 代码执行, 函数构造器, 安全修复, 安全漏洞, 客户端安全, 数字签名, 数据可视化, 暴力破解, 服务端安全, 注入攻击, 漏洞分析, 编程工具, 自定义脚本, 请求拦截, 路径探测, 远程代码执行