
CVE-2021-32675의 Redis 기능적 DoS 익스플로잇으로, 과도한 크기의 벌크 문자열 헤더를 활용하여 메모리 고갈을 유발합니다. 사용 지침과 Docker 기반 테스트 환경을 포함합니다.
이 저장소는 Redis의 서비스 거부(DoS) 취약점인 CVE-2021-32675에 대한 기능적 익스플로잇을 포함합니다. 이 결함으로 인해 인증되지 않은 원격 공격자가 인자 데이터를 제공하지 않고 과도하게 큰 벌크 문자열 헤더를 전송하여 Redis 서버에 대규모 메모리 사전 할당을 유발할 수 있으며, 이로 인해 메모리 고갈 및 서비스 중단이 발생합니다.
CVE-2021-32675는 Redis 쿼리 버퍼 처리의 취약점입니다. RESP(REdis Serialization Protocol) 프로토콜에서 들어오는 명령을 파싱할 때, Redis는 벌크 문자열 인자의 선언된 길이($<length>\r\n)를 읽고, 인자 바이트를 읽기 전에 페이로드를 수신하기 위해 SDS(Simple Dynamic String) 버퍼를 메모리에 즉시 사전 할당합니다.
이 사전 할당이 인자 페이로드를 수신하기 전에 발생하므로, 인증되지 않은 클라이언트는 최대 허용 벌크 문자열 크기(기본적으로 proto-max-bulk-len은 512MB)를 선언하고 실제 데이터를 전송하지 않은 채 연결을 무기한 유지할 수 있습니다. Redis는 각 활성 연결에 대해 사전 할당된 메모리를 유지하므로 약 32,000,000배(~16바이트의 네트워크 트래픽으로 512MB 메모리 예약 발생)의 증폭 비율을 생성합니다.
이 헤더 전용 기법을 사용하여 여러 동시 연결을 열면 사용 가능한 서버 메모리가 빠르게 고갈되어 다음이 발생합니다:
maxmemory 정책이 활성화된 경우 강제 키 축출.OOM command not allowed).이 취약점은 다음 이전 버전의 Redis에 영향을 미칩니다:
인증(requirepass 미설정) 없이 실행되거나 기본 (512MB)으로 실행되는 Redis 인스턴스는 이 익스플로잇에 취약합니다. 패치된 버전은 사전 할당이 발생하기 전에 인증되지 않은 클라이언트에 대해 엄격한 16KB 프로토콜 버퍼 제한을 적용합니다.
proto-max-bulk-lenpython3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Python 3.8+
취약한 Redis 인스턴스 (6.2.6 / 6.0.16 이전 버전 또는 인증되지 않은 인스턴스)
python3 exploit.py --host <IP> --port <PORT> [options]
| 옵션 | 유형 | 기본값 | 설명 |
|---|---|---|---|
--host | str | 필수 | 대상 Redis 호스트명 또는 IP 주소 |
--port | int | 6379 | 포트 번호 |
--connections | int | 10 | 열 악성 연결 수 |
--size | int | 512 | 선언된 벌크 문자열 버퍼 크기(MB) |
--hold | int | 5 | 정리 전 연결을 유지하는 시간(초) |
--password, --auth | str | None | Redis 인증용 비밀번호 (필요한 경우) |
python3 exploit.py --host 127.0.0.1 --port 6379 --connections 10 --size 512 --hold 5
포함된 Docker Compose 구성을 사용하여 로컬 테스트 랩을 실행할 수 있습니다:
# 취약한 Redis(포트 6380) 및 완화된 Redis(포트 6381) 시작
docker compose -f conf/docker-compose.yml up -d
# 취약한 인스턴스에 대해 테스트
python3 exploit.py --host 127.0.0.1 --port 6380 --connections 10 --size 512
# 완화된 인스턴스에 대해 테스트
python3 exploit.py --host 127.0.0.1 --port 6381 --password "L4bS3cur3!2024" --connections 10 --size 512
# 컨테이너 중지
docker compose -f conf/docker-compose.yml down
이 개념 증명은 교육, 연구 및 보안 검증 목적으로만 제공됩니다. 작성자는 명시적 허가 없이 시스템에 대한 오용, 손상 또는 무단 테스트에 대해 책임을 지지 않습니다.