
CVE-2024-28397: js2py 샌드박스 탈출, pyimport 제한 우회.
js2py는 파이썬 인터프리터 내에서 자바스크립트 코드를 평가할 수 있는 인기 있는 파이썬 패키지입니다. 다양한 웹 스크래퍼가 웹사이트의 자바스크립트 코드를 파싱하는 데 사용됩니다.
js2py 내부의 전역 변수 구현에 취약점이 존재하여, 공격자가 js2py 환경에서 파이썬 객체에 대한 참조를 획득할 수 있게 됩니다. 이를 통해 공격자는 JS 환경을 탈출하여 호스트에서 임의의 명령을 실행할 수 있습니다.
일반적으로 사용자는 js2py.disable_pyimport()를 호출하여 JavaScript 코드가 js2py 환경을 벗어나는 것을 막습니다. 그러나 이 취약점을 통해 공격자는 이 제한을 우회하고 대상 호스트에서 모든 명령을 실행할 수 있습니다.
위협 행위자는 악성 JavaScript 파일을 포함한 웹사이트를 호스팅하거나, 피해자가 파싱하도록 HTTP API를 통해 악성 스크립트를 전송할 수 있습니다. 이를 통해 행위자는 대상에서 셸 명령을 실행하여 호스트에서 원격 코드 실행을 수행할 수 있습니다.
js2py는 python3.12를 지원하지 않습니다.pip install js2py를 실행하여 js2py를 설치하고 poc.py를 실행합니다. 이 스크립트는 호스트에서 head -n 1 /etc/passwd; calc; gnome-calculator; kcalc;를 실행하려고 시도합니다.Success! the vulnerability exists...를 출력하거나 계산기를 팝업합니다.현재 공식적인 수정 사항은 없습니다. 사용자는 fix.py를 사용하여 js2py를 동적으로 패치하거나 patch.txt를 사용하여 소스 코드를 수정할 수 있습니다.
저는 2월에 이 취약점을 발견했고, 공식 저장소에 PR을 제출했습니다. 그러나 그 후 PR은 잊혀졌고, 4개월이 지난 후 지금 PoC와 수정 사항을 공개하기로 결정했습니다.