文章总结: protobuf.js库存在高危代码注入漏洞(CVSS9.4),攻击者可通过恶意构造的protobufschema类型名称实现远程代码执行。漏洞根因是类型名称未经过滤直接插入代码生成器生成的Function构造函数,导致可执行任意系统命令、文件操作等。文档提供了完整的攻击链分析、PoC验证及修复方案,建议用户立即升级至protobufjs7.5.5版本。 综合评分: 88 文章分类: 漏洞分析,WEB安全,安全开发,漏洞POC,解决方案
GHSA-xq3m-2v4x-88gg 的 PoC:通过代码注入在 protobuf.js 中实现严重远程代码执行 (CVSS 9.4)
Ots安全
2026年4月23日 12:57 广东
在小说阅读器读本章
去阅读
威胁简报
恶意软件
漏洞攻击
protobuf.js(protobufjsnpm 包)中存在严重代码注入漏洞,可通过精心构造的 protobuf schema 类型名称实现完全远程代码执行。
根本原因
该protobuf.js库使用一个代码生成模块( ),该模块通过字符串连接@protobufjs/codegen构建 JavaScript 函数,并通过构造函数执行它们。来自 protobuf 模式的类型名称直接插入到生成的函数标识符中,而没有任何清理。Function()
易受攻击的代码路径位于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()构建:
functionNAME(p){
body
}
注入技术
设计的类型名称结构如下:
X(p){PAYLOAD};if(true){//
经过代码生成器处理后,生成如下代码:
returnfunctionX(p){PAYLOAD};if(true){//(p){
if(p)for(var ks=Object.keys(p),i=0;i<ks.length;++i)if(p[ks[i]]!=null)
this[ks[i]]=p[ks[i]]
}
解析器将其视为:
解析器将其视为:返回的函数成为类型构造函数。当protobuf.js使用该构造函数创建或解码消息时new ctor(props),注入的有效负载将以完整的 Node.js 权限执行。
攻击链
Attacker crafts .proto schema with malicious type name
|
v
App loads schema (Root.fromJSON, protobuf.load, gRPC config)
|
v
Type.generateConstructor() → codegen → Function()
| (unsanitized name injected into functionsource)
v
newctor(props) calledduring .create() / .decode() / .encode()
|
v
PAYLOADEXECUTES — child_process, fs, net, process.env
影响
利用漏洞可使攻击者获得以下权限:
- 通过操作系统命令执行child_process.execSync()
- 文件系统访问——读/写任意文件
- 环境变量——凭据、API密钥、数据库URL
- 网络访问——数据泄露、横向移动
- 进程控制——反向 shell、持久化
受影响的下游软件包包括@grpc/proto-loaderFirebase SDK 和 Google Cloud SDK。
概念验证员做什么
该洞利用程序分为 4 个阶段:
- 第一阶段——通过精心构造的类型名称注入代码,该类型名称经过修改globalThis以证明可以执行任意代码。
- 第二阶段——id通过执行child_process.execSync()并将输出写入到/tmp/pwned.txt
- 第三阶段——捕获内联命令输出(id,,)uname -a/etc/os-release
- 第四阶段——显示生成的函数源代码,准确地展示了注入是如何进行的。
屏幕截图
利用(protobufjs 7.5.4)
所有三个阶段都确认了代码执行——全局修改、操作系统命令执行写入/tmp/pwned.txt以及内联命令输出捕获:
代码生成分析
生成的函数源代码展示了类型名称注入是如何跳出函数模板的:
补丁验证(protobufjs 7.5.5)
同样的漏洞利用代码可以针对修复后的版本进行攻击——所有注入尝试都会被阻止:
修复提交
这行代码修复了类型名称在代码生成之前就去除所有非单词字符的问题:
攻击流程
从精心设计的攻击模式到代码执行的端到端攻击流程:
漏洞概要
项目地址:
https://github.com/dinosn/CVE-protobufjs-GHSA-xq3m-2v4x-88gg
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
排版 编辑 | Ots 小安
采集 翻译 | Ots Ai牛马
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《GHSA-xq3m-2v4x-88gg 的 PoC:通过代码注入在 protobuf.js 中实现严重远程代码执行 (CVSS 9.4)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论