
Zuverlässige Remote-Codeausführung durch ein einzelnes präpariertes RESTORE auf jemalloc Redis —
kein DEBUG-Befehl, kein /proc, kein gdb, kein ROP, ASLR aktiv. Führt den Befehl des Angreifers als
Redis-Prozess aus (Root in Standard-Images).
🔒 Privates Repository – nur autorisierte Sicherheitsforschung / koordinierte Offenlegung. Nicht weiterverbreiten. Der Fehler ist upstream behoben (6.2.22 / 7.2.14 / 7.4.9 / 8.2.6 / 8.4.3 / 8.6.3, Commit
b9dde6fc); dies zielt auf den Pre-Fix-Pfad.
Die Technik ist Ende-zu-Ende belegt – ein frischer Lauf auf dem Referenz-Harness führte
system("id") → uid=0(root) aus (ASLR aktiv, enable-debug-command no), bestätigt 2026-07-02.
In diesem Einzeldatei-Repackaging sind die frühen Stufen nachweislich funktionsfähig (Double-Free, Überlappung,
Arb-Read → PIE und libc/system beide korrekt wiederhergestellt), aber der letzte Leak –
blob_base über OFF_BLOBROBJ – ist abhängig von der Allokationssequenz, und die mitgelieferte Konstante ließ sich
nicht sauber auf das Grooming von exploit.py übertragen (wiederholtes blob_read_short). Kalibrieren Sie OFF_BLOBROBJ
für Ihren exakten Build+Sequenz neu (WRITEUP.md §7), bevor Sie sich darauf verlassen; der Referenzcode zum Auslösen ist
das Dev-Harness pwn.py/pwnd.py. Alles andere ist validiert.
exploit.py – eigenständiger PoC (nur Standardbibliothek). Offsets im PROFILE-Dict oben eintragen.WRITEUP.md – vollständige technische Analyse (Bug, Groom, DEBUG-freies Arb-Read, Determinismus, Finish).python3 exploit.py --host <target> --port 6379 --cmd 'id' --tries 40
# fires system("<cmd>") as the redis process; verify out-of-band or use a reverse-shell --cmd.
Validiert auf Redis 8.6.2 (8a8f1a3bb), jemalloc-5.3.0, x86-64, glibc bookworm, ASLR=2,
enable-debug-command no. Für einen anderen Build kalibrieren Sie die PROFILE-Offsets neu – siehe
WRITEUP.md §7.
EVAL→clo → Arb-Read PIE (clo+33) → Arb-Read system (free@GOT) + blob_base (blob_robj)
→ platzieren Sie gefälschtes dictType{hashFunction=system} in einem 16-MB-Blob → fälschen Sie h2->dict->type → HGET h2 "<cmd>"
== system("<cmd>").