
CVE-2024-28397에 대한 PoC 및 수정: Python 객체 참조 조작을 통해 RCE를 허용하는 js2py의 샌드박스 이스케이프. 재현 단계 및 동적 패치 포함.
js2py는 파이썬 인터프리터 내에서 자바스크립트 코드를 평가할 수 있는 인기 있는 파이썬 패키지입니다. 다양한 웹 스크래퍼가 웹사이트의 자바스크립트 코드를 파싱하는 데 사용합니다.
js2py 내 전역 변수 구현에 취약점이 존재하며, 이를 통해 공격자는 js2py 환경에서 파이썬 객체에 대한 참조를 얻을 수 있습니다. 결과적으로 공격자는 js 환경을 벗어나 호스트에서 임의의 명령을 실행할 수 있습니다.
일반적으로 사용자는 js2py.disable_pyimport()를 호출하여 자바스크립트 코드가 js2py 환경을 벗어나는 것을 방지합니다. 그러나 이 취약점을 통해 공격자는 이 제한을 우회하고 호스트에서 모든 명령을 실행할 수 있습니다.
위협 행위자는 악성 js 파일을 포함한 웹사이트를 호스팅하거나 HTTP API를 통해 악성 스크립트를 보내 피해자가 해독하도록 할 수 있습니다. 이렇게 함으로써 행위자는 대상에서 셸 명령을 실행하여 원격 코드 실행을 수행할 수 있습니다.
-영향을 받는 컴포넌트 버전 번호: -최신 js2py(<=0.74) (python 3에서 실행)
js2py는 python 3.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와 수정 사항을 공개하기로 결정했습니다.