
Script diagnostico e di remediation per cinque CVE Redis, che fornisce scansione, mitigazione basata su ACL e guida all'hardening della configurazione per vulnerabilità RCE autenticate.
Data di rilascio: 2026-05-08 Autore: TonyCao ([email protected]) Fonte: Redis Security Advisory
Il 05/05/2026, Redis Ltd. ha pubblicato un security advisory relativo a 5 vulnerabilità di sicurezza critiche che interessano tutte le versioni di Redis OSS/CE. Tutte le CVE possono portare a Remote Code Execution (RCE) se sfruttate con successo.
| # | Codice CVE | CVSS | Livello | Tipo di errore | Condizioni di sfruttamento |
|---|---|---|---|---|---|
| 1 | CVE-2026-23479 | 7.7 | HIGH | Use-After-Free | Autenticato, con permessi per eseguire comandi bloccanti |
| 2 | CVE-2026-25243 | 7.7 | HIGH | Accesso alla memoria non valido | Autenticato, con permessi per eseguire RESTORE |
| 3 | CVE-2026-25588 | 7.7 | HIGH | Accesso alla memoria non valido | Autenticato, con permessi RESTORE + modulo RedisTimeSeries |
| 4 | CVE-2026-25589 | 7.7 | HIGH | Accesso alla memoria non valido | Autenticato, con permessi RESTORE + modulo RedisBloom |
| 5 | CVE-2026-23631 | 6.1 | MEDIUM | Use-After-Free | Autenticato, replica con replica-read-only = disabilitato |
Punto comune: Tutte le CVE richiedono che l'attaccante sia già autenticato sull'istanza Redis. La CVE-2026-23631 interessa solo le repliche con configurazione
replica-read-only disabled.
| Linea di versione | Versione patchata (minima) |
|---|---|
| 6.2.x | 6.2.22 |
| 7.2.x | 7.2.14 |
| 7.4.x | 7.4.9 |
| 8.2.x | 8.2.6 |
| 8.4.x | 8.4.3 |
| 8.6.x | 8.6.3 |
| Modulo | Versione minima |
|---|---|
| RedisTimeSeries | 1.12.14 / 1.10.24 / 1.8.23 |
| RedisBloom | 2.8.20 / 2.6.28 / 2.4.23 |
| Versione | Patch |
|---|---|
| 8.0.6 | 8.0.10-64 |
| 7.22.2 | 7.22.2-79 |
| 7.8.6 | 7.8.6-253 |
| 7.4.6 | 7.4.6-279 |
| 7.2.4 | 7.2.4-153 |
Tutte le distribuzioni Redis Cloud sono state patchate automaticamente al momento della pubblicazione dell'advisory.
| Attributo | Valore |
|---|---|
| Titolo | Use-After-Free nel flusso di sblocco client |
| CVSS 4.0 | 7.7 (HIGH) |
| CWE | CWE-416 (Use After Free) |
| Vector | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Condizioni | Attaccante autenticato, con permessi per eseguire comandi bloccanti |
| Ambito | Tutte le versioni Redis OSS/CE, Redis Software <= 8.0.6 |
Quando un client è bloccato — ad esempio in attesa in BLPOP — e viene rimosso durante la riesecuzione del comando bloccato, la funzione processCommandAndResetClient può restituire un errore. Il codice attuale non gestisce correttamente questo caso, portando a un puntatore che fa riferimento a memoria già liberata (use-after-free). L'attaccante può sfruttare la UAF per eseguire codice da remoto (RCE).
unblock client, processCommandAndResetClientredis-server esegue comandi non identificatiBLPOP, BRPOP, BRPOPLPUSH, BLMOVE, BLMPOP, BZPOPMIN, BZPOPMAX, BZMPOP, WAIT, WAITAOF, XREAD, XREADGROUP
#### Metodo di mitigazione (senza aggiornamento)
**Metodo 1 — Blocco tramite ACL (consigliato):**```bash
# Chặn toàn bộ nhóm lệnh blocking
redis-cli ACL SETUSER default -@blocking
# Hoặc chặn từng lệnh cụ thể
redis-cli ACL SETUSER default -BLPOP -BRPOP -BRPOPLPUSH -BLMOVE -BLMPOP \
-BZPOPMIN -BZPOPMAX -BZMPOP \
-WAIT -WAITAOF \
-XREAD -XREADGROUP
# Lưu ACL
redis-cli ACL SAVE
Metodo 2 — Disabilitazione tramite rename-command (richiede il riavvio di Redis):```bash
rename-command BLPOP "" rename-command BRPOP "" rename-command BRPOPLPUSH "" rename-command BLMOVE "" rename-command BLMPOP "" rename-command BZPOPMIN "" rename-command BZPOPMAX "" rename-command BZMPOP "" rename-command WAIT "" rename-command WAITAOF "" rename-command XREAD "" rename-command XREADGROUP ""
**Metodo 3 — Attiva la protected-mode e limita le connessioni:**```bash
redis-cli CONFIG SET protected-mode yes
# Trong redis.conf:
protected-mode yes
bind 127.0.0.1
| Proprietà | Valore |
|---|---|
| Titolo | Accesso alla memoria non valido nel comando RESTORE |
| CVSS 4.0 | 7.7 (ALTO) |
| CWE | CWE-20 (Convalida dell'input impropria) + CWE-122 (Overflow del buffer heap) |
| Vettore | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Condizione | Attaccante autenticato, con permesso di eseguire RESTORE |
| Ambito | Tutte le versioni Redis OSS/CE, Redis Software <= 8.0.6 |
La vulnerabilità comprende 2 sotto-problemi:
Un attaccante autenticato invia un payload RESTORE appositamente progettato per sfruttare i difetti sopra descritti, che può portare a RCE nel contesto del processo redis-server.
Metodo 1 — Bloccare RESTORE tramite ACL (consigliato):```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SETUSER default -@dangerous
redis-cli ACL SAVE
**Metodo 2 — Disabilitare RESTORE (richiede il riavvio di Redis):**```bash
# Thêm vào redis.conf:
rename-command RESTORE ""
Metodo 3 — Creare un ACL utente dedicato per l'applicazione:```bash
redis-cli ACL SETUSER app_user on >StrongPass123 ~*
+@read +@write
-@dangerous
-@admin
-@scripting
-@blocking
-restore
-debug
redis-cli ACL SAVE
---
### CVE-2026-25588
| Attributo | Valore |
| ------------ | ---------------------------------------------------------------- |
| **Titolo** | Accesso alla memoria non valido in RESTORE con modulo RedisTimeSeries |
| **CVSS 4.0** | **7.7 (ALTO)** |
| **CWE** | CWE-20 + CWE-122 |
| **Vettore** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Condizioni** | Autenticato + privilegi RESTORE + **modulo RedisTimeSeries caricato** |
| **Ambito** | Redis OSS/CE + modulo RedisTimeSeries |
#### Descrizione tecnica
Quando il comando `RESTORE` viene utilizzato su un'istanza con il **modulo RedisTimeSeries** caricato, un payload serializzato appositamente progettato può attivare un accesso alla memoria non valido durante l'elaborazione dei dati time-series. La vulnerabilità risiede nel modo in cui il modulo RedisTimeSeries deserializza i dati dal payload RESTORE.
#### Segnali di riconoscimento
- Crash di Redis con stack trace relativo al modulo RedisTimeSeries
- Modulo RedisTimeSeries caricato (`MODULE LIST` mostra timeseries)
- Esecuzione di comandi non desiderati da parte di redis-server
#### Metodi di mitigazione (senza aggiornamento)
**Metodo 1 — Bloccare RESTORE tramite ACL:** (come CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Metodo 2 — Rimozione del modulo RedisTimeSeries (se non necessario):```bash redis-cli MODULE UNLOAD timeseries
Poi rimuovi la seguente riga da `redis.conf`:```
loadmodule /path/to/redistimeseries.so
Metodo 3 — Aggiorna solo il modulo (senza aggiornare Redis):
Scarica la versione del modulo corretta:
redis-cli MODULE UNLOAD timeseries redis-cli MODULE LOAD /path/to/new/redistimeseries.so
---
### CVE-2026-25589
| Proprietà | Valore |
| ------------- | ----------------------------------------------------------------------------- |
| **Titolo** | Accesso alla memoria non valido in RESTORE con modulo RedisBloom |
| **CVSS 4.0** | **7.7 (ALTO)** |
| **CWE** | CWE-20 + CWE-122 + CWE-787 (Scrittura fuori dai limiti) + CWE-190 (Overflow di interi) |
| **Vettore** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Condizioni**| Autenticato + privilegi RESTORE + **modulo RedisBloom caricato** |
| **Ambito** | Redis OSS/CE + modulo RedisBloom |
#### Descrizione tecnica
La vulnerabilità comprende diversi sotto-problemi nel modulo RedisBloom durante l'elaborazione del payload RESTORE:
1. **Lettura/scrittura fuori dai limiti** (Daniel Firer) — lettura/scrittura oltre la memoria allocata
2. **Overflow di interi, overflow del buffer heap e lettura/scrittura fuori dai limiti** (Joseph Surin) — overflow di interi che porta a overflow del buffer heap
Quando il modulo RedisBloom è caricato, un attaccante può inviare un payload RESTORE appositamente progettato per sfruttare i suddetti errori durante la deserializzazione dei dati di Bloom filter, Cuckoo filter, Count-Min Sketch o Top-K.
#### Indicatori di compromissione
- Crash di Redis con stack trace relativo al modulo RedisBloom
- Modulo RedisBloom caricato (`MODULE LIST` mostra bf/bloom)
- Dati nei Bloom filter corrotti o modificati in modo anomalo
#### Metodi di mitigazione (senza aggiornamento)
**Metodo 1 — Bloccare RESTORE tramite ACL:** (come CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Metodo 2 — Rimozione del modulo RedisBloom (se non necessario):```bash redis-cli MODULE UNLOAD bf
Poi rimuovi la seguente riga da `redis.conf`:```
loadmodule /path/to/redisbloom.so
Metodo 3 — Aggiorna solo il modulo (senza aggiornare Redis):
Scarica la versione del modulo patchata:
---
### CVE-2026-23631
| Proprietà | Valore |
| ------------- | ---------------------------------------------------------------- |
| **Titolo** | Use-After-Free di Lua tramite sincronizzazione Master-Replica |
| **CVSS 4.0** | **6.1 (MEDIUM)** |
| **CWE** | CWE-416 (Use After Free) |
| **Vector** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Condizione** | Autenticato + **replica** con `replica-read-only` = **disabilitato** |
| **Ambito** | Tutti Redis OSS/CE con scripting Lua, SOLO su replica |
| **Nome in codice** | "DarkReplica" (Yoni Shiraz, Wiz Zeroday Cloud) |
#### Descrizione tecnica
Un attaccante autenticato può sfruttare il meccanismo di sincronizzazione master-replica per inviare script Lua appositamente predisposti, attivando un use-after-free nel motore Lua sulla replica.
**Condizione critica:** Il bug **colpisce solo le repliche** configurate con `replica-read-only disabled` (cioè replica scrivibile). Questa NON è la configurazione predefinita — il valore predefinito di `replica-read-only` è `yes`.
Se la replica è configurata in modalità read-only (predefinita), l'istanza **non è vulnerabile**.
#### Indicatori di compromissione
- Crash di Redis sulla replica con stack trace dal motore Lua
- Configurazione `replica-read-only` = `no` sulla replica
- Esecuzione di comandi non autorizzati sulla replica
- Connessioni di rete non consentite verso la replica
#### Metodi di mitigazione (senza aggiornamento)
**Metodo 1 — Abilita replica-read-only (consigliato, è il valore predefinito):**```bash
# Runtime
redis-cli CONFIG SET replica-read-only yes
# Trong redis.conf:
replica-read-only yes
Metodo 2 — Bloccare lo scripting Lua tramite ACL:```bash redis-cli ACL SETUSER default -@scripting redis-cli ACL SETUSER default -eval -evalsha -script -function -fcall -fcall_ro redis-cli ACL SAVE
**Metodo 3 — Disabilitare i comandi Lua (richiede il riavvio di Redis):**```bash
# Thêm vào redis.conf:
rename-command EVAL ""
rename-command EVALSHA ""
rename-command SCRIPT ""
rename-command FUNCTION ""
rename-command FCALL ""
rename-command FCALL_RO ""
--scan → diagnostica, verifica tutte le CVE--fix-... → applica la misura correttiva per una CVE specifica```
$ ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
→ hiển thị banner + HELP + thoát### Requisiti di sistema
- **Sistema operativo:** Linux (Ubuntu, Debian, CentOS, RHEL, ...)
- **Strumenti:** `redis-cli` (solitamente incluso nel pacchetto `redis-tools` o `redis`)
- **Permessi:** Permessi di lettura/scrittura del file `redis.conf` (per la correzione)
- **Connessione:** Rete verso l'istanza Redis da verificare
### Installazione di redis-cli (se non già presente)```bash
# Ubuntu/Debian
sudo apt update && sudo apt install -y redis-tools
# CentOS/RHEL 7
sudo yum install -y redis
# CentOS/RHEL 8+/Fedora
sudo dnf install -y redis
# Hoặc từ source
wget https://download.redis.io/releases/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable && make redis-cli
sudo cp src/redis-cli /usr/local/bin/
chmod +x CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --help
#### 2. Scansione completa delle CVE (diagnostica)```bash
# Local Redis
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan
# Redis từ xa
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-H 192.168.1.100 -p 6379 -a "your_password"
# Với ACL user
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-H 10.0.0.50 -p 6380 -u admin -a "admin_password"
# Qua Unix socket
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-s /var/run/redis/redis-server.sock
# Kèm xuất báo cáo
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-o redis_cve_report_$(date +%Y%m%d).txt
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-cve-23479 ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-cve-25243 -H 10.0.0.1 -a mypassword ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-cve-25588 ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-cve-25589 ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-cve-23631 -c /etc/redis/redis.conf
#### 4. Correzione rapida per gruppo (consigliata)```bash
# Chan RESTORE → bao ve 3/5 CVE (25243 + 25588 + 25589)
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-restore
# Chan blocking commands → bao ve CVE-2026-23479
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-blocking
# Chan Lua + bat replica-read-only → bao ve CVE-2026-23631
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-lua
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-all
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-all
-c /etc/redis/redis.conf
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-all --no-backup
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --fix-all
-H 10.0.0.1 -p 6379 -a mypassword
### Tabella completa dei parametri
#### Parametro di azione (ACTION) — obbligatorio
| Parametro | Funzione | Numero di CVE protetti |
| ---------------- | -------------------------------------------- | ---------------------------- |
| *(nessun parametro)* | Mostra le istruzioni d'uso | — |
| `--scan` | Scansione diagnostica completa dei 5 CVE | — |
| `--fix-all` | Corregge tutti i CVE | **5/5** |
| `--fix-restore` | **[Veloce]** Blocca solo il comando RESTORE | **3/5** (25243, 25588, 25589)|
| `--fix-blocking` | **[Veloce]** Blocca solo i comandi bloccanti | **1/5** (23479) |
| `--fix-lua` | **[Veloce]** Blocca Lua + abilita replica-read-only | **1/5** (23631) |
| `--fix-cve-23479`| Corregge CVE-2026-23479 | 1/5 |
| `--fix-cve-25243`| Corregge CVE-2026-25243 | 1/5 |
| `--fix-cve-25588`| Corregge CVE-2026-25588 | 1/5 |
| `--fix-cve-25589`| Corregge CVE-2026-25589 | 1/5 |
| `--fix-cve-23631`| Corregge CVE-2026-23631 | 1/5 |
#### Parametri di connessione
| Parametro | Descrizione | Predefinito |
| -------------------- | -------------------------- | ----------- |
| `-H, --host HOST` | Indirizzo host Redis | `127.0.0.1` |
| `-p, --port PORT` | Porta Redis | `6379` |
| `-a, --pass PASS` | Password Redis | *(vuota)* |
| `-u, --user USER` | Nome utente ACL | `default` |
| `-s, --socket PATH` | Percorso Unix socket | *(vuota)* |
#### Parametri aggiuntivi
| Parametro | Descrizione | Predefinito |
| -------------------- | ----------------------------------------- | ------------------------- |
| `-h, --help` | Mostra l'aiuto | — |
| `-c, --config FILE` | Percorso di redis.conf | `/etc/redis/redis.conf` |
| `-o, --output FILE` | Scrive il report su file (solo con `--scan`) | *(vuoto)* |
| `--redis-cli PATH` | Percorso del binario redis-cli | `redis-cli` (da PATH) |
| `--no-backup` | Non esegue il backup della config prima della modifica | `false` |
### Codici di uscita (Exit Codes)
| Codice | Significato |
| ------ | ------------------------------------------------------ |
| `0` | Successo — nessun CVE rilevato o correzione completata |
| `1` | Errore: redis-cli non trovato o connessione non riuscita |
| `2` | `--scan` ha rilevato almeno 1 CVE — è necessaria la correzione |
### Output della scansione (`--scan`)```
╔══════════════════════════════════════════════════════════════════════╗
║ REDIS CVE SCANNER & MITIGATION TOOL ║
╚══════════════════════════════════════════════════════════════════════╝
[*] THONG TIN REDIS INSTANCE
Host:Port : 127.0.0.1:6379
Version : 7.2.5
Mode : standalone
Role : master
Modules : timeseries bf
═══════════════════════════════════════════════════════════════════════
[1/5] CVE-2026-23479 - Use-after-free trong Unblock Client Flow
CVSS 7.7 (HIGH) | RCE
═══════════════════════════════════════════════════════════════════════
[✗] CO KHA NANG BI ANH HUONG - Redis 7.2.5 (can >= 7.2.14)
... (CVE 2-5 tuong tu)
╔══════════════════════════════════════════════════════════════════════╗
║ TOM TAT KET QUA ║
╚══════════════════════════════════════════════════════════════════════╝
[✗] CVE-2026-23479 - VULNERABLE
[✗] CVE-2026-25243 - VULNERABLE
[✗] CVE-2026-25588 - VULNERABLE
[✗] CVE-2026-25589 - VULNERABLE
[✓] CVE-2026-23631 - OK
Ket qua: 1 PASS / 4 VULNERABLE
═══════════════════════════════════════════════════════════════════════
[!] Phat hien 4 CVE. Su dung cac tuy chon --fix-... de khac phuc.
VD: ./script.sh --fix-restore # Chan RESTORE (3 CVE)
VD: ./script.sh --fix-blocking # Chan blocking (1 CVE)
VD: ./script.sh --fix-lua # Chan Lua (1 CVE)
VD: ./script.sh --fix-all # Khac phuc toan bo
═══════════════════════════════════════════════════════════════════════
--fix-restore)```╔══════════════════════════════════════════════════════════════════════╗ ║ REDIS CVE SCANNER & MITIGATION TOOL ║ ╚══════════════════════════════════════════════════════════════════════╝
[*] THONG TIN REDIS INSTANCE Host:Port : 127.0.0.1:6379 Version : 7.2.5 ...
╔══════════════════════════════════════════════════════════════════════╗ ║ FIX NHANH: Chan RESTORE (CVE-2026-25243 + 25588 + 25589) ║ ╚══════════════════════════════════════════════════════════════════════╝ Bao ve 3/5 CVE chi voi 1 lenh chan RESTORE
[+] Da backup redis.conf toi: /etc/redis/redis.conf.cve-backup-20260508_120000 [*] Chan RESTORE qua ACL (khong can restart) => ACL SETUSER default -restore ... OK => ACL SAVE ... OK
[*] rename-command RESTORE "" (can restart) => Vo hieu hoa: rename-command RESTORE "" [!] CAN RESTART REDIS de rename-command co hieu luc
[✓] Da chan RESTORE. Cac CVE duoc bao ve:
---
## METODI DI MITIGAZIONE GENERALI
### Metodo 1: ACL (Redis >= 6.0) — CONSIGLIATO
Questo è il metodo **più sicuro e flessibile**, non richiede il riavvio di Redis.```bash
# Tao ACL user an toan cho ung dung
redis-cli ACL SETUSER app_user on >StrongPassword123 ~* \
+@read \ # Quyen doc du lieu
+@write \ # Quyen ghi du lieu
-@dangerous \ # CHAN tat ca lenh nguy hiem (gồm RESTORE)
-@admin \ # CHAN lenh quan tri
-@scripting \ # CHAN Lua scripting
-@blocking \ # CHAN blocking commands
-@keyspace \ # CHAN keyspace notifications
-@pubsub # CHAN pub/sub (neu khong dung)
# Vo hieu hoa default user
redis-cli ACL SETUSER default off
# Luu ACL vinh vien
redis-cli ACL SAVE
Aggiungi le seguenti righe a redis.conf:```conf
rename-command RESTORE ""
rename-command BLPOP "" rename-command BRPOP "" rename-command BRPOPLPUSH "" rename-command BLMOVE "" rename-command BLMPOP "" rename-command BZPOPMIN "" rename-command BZPOPMAX "" rename-command BZMPOP "" rename-command XREAD "" rename-command XREADGROUP ""
rename-command EVAL "" rename-command EVALSHA "" rename-command SCRIPT "" rename-command FUNCTION "" rename-command FCALL "" rename-command FCALL_RO ""
Poi riavvia Redis:```bash
sudo systemctl restart redis-server
# hoặc
sudo service redis-server restart
protected-mode yes bind 127.0.0.1 192.168.1.10 # Chi lang nghe IP tin cay
iptables -A INPUT -p tcp --dport 6379 -s 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp --dport 6379 -s 10.0.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 6379 -j DROP
iptables-save > /etc/iptables/rules.v4
### Metodo 4: Eseguire Redis con privilegi minimi```bash
# Tao user redis khong co shell
sudo useradd -r -s /bin/false redis
# Chown thu muc Redis
sudo chown -R redis:redis /var/lib/redis
sudo chown -R redis:redis /etc/redis
# Chay Redis duoi user redis
sudo -u redis redis-server /etc/redis/redis.conf
redis-cli MODULE LIST
redis-cli MODULE UNLOAD timeseries # CVE-2026-25588 redis-cli MODULE UNLOAD bf # CVE-2026-25589
---
## VALUTAZIONE DEL RISCHIO — SISTEMA REDIS INTERNO / SENTINEL
Questa sezione è dedicata ai cluster **Redis Sentinel** o Redis standalone in esecuzione nella rete interna, protetti da firewall (Fortinet, iptables, ecc.) e **senza connessione diretta a Internet**.
### Riepilogo
| Livello di protezione attuale | Riduce il rischio? | È necessario un aggiornamento? |
| --------------------------------------- | -------------------------------------------------------------- | ----------------------------------------- |
| Nessun accesso a Internet | **Sì** — elimina gli attaccanti esterni | Non urgente |
| Fortinet Firewall (con IPS/DPI) | **Sì** — filtra gli IP sorgente, l'IPS può rilevare payload anomali | Non urgente |
| iptables (limite IP sorgente) | **Sì** — solo gli IP autorizzati possono connettersi alla porta Redis | Non urgente |
| **Combinazione di tutte e 3 le misure** | **Riduce la probabilità di sfruttamento a un livello molto basso** | **Non urgente, ma è consigliabile un piano** |
### Punto chiave: Perché il firewall non è sufficiente?
Tutte e 5 le CVE hanno un punto in comune: l'attaccante deve **già essere autenticato** con Redis (PR:L — Privileges Required: Low nel vettore CVSS). Il firewall blocca le connessioni da IP non autorizzati, ma **non protegge** dalle seguenti minacce:
| Minaccia | Probabilità di accadimento | Conseguenze se sfruttata |
| ------------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------------------------------------------------------------ |
| **Dipendente interno malintenzionato** — ha accesso alla rete interna + conosce la password Redis | Bassa ma non escludibile | **RCE** sul server Redis, escalation dei privilegi, furto di dati |
| **Macchina interna compromessa (Lateral Movement)** — l'attaccante compromette una qualsiasi macchina nella rete, da cui attacca Redis | Media | Tutti i dati Redis vengono rubati/modificati/cancellati; l'attaccante può installare una backdoor |
| **Errore di configurazione del firewall** — apertura accidentale della porta Redis verso l'esterno a causa di una modifica errata delle regole | Bassa | Equivalente all'esposizione diretta a Internet |
| **Supply Chain / Terze parti** — partner, vendor con connessione VPN alla rete interna | Bassa | RCE, esfiltrazione di dati |
| **Vulnerabilità nel firewall/rete stesso** — l'attaccante supera il firewall tramite un'altra vulnerabilità | Molto bassa | L'intero sistema interno è compromesso |
### Analisi quantitativa del rischio
---```
Rủi ro = Xác suất khai thác × Hậu quả
Với firewall + air-gap:
= (RẤT THẤP: 0.5% - 2%/năm) × (NGHIÊM TRỌNG: RCE toàn hệ thống, mất toàn bộ dữ liệu)
= RỦI RO TRUNG BÌNH — vẫn đáng quan tâm
Il cluster Redis Sentinel presenta rischi aggiuntivi propri:
| Vettore di attacco Sentinel | Descrizione | CVE correlati |
|---|---|---|
| Compromissione di Sentinel — l'attaccante compromette il nodo Sentinel, da cui esegue il failover verso una replica dannosa | Sentinel comunica tramite porta dedicata (di solito 26379), se non protetta separatamente | CVE-2026-23631 (se la replica ha replica-read-only no) |
| Promozione della replica — la replica compromessa viene promossa a master | I dati dell'intero cluster vengono alterati | Tutte le CVE RESTORE (25243, 25588, 25589) |
| Sincronizzazione master-replica — l'attaccante intercetta il flusso di sync | I dati vengono rubati durante il processo di sync | CVE-2026-23631 |
| Priorità | Azione | Tempo di esecuzione | Richiede downtime? |
|---|---|---|---|
| P0 — Immediata | Eseguire lo script di verifica su tutti i nodi (master + replica + sentinel): ./CVE-...sh -H <ip> -p <port> -a <pass> | 2-5 minuti / nodo | No |
| P0 — Immediata | Verificare replica-read-only yes su tutte le repliche: redis-cli CONFIG GET replica-read-only | 1 minuto / nodo | No |
| P1 — Entro la settimana | Bloccare RESTORE tramite ACL (senza riavvio): redis-cli ACL SETUSER default -restore; redis-cli ACL SAVE | 2 minuti / nodo | No |
| P1 — Entro la settimana | Bloccare i comandi @blocking tramite ACL (CVE-2026-23479) | 2 minuti / nodo | No |
| P1 — Entro la settimana | Bloccare i comandi @scripting tramite ACL se Lua non viene utilizzato (CVE-2026-23631) | 2 minuti / nodo | No |
| P2 — Alla prossima finestra di manutenzione | Aggiungere rename-command RESTORE "", rename-command EVAL "", ... in redis.conf | 10 minuti (con riavvio) | Sì (riavvio di Redis) |
| P2 — Alla prossima finestra di manutenzione | Aggiornare Redis alla versione patchata (6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3) | 30-60 minuti / cluster | Sì (riavvio dell'intero cluster) |
redis-cli -h <node_ip> -p 6379 -a ACL SETUSER app_user on >StrongPass123 ~*
+@read +@write
-@dangerous -@admin -@scripting -@blocking
-restore -debug
redis-cli -h <node_ip> -p 6379 -a ACL SETUSER default off
redis-cli -h <node_ip> -p 6379 -a ACL SAVE
redis-cli -h <node_ip> -p 6379 -a --user app_user --pass StrongPass123 PING
# Quét một mục tiêu
python3 tool.py -u https://example.com
# Quét nhiều mục tiêu từ một tệp
python3 tool.py -f targets.txt
# Quét với mức độ chi tiết cao
python3 tool.py -u https://example.com -v
# Quét với cookie xác thực
python3 tool.py -u https://example.com -c "session=abc123"
# Quét với proxy
python3 tool.py -u https://example.com -p http://127.0.0.1:8080
| Tùy chọn | Mô tả |
|---|---|
-u, --url | URL mục tiêu cần quét |
-f, --file | Tệp chứa danh sách các URL mục tiêu |
-v, --verbose | Bật chế độ chi tiết |
-c, --cookie | Cookie xác thực để sử dụng trong yêu cầu |
-p, --proxy | Proxy để định tuyến lưu lượng qua |
-t, --threads | Số luồng đồng thời (mặc định: 10) |
-o, --output | Tệp đầu ra để lưu kết quả |
[+] Đang quét: https://example.com
[+] Đã tìm thấy 3 lỗ hổng tiềm ẩn:
[!] Lỗ hổng 1: SQL Injection
URL: https://example.com/product?id=1
Mức độ: Cao
Mô tả: Tham số 'id' dễ bị tấn công SQL Injection
[!] Lỗ hổng 2: XSS (Cross-Site Scripting)
URL: https://example.com/search?q=test
Mức độ: Trung bình
Mô tả: Tham số 'q' phản ánh đầu vào mà không được mã hóa
[!] Lỗ hổng 3: Directory Traversal
URL: https://example.com/download?file=../../etc/passwd
Mức độ: Cao
Mô tả: Tham số 'file' cho phép truy cập tệp tùy ý
Công cụ này được phát hành theo giấy phép MIT. Xem tệp LICENSE để biết thêm chi tiết.
Công cụ này chỉ dành cho mục đích giáo dục và kiểm tra bảo mật được ủy quyền. Tác giả không chịu trách nhiệm về bất kỳ việc sử dụng sai mục đích nào. Chỉ sử dụng trên các hệ thống mà bạn có quyền kiểm tra.
# ============================================
# Chay tren TUNG node Sentinel (port 26379)
# ============================================
# Sentinel thuong khong can RESTORE/EVAL — chan toan bo lenh nguy hiem
redis-cli -h <sentinel_ip> -p 26379 -a <sentinel_pass> ACL SETUSER default \
-@dangerous -@admin -@scripting -@blocking -restore
redis-cli -h <sentinel_ip> -p 26379 -a <sentinel_pass> ACL SAVE
```
### Flusso decisionale: È necessario aggiornare subito?```
Hệ thống Redis của bạn có public-facing không?
├── CÓ → NÂNG CẤP NGAY hoặc áp dụng workaround TRONG 24H
└── KHÔNG (nội bộ / air-gapped)
├── Có dùng Lua scripting (EVAL/EVALSHA)?
│ ├── CÓ → CVE-2026-23631: Kiểm tra replica-read-only, chặn @scripting qua ACL
│ └── KHÔNG → Rủi ro thấp hơn
├── Có dùng RedisTimeSeries hoặc RedisBloom module?
│ ├── CÓ → CVE-2026-25588/25589: Chặn RESTORE qua ACL, nâng cấp module
│ └── KHÔNG → Không bị ảnh hưởng bởi 25588/25589
├── Có dùng blocking commands (BLPOP, XREAD, ...)?
│ ├── CÓ → CVE-2026-23479: Chặn @blocking qua ACL hoặc rename-command
│ └── KHÔNG → Chặn @blocking để an toàn (không ảnh hưởng)
└── KẾT LUẬN:
├── Áp dụng ACL workaround NGAY TRONG TUẦN (không downtime)
└── Lên kế hoạch nâng cấp TRONG MAINTENANCE WINDOW TIẾP THEO
```
### Conclusione
> **Firewall + isolamento di rete riducono la probabilità di sfruttamento a un livello molto basso, ma le conseguenze in caso di sfruttamento restano comunque RCE sull'intero sistema.** Con un costo di mitigazione quasi pari a zero (aggiungere qualche riga di ACL senza riavvio), l'adozione della misura di protezione è una decisione vantaggiosa in termini di gestione del rischio. **Non è necessario un aggiornamento urgente nel panico**, ma **è consigliabile applicare il workaround ACL entro questa settimana** e pianificare l'aggiornamento nella prossima finestra di manutenzione.
---
## RIFERIMENTO ACL
### Gruppi di comandi (command categories) importanti
| Gruppo | Descrizione | Impatto CVE |
| ------------- | ------------------------------------------------------------------------------------ | ----------------------------- |
| `@dangerous` | Comandi pericolosi (inclusi RESTORE, FLUSHDB, FLUSHALL, KEYS, SHUTDOWN, DEBUG, CONFIG) | CVE-2026-25243, 25588, 25589 |
| `@blocking` | Comandi bloccanti (BLPOP, BRPOP, BZPOPMIN, XREAD, WAIT, ...) | CVE-2026-23479 |
| `@scripting` | Scripting Lua (EVAL, EVALSHA, SCRIPT, FUNCTION, FCALL) | CVE-2026-23631 |
| `@admin` | Comandi amministrativi (CONFIG, ACL, CLIENT, CLUSTER, MONITOR, SHUTDOWN, ...) | Protezione generale |
| `@keyspace` | Comandi relativi al keyspace (KEYS, SCAN, FLUSHDB, FLUSHALL, ...) | Protezione generale |
| `@read` | Comandi di lettura dati (GET, HGET, LRANGE, SMEMBERS, ZRANGE, ...) | Sicuri |
| `@write` | Comandi di scrittura dati (SET, HSET, LPUSH, SADD, ZADD, ...) | Sicuri |
### Esempio di configurazione ACL completa```bash
# 1. Tao admin user (day du quyen)
redis-cli ACL SETUSER admin on >AdminPass123 ~* +@all
# 2. Tao app user (quyen gioi han)
redis-cli ACL SETUSER app on >AppPass123 ~* \
+@read \
+@write \
-@dangerous \
-@admin \
-@scripting \
-@blocking \
-restore \
-debug
# 3. Tao readonly user (chi doc)
redis-cli ACL SETUSER reader on >ReaderPass123 ~* \
+@read \
-@dangerous \
-@admin \
-@scripting
# 4. Vo hieu hoa default user
redis-cli ACL SETUSER default off
# 5. Luu ACL
redis-cli ACL SAVE
# 6. Kiem tra ACL
redis-cli ACL LIST
```
### Verifica efficace delle ACL```bash
# Liet ke tat ca ACL rules
redis-cli ACL LIST
# Kiem tra quyen cua mot user
redis-cli ACL GETUSER app
# Kiem tra user hien tai
redis-cli ACL WHOAMI
# Xem log vi pham ACL
redis-cli ACL LOG
```
---
## PROCEDURA DI TEST PERIODICO
### 1. Test una tantum (ad-hoc)```bash
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-H <redis_host> -p <port> -a <password> \
-o report_$(date +%Y%m%d_%H%M%S).txt
```
### 2. Verifica in batch di più istanze Redis
Crea il file `redis_hosts.txt`:```
# Format: host:port:password:user
10.0.0.1:6379:pass1:default
10.0.0.2:6379:pass2:default
10.0.0.3:6380:pass3:admin
```
Script di test in batch:```bash
#!/bin/bash
# File: batch_check.sh
BATCH_RESULT="batch_result_$(date +%Y%m%d_%H%M%S).txt"
while IFS=':' read -r host port pass user; do
[[ "$host" =~ ^#.* ]] && continue # Bo qua comment
[[ -z "$host" ]] && continue # Bo qua dong trong
echo "============================================" | tee -a "$BATCH_RESULT"
echo "Kiem tra: $host:$port" | tee -a "$BATCH_RESULT"
echo "============================================" | tee -a "$BATCH_RESULT"
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-H "$host" -p "${port:-6379}" \
-a "${pass:-}" -u "${user:-default}" \
2>&1 | tee -a "$BATCH_RESULT"
echo "" | tee -a "$BATCH_RESULT"
done < redis_hosts.txt
echo "Bao cao tong hop: $BATCH_RESULT"
```
### 3. Integrazione in cron (controllo giornaliero)```bash
# Them vao crontab (chay hang ngay luc 7:00 AM)
0 7 * * * /opt/scripts/CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-H 127.0.0.1 -p 6379 -a mypassword \
-o /var/log/redis/cve_report_$(date +\%Y\%m\%d).txt \
> /dev/null 2>&1
```
### 4. Integrazione nella pipeline CI/CD```yaml
# GitLab CI example
redis-security-scan:
stage: security
image: redis:7-alpine
script:
- chmod +x CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
- ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan \
-H $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS \
-o cve_report.txt
artifacts:
paths:
- cve_report.txt
when: always
allow_failure: true
```
---
## DOMANDE FREQUENTI (FAQ)
### D: Devo riavviare Redis dopo aver applicato `--fix-...`?
**R:** Sì, per le modifiche `rename-command` — diventano effettive solo dopo il riavvio di Redis. Le modifiche tramite `CONFIG SET` (come `protected-mode`, `replica-read-only`) diventano effettive immediatamente. Le modifiche tramite `ACL SETUSER` + `ACL SAVE` diventano effettive immediatamente, **senza bisogno di riavvio**. Se usi solo ACL (`--fix-restore`, `--fix-blocking`, `--fix-lua`), non devi riavviare. Lo script applica sempre sia ACL (runtime) che rename-command (richiede riavvio) per una protezione a più livelli.
### D: Bloccare RESTORE influisce sul normale funzionamento?
**R:** Il comando `RESTORE` viene solitamente usato solo nei seguenti casi:
- Ripristino dei dati da backup
- Migrazione dei dati tra istanze
- Sincronizzazione personalizzata dei dati
Se la tua applicazione non usa RESTORE, bloccare questo comando è sicuro. Se lo usi, crea un utente ACL dedicato con permesso RESTORE e usalo solo per scopi amministrativi.
### D: Sto usando Redis < 6.0, ACL non è disponibile. Come faccio?
**R:** Con Redis < 6.0, puoi usare solo `rename-command` per disabilitare i comandi. I passaggi:
1. Aggiungi `rename-command RESTORE ""` a redis.conf
2. Aggiungi i comandi `rename-command` per i blocking commands
3. Attiva `protected-mode yes`
4. Imposta `requirepass` con una password forte
5. Limita le connessioni tramite firewall
6. Riavvia Redis
### D: Come faccio a sapere se i moduli RedisTimeSeries/RedisBloom sono caricati?
**R:** Esegui il comando:```bash
redis-cli MODULE LIST
```
L'output mostrerà l'elenco dei moduli caricati con la relativa versione. Se non vedi `timeseries` o `bf`, il modulo non è caricato.
### D: `--fix-all` / `--fix-restore` / `--fix-...` sono sicuri per la produzione?
**R:** I comandi fix eseguono modifiche sicure:
- Backup di redis.conf prima della modifica (tranne quando si usa `--no-backup`)
- **ACL** (`-restore`, `-@blocking`, `-@scripting`): hanno effetto immediato, nessun downtime, facili da annullare
- **rename-command**: richiede il riavvio di Redis per avere effetto
- **CONFIG SET**: a runtime, si perde al riavvio se non scritto in redis.conf
Raccomandazione: Per la produzione, dai priorità all'uso di `--fix-restore`, `--fix-blocking`, `--fix-lua` (solo ACL, nessun riavvio necessario). Poi pianifica una finestra di manutenzione per il riavvio con `rename-command`.
### D: Come posso annullare (rollback) le modifiche di `--fix-...`?
**R:**
1. Se hai eseguito il backup: copia il file di backup sovrascrivendo redis.conf, poi riavvia Redis
2. Se hai usato `CONFIG SET`: il riavvio di Redis ripristinerà la configurazione dal file
3. Se hai usato `ACL SETUSER`: usa `ACL SETUSER <user> +<cmd>` per ripristinare i permessi
### D: Dovrei aggiornare Redis?
**R:** **Sì, se possibile.** L'aggiornamento a una versione patchata è la soluzione più definitiva. Questo script è pensato per i casi in cui:
- Non è possibile aggiornare subito a causa di vincoli applicativi
- Serve tempo per testare la nuova versione
- Serve una misura di protezione temporanea in attesa della finestra di manutenzione
### D: Redis gira internamente, non è esposto a Internet, protetto da firewall — serve comunque l'aggiornamento?
**R:** **Non è urgente l'aggiornamento**, ma **è consigliabile applicare il workaround e pianificare l'aggiornamento** perché:
- Il firewall riduce solo la **probabilità** di attacco, non elimina completamente il rischio
- Un attaccante dall'interno della rete interna (dipendente malintenzionato, macchina compromessa, lateral movement) può comunque sfruttare la vulnerabilità
- La conseguenza di uno sfruttamento è **RCE sull'intero sistema** — il livello di gravità più alto
- **Il costo del workaround è molto basso**: aggiungere ACL `-restore -@blocking -@scripting` richiede 2 minuti, nessun downtime
**Roadmap consigliata:**
1. **Questa settimana:** Applica il workaround ACL (nessun downtime)
2. **Prossima finestra di manutenzione:** Aggiorna Redis + aggiungi `rename-command`
Vedi i dettagli in [Valutazione del rischio — Sistema Redis interno / Sentinel](#valutazione-del-rischio--sistema-redis-interno--sentinel).
---
## RIFERIMENTI
- [Redis Security Advisory ufficiale](https://redis.io/blog/security-advisory-cve202623479-cve202625243-cve-2026-25588-cve202625589-cve-2026-23631/)
- [GitHub Advisory — CVE-2026-25243 (RESTORE RCE)](https://github.com/redis/redis/security/advisories/GHSA-c8h9-259x-jff4)
- [GitHub Advisory — CVE-2026-23631 (Lua UAF)](https://github.com/redis/redis/security/advisories/GHSA-8ghh-qpmp-7826)
- [Documentazione ACL di Redis](https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/)
- [Documentazione rename-command di Redis](https://redis.io/docs/latest/operate/oss_and_stack/management/security/#disable-specific-commands)
- [NVD — CVE-2026-25243](https://nvd.nist.gov/vuln/detail/CVE-2026-25243)
- [NVD — CVE-2026-25588](https://nvd.nist.gov/vuln/detail/CVE-2026-25588)
- [OpenCVE — CVE-2026-23479](https://app.opencve.io/cve/CVE-2026-23479)
- [Tenable — CVE-2026-23631](https://www.tenable.com/cve/CVE-2026-23631)
---
> **Disclaimer:** Questo documento è stato redatto sulla base di informazioni pubbliche provenienti dagli advisory di sicurezza Redis e dalle fonti NVD. L'utente è responsabile di verificare e confermare le misure di mitigazione appropriate per il proprio ambiente prima di applicarle.