본문 바로가기
CVE 취약점

Math.js RCE 취약점(CVE-2026-40897)

by WhiteGuidance 2026. 6. 7.
반응형

 

1. CVE-2026-40897 이란?

Math.js는 JavaScript와 Node.js 환경에서 복잡한 수학 연산을 쉽게 처리할 수 있게 해주는 널리 쓰이는 오픈소스 라이브러리입니다. 핵심 기능 중 하나는 math.evaluate() 함수로, 사용자가 입력한 수식 문자열을 안전하게 실행하는 파서를 내장하고 있습니다.

  • 취약점 번호: CVE-2026-40897
  • 위험도 점수 (CVSS): 8.8 / 10 (HIGH - 높음)
  • 버전 : 13.1.1 ~ 15.1.1
  • 영향력: 일반 사용자 권한(혹은 제한된 권한)을 가진 해커가 특정 서비스의 약점을 파고들어, 시스템을 완전히 제어할 수 있는 '관리자(Administrator/Root) 권한'을 획득하는 기술입니다.

2. 기술적 분석

Math.js가 원래 하는 역할

사용자가 수식을 받아 샌드박스 안에서 계산합니다. 파일 시스템이나 JS 런타임에는 접근인 불가능해야 합니다.

 

취약한 isSafeProperty 함수 

속성 접근·쓰기를 이 함수가 허용/거부합니다. 블랙리스트 방식이라 Array own-property 쓰기를 놓쳤습니다.

 

배열 메서드 하이재킹

샌드박스 안에서 단 3단계만으로 Function 생성자를 유출합니다.


3. 공격 시연

Step 1) 명령어 curl 사용할 수 있도록 설치합니다.

 

Step 2) "Node.js 20버전을 설치할 수 있도록, 설치에 필요한 저장소 주소와 인증 정보를 등록합니다.

 

Step 3) node.js를 설치합니다.

 

Step 4) node 20.20.2 버전과 npm 10.8.2 버전이 설치된 것을 알 수 있습니다.

 

Step 5) 프로젝트의 정보와 설정값이 담긴 설계도(package.json 파일)를 자동으로 생성됩니다.

 

Step 6) matjs 15.1.0 버전을 설치합니다.

 

Step 7) math.js  15.1.0 취약한 버전이 설치된 것을 알 수 있습니다.

 

Step 8) 실습 테스트를 위한 웹 페이지를 만들어 줍니다.

 

Step 9) 라이브러리를 사용하여 수학 계산 결과를 문자열로 변환(포맷팅)해주는 기능의 코드를 server.js 파일에 저장합니다.

 

Step 10) 웹 서버를 구동시킵니다.

 

Step 11) 웹 페이지를 확인할 수 있습니다.

 

Step 12) 2+2를 입력하면 결과 값이 정확하게 나오는 것으로 보아 mathjs가 제대로 동작하는 것을 알 수 있습니다.

 

Step 13) RCE 공격 코드를 입력합니다.

 

Step 14) 4444 포트로 root 권한이 탈취되어 /etc/passwd 명령어가 동작하는 것을 알 수 있습니다.

 

Step 15) 실습 영상 입니다.

 

 

 

 

 

4. 대응 방안

반응형