
Script de diagnostic et de remédiation pour cinq CVE Redis, fournissant une analyse, une atténuation basée sur les ACL et des conseils de durcissement de configuration pour les vulnérabilités RCE authentifiées.
Date de publication : 2026-05-08 Auteur : TonyCao ([email protected]) Source : Redis Security Advisory
Le 05/05/2026, Redis Ltd. a publié un avis de sécurité concernant 5 vulnérabilités de sécurité critiques affectant toutes les versions de Redis OSS/CE. Toutes les CVE peuvent conduire à une exécution de code à distance (RCE) si elles sont exploitées avec succès.
| # | Code CVE | CVSS | Niveau | Type de faille | Conditions d'exploitation |
|---|---|---|---|---|---|
| 1 | CVE-2026-23479 | 7.7 | ÉLEVÉ | Use-After-Free | Authentifié, autorisé à exécuter des commandes bloquantes |
| 2 | CVE-2026-25243 | 7.7 | ÉLEVÉ | Accès mémoire invalide | Authentifié, autorisé à exécuter RESTORE |
| 3 | CVE-2026-25588 | 7.7 | ÉLEVÉ | Accès mémoire invalide | Authentifié, autorisé à RESTORE + module RedisTimeSeries |
| 4 | CVE-2026-25589 | 7.7 | ÉLEVÉ | Accès mémoire invalide | Authentifié, autorisé à RESTORE + module RedisBloom |
| 5 | CVE-2026-23631 | 6.1 | MOYEN | Use-After-Free | Authentifié, réplica avec replica-read-only = désactivé |
Point commun : Toutes les CVE exigent que l'attaquant soit authentifié auprès de l'instance Redis. La CVE-2026-23631 n'affecte que les réplicas ayant la configuration
replica-read-only disabled.
| Ligne de version | Version corrigée (minimale) |
|---|---|
| 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 |
| Module | Version minimale |
|---|---|
| RedisTimeSeries | 1.12.14 / 1.10.24 / 1.8.23 |
| RedisBloom | 2.8.20 / 2.6.28 / 2.4.23 |
| Version | Correctif |
|---|---|
| 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 |
Tous les déploiements Redis Cloud ont été automatiquement corrigés au moment de la publication de l'avis.
| Attribut | Valeur |
|---|---|
| Titre | Use-After-Free dans le flux de déblocage client |
| CVSS 4.0 | 7.7 (ÉLEVÉ) |
| CWE | CWE-416 (Use After Free) |
| Vecteur | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Condition | Attaquant authentifié, autorisé à exécuter des commandes bloquantes |
| Portée | Tous les Redis OSS/CE, Redis Software <= 8.0.6 |
Lorsqu'un client bloqué — par exemple en attente dans BLPOP — est expulsé pendant la ré-exécution de la commande bloquée, la fonction processCommandAndResetClient peut renvoyer une erreur. Le code actuel ne gère pas correctement ce cas, ce qui conduit à un pointeur référençant une zone mémoire déjà libérée (use-after-free). Un attaquant peut exploiter l'UAF pour exécuter du code à distance (RCE).
unblock client, processCommandAndResetClientredis-server exécute des commandes non identifiéesBLPOP, BRPOP, BRPOPLPUSH, BLMOVE, BLMPOP, BZPOPMIN, BZPOPMAX, BZMPOP, WAIT, WAITAOF, XREAD, XREADGROUP
#### Méthode de correction (sans mise à niveau)
**Option 1 — Blocage via ACL (recommandé) :**```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
Méthode 2 — Désactivation via rename-command (nécessite un redémarrage de 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 ""
**Méthode 3 — Activer le protected-mode et limiter les connexions :**```bash
redis-cli CONFIG SET protected-mode yes
# Trong redis.conf:
protected-mode yes
bind 127.0.0.1
| Propriété | Valeur |
|---|---|
| Titre | Accès mémoire invalide dans la commande RESTORE |
| CVSS 4.0 | 7.7 (ÉLEVÉ) |
| CWE | CWE-20 (Validation d'entrée incorrecte) + CWE-122 (Dépassement de tampon sur le tas) |
| Vecteur | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Condition | Attaquant authentifié, disposant du droit d'exécuter RESTORE |
| Portée | Tous les Redis OSS/CE, Redis Software <= 8.0.6 |
La vulnérabilité comprend 2 sous-problèmes :
Un attaquant authentifié envoie un payload RESTORE spécialement conçu pour exploiter les erreurs ci-dessus, ce qui peut conduire à une exécution de code à distance (RCE) dans le contexte du processus redis-server.
Méthode 1 — Bloquer RESTORE via ACL (recommandé) :```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SETUSER default -@dangerous
redis-cli ACL SAVE
**Méthode 2 — Désactivation de RESTORE (nécessite un redémarrage de Redis) :**```bash
# Thêm vào redis.conf:
rename-command RESTORE ""
Méthode 3 — Créer une ACL utilisateur dédiée à l’application :```bash
redis-cli ACL SETUSER app_user on >StrongPass123 ~*
+@read +@write
-@dangerous
-@admin
-@scripting
-@blocking
-restore
-debug
redis-cli ACL SAVE
---
### CVE-2026-25588
| Propriété | Valeur |
| ------------- | ---------------------------------------------------------------- |
| **Titre** | Accès mémoire invalide dans RESTORE avec le module RedisTimeSeries |
| **CVSS 4.0** | **7.7 (ÉLEVÉ)** |
| **CWE** | CWE-20 + CWE-122 |
| **Vecteur** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Condition** | Authentifié + droits RESTORE + **module RedisTimeSeries chargé** |
| **Portée** | Redis OSS/CE + module RedisTimeSeries |
#### Description technique
Lorsque la commande `RESTORE` est utilisée sur une instance avec le **module RedisTimeSeries** chargé, une charge utile sérialisée spécialement conçue peut déclencher un accès mémoire invalide lors du traitement des données de séries temporelles. La vulnérabilité réside dans la manière dont le module RedisTimeSeries désérialise les données de la charge utile RESTORE.
#### Signes d'identification
- Crash de Redis avec une trace de pile liée au module RedisTimeSeries
- Module RedisTimeSeries chargé (`MODULE LIST` affiche timeseries)
- Exécution de commandes non souhaitées par redis-server
#### Méthode de remédiation (sans mise à niveau)
**Méthode 1 — Bloquer RESTORE via ACL :** (identique à CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Méthode 2 — Supprimer le module RedisTimeSeries (si nécessaire) :```bash redis-cli MODULE UNLOAD timeseries
Sau đó xóa dòng sau khỏi `redis.conf` :```
loadmodule /path/to/redistimeseries.so
Méthode 3 — Mise à niveau uniquement du module (sans mise à niveau de Redis) :
Téléchargez la version corrigée du module :
redis-cli MODULE UNLOAD timeseries redis-cli MODULE LOAD /path/to/new/redistimeseries.so
---
### CVE-2026-25589
| Propriété | Valeur |
| ------------- | ----------------------------------------------------------------------------- |
| **Titre** | Accès mémoire invalide dans RESTORE avec le module RedisBloom |
| **CVSS 4.0** | **7.7 (HIGH)** |
| **CWE** | CWE-20 + CWE-122 + CWE-787 (écriture hors limites) + CWE-190 (débordement d'entier) |
| **Vecteur** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Conditions**| Authentifié + droits RESTORE + **module RedisBloom chargé** |
| **Portée** | Redis OSS/CE + module RedisBloom |
#### Description technique
La vulnérabilité comprend plusieurs sous-problèmes dans le module RedisBloom lors du traitement des payloads RESTORE :
1. **Lecture/écriture hors limites** (Daniel Firer) — lecture/écriture en dehors de la mémoire allouée
2. **Débordement d'entier, débordement de buffer du tas et lecture/écriture hors limites** (Joseph Surin) — débordement d'entier conduisant à un débordement de buffer du tas
Lorsque le module RedisBloom est chargé, un attaquant peut envoyer un payload RESTORE spécialement conçu pour exploiter les erreurs ci-dessus pendant la désérialisation des données des filtres de Bloom, filtres de Cuckoo, Count-Min Sketch ou Top-K.
#### Signes révélateurs
- Crash de Redis avec une trace de pile liée au module RedisBloom
- Module RedisBloom chargé (`MODULE LIST` affiche bf/bloom)
- Données dans les filtres de Bloom corrompues ou modifiées de manière anormale
#### Méthodes de remédiation (sans mise à niveau)
**Méthode 1 — Bloquer RESTORE via ACL :** (identique à CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Méthode 2 — Supprimer le module RedisBloom (si ce n’est pas nécessaire) :```bash redis-cli MODULE UNLOAD bf
Ensuite, supprimez la ligne suivante de `redis.conf` :```
loadmodule /path/to/redisbloom.so
Méthode 3 — Mise à niveau uniquement du module (sans mettre à niveau Redis) :
Téléchargez la version corrigée du module :
### CVE-2026-23631
| Attribut | Valeur |
| -------------- | --------------------------------------------------------------- |
| **Titre** | Use-After-Free Lua via la synchronisation Maître-Réplica |
| **CVSS 4.0** | **6.1 (MOYEN)** |
| **CWE** | CWE-416 (Use After Free) |
| **Vecteur** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Conditions** | Authentifié + **réplica** avec `replica-read-only` = **désactivé** |
| **Portée** | Tous les Redis OSS/CE avec scripting Lua, UNIQUEMENT sur réplica |
| **Nom de code**| "DarkReplica" (Yoni Shiraz, Wiz Zeroday Cloud) |
#### Description technique
Un attaquant authentifié peut exploiter le mécanisme de synchronisation maître-réplica pour envoyer des scripts Lua spéciaux, déclenchant un use-after-free dans le moteur Lua sur le réplica.
**Condition critique :** Le bug **n'affecte que les réplicas** configurés avec `replica-read-only disabled` (c'est-à-dire un réplica pouvant écrire). Ce n'est **PAS** une configuration par défaut — la valeur par défaut de `replica-read-only` est `yes`.
Si le réplica est configuré en mode lecture seule (par défaut), l'instance **n'est pas affectée**.
#### Signes d'identification
- Crash Redis sur le réplica avec une trace de pile provenant du moteur Lua
- Configuration `replica-read-only` = `no` sur le réplica
- Exécution de commandes non autorisées sur le réplica
- Connexions réseau non autorisées vers le réplica
#### Méthodes de remédiation (sans mise à niveau)
**Méthode 1 — Activer replica-read-only (recommandé, c'est la valeur par défaut) :**```bash
# Runtime
redis-cli CONFIG SET replica-read-only yes
# Trong redis.conf:
replica-read-only yes
Méthode 2 — Bloquer le scripting Lua via ACL :```bash redis-cli ACL SETUSER default -@scripting redis-cli ACL SETUSER default -eval -evalsha -script -function -fcall -fcall_ro redis-cli ACL SAVE
**Méthode 3 — Désactiver les commandes Lua (nécessite un redémarrage de 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 → diagnostic, vérification de tous les CVE--fix-... → applique la mesure corrective pour un CVE spécifique```
$ ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
→ hiển thị banner + HELP + thoát### Configuration requise
- **Système d’exploitation :** Linux (Ubuntu, Debian, CentOS, RHEL, ...)
- **Outil :** `redis-cli` (généralement inclus dans le paquet `redis-tools` ou `redis`)
- **Permissions :** Droits de lecture/écriture sur le fichier `redis.conf` (pour corriger)
- **Connexion :** Accès réseau à l’instance Redis à vérifier
### Installation de redis-cli (si absent)```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. Analyse complète des CVE (diagnostic)```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. Correctifs rapides groupés (recommandé)```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
### Tableau complet des paramètres
#### Paramètres d'action (ACTION) — obligatoires
| Paramètre | Fonction | Nombre de CVE protégés |
| ---------------- | ------------------------------------------ | ----------------------------- |
| *(aucun paramètre)* | Affiche le guide d'utilisation | — |
| `--scan` | Analyse diagnostique complète des 5 CVE | — |
| `--fix-all` | Corrige tous les CVE | **5/5** |
| `--fix-restore` | **[Rapide]** Bloque uniquement la commande RESTORE | **3/5** (25243, 25588, 25589) |
| `--fix-blocking` | **[Rapide]** Bloque uniquement les commandes bloquantes | **1/5** (23479) |
| `--fix-lua` | **[Rapide]** Bloque Lua + active replica-read-only | **1/5** (23631) |
| `--fix-cve-23479`| Corrige CVE-2026-23479 | 1/5 |
| `--fix-cve-25243`| Corrige CVE-2026-25243 | 1/5 |
| `--fix-cve-25588`| Corrige CVE-2026-25588 | 1/5 |
| `--fix-cve-25589`| Corrige CVE-2026-25589 | 1/5 |
| `--fix-cve-23631`| Corrige CVE-2026-23631 | 1/5 |
#### Paramètres de connexion
| Paramètre | Description | Défaut |
| -------------------- | ------------------------ | ------------ |
| `-H, --host HOST` | Adresse hôte Redis | `127.0.0.1` |
| `-p, --port PORT` | Port Redis | `6379` |
| `-a, --pass PASS` | Mot de passe Redis | *(vide)* |
| `-u, --user USER` | Nom d'utilisateur ACL | `default` |
| `-s, --socket PATH` | Chemin du socket Unix | *(vide)* |
#### Paramètres supplémentaires
| Paramètre | Description | Défaut |
| -------------------- | --------------------------------------- | ------------------------ |
| `-h, --help` | Affiche l'aide | — |
| `-c, --config FILE` | Chemin vers redis.conf | `/etc/redis/redis.conf` |
| `-o, --output FILE` | Écrit le rapport dans un fichier (uniquement avec `--scan`) | *(vide)* |
| `--redis-cli PATH` | Chemin vers le binaire redis-cli | `redis-cli` (depuis PATH)|
| `--no-backup` | Ne pas sauvegarder la config avant modification | `false` |
### Codes de sortie (Exit Codes)
| Code | Signification |
| ---- | ------------------------------------------------------ |
| `0` | Succès — aucun CVE détecté ou correction terminée |
| `1` | Erreur : redis-cli introuvable ou connexion impossible |
| `2` | `--scan` a détecté au moins 1 CVE — correction requise |
### Résultat de sortie lors de l'analyse (`--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:
---
## MÉTHODES DE REMÉDIATION GÉNÉRALES
### Méthode 1 : ACL (Redis >= 6.0) — RECOMMANDÉE
Il s'agit de la méthode la plus **sûre et la plus flexible**, sans nécessiter de redémarrage de 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
Ajoutez les lignes suivantes à 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 ""
Ensuite, redémarrez 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
### Méthode 4 : Exécuter Redis avec des privilèges minimaux```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
---
## ÉVALUATION DES RISQUES — SYSTÈME REDIS INTERNE / SENTINEL
Cette section concerne les clusters **Redis Sentinel** ou Redis autonome fonctionnant sur un réseau interne, protégés par un pare-feu (Fortinet, iptables, etc.) et **sans connexion directe à Internet**.
### Résumé
| Niveau de protection actuel | Réduction du risque ? | Mise à niveau nécessaire ? |
| ------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------- |
| Pas d’accès Internet | **Oui** — élimine les attaquants externes | Pas urgent |
| Pare-feu Fortinet (avec IPS/DPI) | **Oui** — filtre les IP sources, l’IPS peut détecter des payloads anormaux | Pas urgent |
| iptables (IP sources limitées) | **Oui** — seules les IP autorisées peuvent se connecter au port Redis | Pas urgent |
| **Combinaison des 3 mesures ci-dessus** | **Réduit la probabilité d’exploitation à un niveau très faible** | **Pas urgent, mais un plan est recommandé** |
### Point clé : pourquoi le pare-feu ne suffit-il pas ?
Les 5 CVE ont un point commun : l’attaquant doit **déjà être authentifié** auprès de Redis (PR:L — Privileges Required: Low dans le vecteur CVSS). Le pare-feu bloque les connexions provenant d’IP non autorisées, mais **ne protège pas** contre les menaces suivantes :
| Menace | Probabilité | Conséquences en cas d’exploitation |
| -------------------------------------------------------------------------------------------------------------- | ------------------------- | -------------------------------------------------------------------------------------- |
| **Employé interne malveillant** — ayant accès au réseau interne + connaissant le mot de passe Redis | Faible mais non exclue | **RCE** sur le serveur Redis, élévation de privilèges, vol de données |
| **Machine interne compromise (Mouvement latéral)** — l’attaquant infiltre une machine quelconque du réseau, puis attaque Redis | Moyenne | Toutes les données Redis volées/modifiées/supprimées ; l’attaquant peut installer une backdoor |
| **Erreur de configuration du pare-feu** — ouverture accidentelle du port Redis vers l’extérieur suite à une mauvaise règle | Faible | Équivalent à une exposition directe à Internet |
| **Supply Chain / Tiers** — partenaire, fournisseur disposant d’une connexion VPN vers le réseau interne | Faible | RCE, exfiltration de données |
| **Vulnérabilité dans le pare-feu/réseau lui-même** — l’attaquant contourne le pare-feu via une autre faille | Très faible | L’ensemble du système interne est affecté |
### Analyse quantitative des risques```
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
Le cluster Redis Sentinel comporte des risques supplémentaires qui lui sont propres :
| Vecteur d'attaque Sentinel | Description | CVE associés |
|---|---|---|
| Compromission de Sentinel — un attaquant compromet un nœud Sentinel, puis effectue un failover vers un réplica malveillant | Sentinel communique via un port dédié (généralement 26379), s'il n'est pas protégé séparément | CVE-2026-23631 (si le réplica a replica-read-only no) |
| Promotion de réplica — un réplica compromis est promu en master | Les données de tout le cluster sont modifiées | Tous les CVE RESTORE (25243, 25588, 25589) |
| Synchronisation master-réplica — un attaquant intercepte le flux de synchronisation | Les données sont volées pendant la synchronisation | CVE-2026-23631 |
| Priorité | Action | Délai d'exécution | Downtime nécessaire ? |
|---|---|---|---|
| P0 — Immédiat | Exécuter le script de vérification sur tous les nœuds (master + réplica + sentinel) : ./CVE-...sh -H <ip> -p <port> -a <pass> | 2-5 min / nœud | Non |
| P0 — Immédiat | Vérifier replica-read-only yes sur tous les réplicas : redis-cli CONFIG GET replica-read-only | 1 min / nœud | Non |
| P1 — Dans la semaine | Bloquer RESTORE via ACL (sans redémarrage) : redis-cli ACL SETUSER default -restore; redis-cli ACL SAVE | 2 min / nœud | Non |
| P1 — Dans la semaine | Bloquer les commandes @blocking via ACL (CVE-2026-23479) | 2 min / nœud | Non |
| P1 — Dans la semaine | Bloquer les commandes @scripting via ACL si Lua n'est pas utilisé (CVE-2026-23631) | 2 min / nœud | Non |
| P2 — Prochaine fenêtre de maintenance | Ajouter rename-command RESTORE "", rename-command EVAL "", ... dans redis.conf | 10 min (avec redémarrage) | Oui (redémarrage Redis) |
| P2 — Prochaine fenêtre de maintenance | Mettre à niveau Redis vers une version corrigée (6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3) | 30-60 min / cluster | Oui (redémarrage complet du 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
Dưới đây là bản dịch của chunk 71/91 từ tài liệu Markdown dài, từ tiếng Việt sang tiếng Pháp:
```markdown
## Các tính năng chính
- **Tự động hóa**: Tự động hóa các tác vụ lặp đi lặp lại để tiết kiệm thời gian và công sức.
- **Tích hợp**: Tích hợp liền mạch với các công cụ và quy trình làm việc hiện có.
- **Bảo mật**: Ưu tiên bảo mật với các phương pháp mã hóa và xác thực mạnh mẽ.
- **Khả năng mở rộng**: Được thiết kế để xử lý khối lượng công việc lớn và mở rộng quy mô một cách dễ dàng.
- **Thân thiện với người dùng**: Giao diện trực quan và tài liệu rõ ràng giúp dễ dàng sử dụng.
## Cài đặt
Để cài đặt công cụ, hãy chạy lệnh sau:
```bash
pip install tool-name
Hoặc, nếu bạn muốn cài đặt từ nguồn:
git clone https://github.com/example/tool-name.git
cd tool-name
pip install -r requirements.txt
Sau khi cài đặt, bạn có thể sử dụng công cụ bằng lệnh:
tool-name --help
Để biết thêm chi tiết về các tùy chọn và ví dụ, hãy tham khảo tài liệu chính thức tại trang web của công cụ.
Chúng tôi hoan nghênh mọi đóng góp! Vui lòng đọc hướng dẫn đóng góp trước khi gửi pull request.
Dự án này được cấp phép theo Giấy phép MIT.
# ============================================
# 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
```
### Flux de décision : Faut-il mettre à niveau immédiatement ?```
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
```
### Conclusion
> **Firewall + isolation réseau réduisent la probabilité d'exploitation à un niveau très bas, mais les conséquences en cas d'exploitation restent une RCE sur tout le système.** Avec un coût de remédiation quasi nul (ajouter quelques lignes d'ACL sans redémarrage), l'application de la mesure de protection est une décision favorable en termes de gestion des risques. **Pas besoin de paniquer et de mettre à jour en urgence**, mais **il est recommandé d'appliquer le workaround ACL cette semaine** et de planifier la mise à niveau lors de la prochaine fenêtre de maintenance.
---
## RÉFÉRENCE ACL
### Groupes de commandes importants
| Groupe | Description | Impact CVE |
| ------------- | ------------------------------------------------------------------------------- | ---------------------------- |
| `@dangerous` | Commandes dangereuses (incluant RESTORE, FLUSHDB, FLUSHALL, KEYS, SHUTDOWN, DEBUG, CONFIG) | CVE-2026-25243, 25588, 25589 |
| `@blocking` | Commandes bloquantes (BLPOP, BRPOP, BZPOPMIN, XREAD, WAIT, ...) | CVE-2026-23479 |
| `@scripting` | Scripting Lua (EVAL, EVALSHA, SCRIPT, FUNCTION, FCALL) | CVE-2026-23631 |
| `@admin` | Commandes d'administration (CONFIG, ACL, CLIENT, CLUSTER, MONITOR, SHUTDOWN, ...) | Protection générale |
| `@keyspace` | Commandes liées à l'espace de clés (KEYS, SCAN, FLUSHDB, FLUSHALL, ...) | Protection générale |
| `@read` | Commandes de lecture de données (GET, HGET, LRANGE, SMEMBERS, ZRANGE, ...) | Sûr |
| `@write` | Commandes d'écriture de données (SET, HSET, LPUSH, SADD, ZADD, ...) | Sûr |
### Exemple de configuration ACL complète```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
```
### Vérification efficace des 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
```
---
## PROCÉDURE DE TEST PÉRIODIQUE
### 1. Test ponctuel (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. Vérification en masse de plusieurs instances Redis
Créez le fichier `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 de vérification en masse :```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. Intégration dans cron (vérification quotidienne)```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. Intégration dans le 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
```
---
## FOIRE AUX QUESTIONS (FAQ)
### Q : Dois-je redémarrer Redis après avoir appliqué `--fix-...` ?
**R :** Oui, pour les modifications `rename-command` — elles ne prennent effet qu'après un redémarrage de Redis. Les modifications via `CONFIG SET` (comme `protected-mode`, `replica-read-only`) prennent effet immédiatement. Les modifications via `ACL SETUSER` + `ACL SAVE` prennent effet immédiatement, **sans redémarrage nécessaire**. Si vous utilisez uniquement ACL (`--fix-restore`, `--fix-blocking`, `--fix-lua`), aucun redémarrage n'est requis. Le script applique toujours simultanément ACL (runtime) et rename-command (nécessite un redémarrage) pour une protection multicouche.
### Q : Le blocage de RESTORE affecte-t-il le fonctionnement normal ?
**R :** La commande `RESTORE` n'est généralement utilisée que dans les cas suivants :
- Récupération de données à partir d'une sauvegarde
- Migration de données entre instances
- Synchronisation de données personnalisée
Si votre application n'utilise pas RESTORE, bloquer cette commande est sans danger. Si elle l'utilise, créez un utilisateur ACL dédié disposant du droit RESTORE et réservez-le à des fins d'administration.
### Q : J'utilise Redis < 6.0, ACL n'est pas disponible. Que faire ?
**R :** Avec Redis < 6.0, vous ne pouvez utiliser que `rename-command` pour désactiver les commandes. Les étapes :
1. Ajoutez `rename-command RESTORE ""` dans redis.conf
2. Ajoutez les commandes `rename-command` pour les commandes bloquantes
3. Activez `protected-mode yes`
4. Configurez `requirepass` avec un mot de passe fort
5. Limitez les connexions via le pare-feu
6. Redémarrez Redis
### Q : Comment savoir si les modules RedisTimeSeries/RedisBloom sont chargés ?
**R :** Exécutez la commande :```bash
redis-cli MODULE LIST
```
La sortie affichera la liste des modules chargés avec leur version. Si `timeseries` ou `bf` n'apparaissent pas, le module n'est pas chargé.
### Q : `--fix-all` / `--fix-restore` / `--fix-...` est-il sûr pour la production ?
**R :** Les commandes fix effectuent des modifications sûres :
- Sauvegarde de redis.conf avant modification (sauf si `--no-backup` est utilisé)
- **ACL** (`-restore`, `-@blocking`, `-@scripting`) : effet immédiat, sans temps d'arrêt, facile à annuler
- **rename-command** : nécessite un redémarrage de Redis pour prendre effet
- **CONFIG SET** : runtime, perdu au redémarrage s'il n'est pas écrit dans redis.conf
Recommandation : Pour la production, privilégiez d'abord `--fix-restore`, `--fix-blocking`, `--fix-lua` (ACL uniquement, sans redémarrage). Planifiez ensuite une fenêtre de maintenance pour redémarrer avec `rename-command`.
### Q : Comment annuler (rollback) les modifications de `--fix-...` ?
**R :**
1. Si une sauvegarde existe : copiez le fichier de sauvegarde par-dessus redis.conf, puis redémarrez Redis
2. Si `CONFIG SET` a été utilisé : un redémarrage de Redis restaurera la configuration depuis le fichier
3. Si `ACL SETUSER` a été utilisé : utilisez `ACL SETUSER <user> +<cmd>` pour restaurer les permissions
### Q : Dois-je mettre à niveau Redis ?
**R :** **Oui, si possible.** La mise à niveau vers une version corrigée est la solution la plus radicale. Ce script est destiné aux cas suivants :
- Mise à niveau impossible immédiatement en raison de contraintes applicatives
- Besoin de temps pour tester la nouvelle version
- Besoin d'une mesure de protection temporaire en attendant la fenêtre de maintenance
### Q : Redis tourne en interne, sans accès Internet, protégé par un pare-feu — faut-il quand même mettre à niveau ?
**R :** **Pas de mise à niveau urgente**, mais **il est recommandé d'appliquer le workaround et de planifier une mise à niveau** car :
- Le pare-feu ne réduit que la **probabilité** d'attaque, sans éliminer complètement le risque
- Un attaquant depuis le réseau interne (employé malveillant, machine compromise, mouvement latéral) peut toujours exploiter la faille
- La conséquence d'une exploitation est une **RCE sur tout le système** — le niveau de gravité le plus élevé
- **Le coût du workaround est très faible** : ajouter l'ACL `-restore -@blocking -@scripting` prend 2 minutes, sans temps d'arrêt
**Feuille de route recommandée :**
1. **Cette semaine :** Appliquer le workaround ACL (sans temps d'arrêt)
2. **Prochaine fenêtre de maintenance :** Mettre à niveau Redis + ajouter `rename-command`
Voir les détails dans [Évaluation des risques — Système Redis interne / Sentinel](#évaluation-des-risques--système-redis-interne--sentinel).
---
## RÉFÉRENCES
- [Avis de sécurité officiel Redis](https://redis.io/blog/security-advisory-cve202623479-cve202625243-cve-2026-25588-cve202625589-cve-2026-23631/)
- [Avis GitHub — CVE-2026-25243 (RESTORE RCE)](https://github.com/redis/redis/security/advisories/GHSA-c8h9-259x-jff4)
- [Avis GitHub — CVE-2026-23631 (Lua UAF)](https://github.com/redis/redis/security/advisories/GHSA-8ghh-qpmp-7826)
- [Documentation Redis ACL](https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/)
- [Documentation Redis rename-command](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)
---
> **Avertissement :** Ce document est rédigé sur la base d'informations publiques issues des avis de sécurité Redis et des sources NVD. L'utilisateur est responsable de vérifier et de confirmer les mesures correctives adaptées à son environnement avant de les appliquer.