🇰🇷 한글 설명
APScheduler의 JSONSerializer와 CBORSerializer에서 unmarshal_object 함수가 임의의 Python 클래스 인스턴스화를 허용하여 특수하게 제작된 페이로드를 통한 원격 코드 실행(RCE)이 가능합니다. __setstate__를 통해 상태 주입이 일어나며, 신뢰할 수 없는 데이터 역직렬화 시 공격이 성립합니다.
💡 쉬운 설명
APScheduler가 외부에서 받은 데이터를 검증 없이 처리하면, 공격자가 임의의 코드를 실행할 수 있습니다. 마치 알 수 없는 사람이 보낸 파일을 실행하는 것과 같습니다.
🇺🇸 원문 (English)
The JSONSerializer and CBORSerializer in APScheduler (all versions including 3.10.x and 4.0.0a5) are vulnerable to Remote Code Execution (RCE) via Insecure Deserialization. The unmarshal_object function allows for arbitrary class instantiation and state injection by dynamically importing modules and calling __setstate__ on any class available in the Python environment. An attacker can exploit this by submitting a specially crafted JSON or CBOR payload to an application using these serializers
📍 영향받는 시스템
APScheduler 3.10.x 및 4.0.0a5 포함 전 모든 버전
⚔️ 공격 벡터
특수하게 제작된 JSON 또는 CBOR 직렬화 페이로드를 응용 프로그램으로 전송하여 역직렬화 시 임의 클래스 인스턴스화 유발
🛡️ 대응 방법
APScheduler를 4.0.0 이상의 패치된 버전으로 업그레이드하고, 신뢰할 수 없는 소스의 직렬화된 데이터는 역직렬화하지 않기
🔧 검증 코드
출력된 Version이 4.0.0 이상이면 안전하며, 3.10.x 또는 4.0.0a5 이하이면 긴급 업그레이드 필요
pip show apscheduler 2>/dev/null | grep Version