Esecuzione di codice remoto critica nel memory store più veloce al mondo
Lo scripting Lua di Redis è diventato il punto di atterraggio perfetto post-autenticazione.
CVE-2025-49844 ("RediShell") è una vulnerabilità critica di use-after-free (UAF) nel motore di scripting Lua integrato in Redis.
Un utente autenticato invia uno script Lua appositamente creato tramite EVAL / EVALSHA che manipola il garbage collector, innesca un UAF durante il parsing/esecuzione, esce dalla sandbox Lua e ottiene esecuzione arbitraria di codice sull'host sottostante.
Il bug è rimasto nascosto nel codice sorgente di Redis per circa 13 anni (dalla prima integrazione di Lua) e colpisce praticamente tutte le versioni con Lua abilitato fino alla correzione nell'ottobre 2025.
“Una sola chiamata EVAL malevola. Presa totale del server. Redis nel 2025–2026 è diventato interessante.”
🔥 Gravità e Impatto
Punteggio base CVSS v3.1: 10.0 / Critico (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H)
Vettore d'attacco: Rete (porta TCP Redis, di solito 6379)
Privilegi richiesti: Basso (qualsiasi utente Redis autenticato con diritti di esecuzione script)
Interazione utente: Nessuna
Maturità dell'exploit: PoC pubblici e strumenti di exploit rilasciati poco dopo la divulgazione
Realtà a marzo 2026:
Gli exploit pubblici mirano a reverse shell, persistenza, payload per crypto-mining
Alto rischio in ambienti cloud (layer di cache, session store, code)
Combinato con autenticazione debole / Redis esposto → compromissione totale dell'infrastruttura
Molte distribuzioni legacy, immagini Docker e servizi gestiti sono ancora vulnerabili
🕵️ Scoperta e Crediti
Scoperto dal team Wiz Research
Segnalato tramite Pwn2Own Berlino (maggio 2025)
Divulgazione coordinata: 3 ottobre 2025 (avviso Redis + patch)
Soprannominato "RediShell" da Wiz (RCE simile a shell tramite escape Lua)
🔬 Approfondimento Tecnico
Redis incorpora Lua 5.x per lo scripting (EVAL, EVALSHA, funzioni, ecc.).
Il difetto risiede nell'interazione tra parser Lua e GC:
L'attaccante invia uno script Lua artefatto tramite EVAL
Durante il parsing (luaY_parser), un oggetto TString viene allocato ma non protetto nello stack Lua
Il GC viene eseguito prematuramente → libera l'oggetto
Il codice successivo utilizza la memoria liberata → primitiva UAF
L'attaccante sfrutta questa catena per perdere memoria, bypassare ASLR, eseguire ROP/return-to-libc → esecuzione di codice nativo arbitrario al di fuori della sandbox
Punto critico fatale: la sandbox Lua non è mai stata indurita contro le primitive di corruzione della memoria.
📅 Cronologia
Data
Evento
~2012
Integrazione vulnerabile di Lua introdotta
Maggio 2025
Wiz scopre e dimostra al Pwn2Own Berlino
3 Ottobre 2025
Divulgazione pubblica + avviso di sicurezza Redis
3 Ottobre 2025
Versioni corrette rilasciate (6.2.20+, 7.x, 8.x)
6–7 Ottobre 2025
Blog di Wiz/Sysdig/Redrays + PoC iniziali
Ottobre 2025+
Repository di exploit appaiono (GitHub, labs)
Marzo 2026
Sfruttamento in corso contro sistemi legacy/cloud
🖥️ Sistemi Colpiti
Vulnerabili: Tutte le versioni di Redis con scripting Lua abilitato prima delle patch di ottobre 2025 Corrette in:
Redis 8.2.2+
Redis 8.0.4+
Redis 7.4.6+
Redis 7.2.11+
Redis 6.2.20+
Obiettivi comuni nel 2026:
Cache cloud/session store (AWS ElastiCache, Azure Cache, GCP Memorystore)
Distribuzioni Docker/K8s con immagini Redis predefinite
App legacy che usano Redis < 7.x
Istanze Redis esposte (nessuna autenticazione o password debole)
Soluzione alternativa (pre-patch):
Disabilitare lo scripting Lua tramite ACL: negare EVAL, EVALSHA, SCRIPT LOAD, ecc.
Applicare autenticazione forte + restrizioni di rete
💥 Exploit Pubblico e PoC
Flusso d'attacco realistico (di alto livello, da analisi pubbliche):
Autenticarsi a Redis (password se richiesta)
Inviare script EVAL artefatto che innesca UAF + memory leak
PoC completi e armati sono apparsi su GitHub entro giorni (memory leak → ROP → shell).
Molti includono bypass ASLR, evasione NX/DEP e opzioni di persistenza.
🛡️ Verifica e Rimedio (Marzo 2026)
1. Controllare la versione
root@kitploit:~
redis-cli INFO SERVER | grep redis_version
→ Vulnerabile se < versioni corrette sopra indicate