
Diagnose- und Behebungsskript für fünf Redis-CVEs, das Scannen, ACL-basierte Abschwächung und Anleitung zur Härtung der Konfiguration für authentifizierte RCE-Schwachstellen bietet.
Veröffentlichungsdatum: 2026-05-08 Autor: TonyCao ([email protected]) Quelle: Redis Security Advisory
Am 05.05.2026 veröffentlichte Redis Ltd. ein Security Advisory über 5 schwerwiegende Sicherheitslücken, die alle Versionen von Redis OSS/CE betreffen. Alle CVEs können bei erfolgreicher Ausnutzung zu Remote Code Execution (RCE) führen.
| # | CVE-Code | CVSS | Schweregrad | Fehlertyp | Ausnutzungsbedingungen |
|---|---|---|---|---|---|
| 1 | CVE-2026-23479 | 7.7 | HOCH | Use-After-Free | Authentifiziert, mit Berechtigung zum Ausführen von Blocking-Befehlen |
| 2 | CVE-2026-25243 | 7.7 | HOCH | Ungültiger Speicherzugriff | Authentifiziert, mit Berechtigung zum Ausführen von RESTORE |
| 3 | CVE-2026-25588 | 7.7 | HOCH | Ungültiger Speicherzugriff | Authentifiziert, mit RESTORE-Berechtigung + RedisTimeSeries-Modul |
| 4 | CVE-2026-25589 | 7.7 | HOCH | Ungültiger Speicherzugriff | Authentifiziert, mit RESTORE-Berechtigung + RedisBloom-Modul |
| 5 | CVE-2026-23631 | 6.1 | MITTEL | Use-After-Free | Authentifiziert, Replica mit replica-read-only = deaktiviert |
Gemeinsamkeit: Alle CVEs erfordern, dass der Angreifer bereits authentifiziert ist. CVE-2026-23631 betrifft nur Replicas mit der Konfiguration
replica-read-only disabled.
| Versionslinie | Gepatchte Version (mindestens) |
|---|---|
| 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 |
| Modul | Mindestversion |
|---|---|
| RedisTimeSeries | 1.12.14 / 1.10.24 / 1.8.23 |
| RedisBloom | 2.8.20 / 2.6.28 / 2.4.23 |
| Version | 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 |
Alle Redis-Cloud-Deployments wurden zum Zeitpunkt der Veröffentlichung des Advisories automatisch gepatcht.
| Eigenschaft | Wert |
|---|---|
| Titel | Use-After-Free im Unblock Client Flow |
| CVSS 4.0 | 7.7 (HOCH) |
| CWE | CWE-416 (Use After Free) |
| Vektor | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Bedingung | Authentifizierter Angreifer mit Berechtigung zur Ausführung von Blocking-Befehlen |
| Umfang | Alle Redis OSS/CE, Redis Software <= 8.0.6 |
Wenn ein Client blockiert ist — z. B. wartet in BLPOP — und während der erneuten Ausführung des blockierten Befehls evictiert wird, kann die Funktion processCommandAndResetClient einen Fehler zurückgeben. Der aktuelle Code behandelt diesen Fall nicht korrekt, was zu einem Zeiger führt, der auf bereits freigegebenen Speicher verweist (Use-After-Free). Ein Angreifer kann die UAF ausnutzen, um Code remote auszuführen (RCE).
unblock client, processCommandAndResetClient enthältredis-server führt unbekannte Befehle ausBLPOP, BRPOP, BRPOPLPUSH, BLMOVE, BLMPOP, BZPOPMIN, BZPOPMAX, BZMPOP, WAIT, WAITAOF, XREAD, XREADGROUP
#### Abhilfemaßnahmen (ohne Upgrade)
**Methode 1 — Blockierung über ACL (empfohlen):**```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
Methode 2 — Deaktivierung über rename-command (Redis-Neustart erforderlich):```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 ""
**Methode 3 — Protected-Mode aktivieren und Verbindungen begrenzen:**```bash
redis-cli CONFIG SET protected-mode yes
# Trong redis.conf:
protected-mode yes
bind 127.0.0.1
| Eigenschaft | Wert |
|---|---|
| Titel | Ungültiger Speicherzugriff im RESTORE-Befehl |
| CVSS 4.0 | 7.7 (HOCH) |
| CWE | CWE-20 (Unzureichende Eingabevalidierung) + CWE-122 (Heap-Pufferüberlauf) |
| Vektor | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Bedingung | Authentifizierter Angreifer mit Ausführungsrechten für RESTORE |
| Betroffen | Alle Redis OSS/CE, Redis Software <= 8.0.6 |
Die Schwachstelle umfasst 2 Teilprobleme:
Ein authentifizierter Angreifer sendet eine speziell gestaltete RESTORE-Payload, um die oben genannten Fehler auszunutzen, was zu RCE im Kontext des redis-server-Prozesses führen kann.
Methode 1 — RESTORE über ACL blockieren (empfohlen):```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SETUSER default -@dangerous
redis-cli ACL SAVE
**Methode 2 — RESTORE deaktivieren (Redis-Neustart erforderlich):**```bash
# Thêm vào redis.conf:
rename-command RESTORE ""
Methode 3 — Erstellen eines eigenen ACL-Benutzers für die Anwendung:```bash
redis-cli ACL SETUSER app_user on >StrongPass123 ~*
+@read +@write
-@dangerous
-@admin
-@scripting
-@blocking
-restore
-debug
redis-cli ACL SAVE
---
### CVE-2026-25588
| Eigenschaft | Wert |
| -------------- | ----------------------------------------------------------------- |
| **Titel** | Ungültiger Speicherzugriff in RESTORE mit RedisTimeSeries-Modul |
| **CVSS 4.0** | **7.7 (HOCH)** |
| **CWE** | CWE-20 + CWE-122 |
| **Vektor** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Bedingung** | Authentifiziert + RESTORE-Berechtigung + **RedisTimeSeries-Modul geladen** |
| **Umfang** | Redis OSS/CE + RedisTimeSeries-Modul |
#### Technische Beschreibung
Wenn der Befehl `RESTORE` auf einer Instanz mit geladenem **RedisTimeSeries-Modul** verwendet wird, kann eine speziell gestaltete serialisierte Nutzlast einen ungültigen Speicherzugriff während der Verarbeitung von Zeitreihendaten auslösen. Die Schwachstelle liegt in der Art und Weise, wie das RedisTimeSeries-Modul Daten aus der RESTORE-Nutzlast deserialisiert.
#### Erkennungsmerkmale
- Redis-Absturz mit Stack-Trace im Zusammenhang mit dem RedisTimeSeries-Modul
- Das RedisTimeSeries-Modul ist geladen (`MODULE LIST` zeigt timeseries an)
- Unerwartete Befehlsausführung durch redis-server
#### Abhilfemaßnahmen (ohne Upgrade)
**Methode 1 — RESTORE über ACL blockieren:** (wie CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Methode 2 — Entfernen des RedisTimeSeries-Moduls (falls nicht benötigt):```bash redis-cli MODULE UNLOAD timeseries
Danach entfernen Sie die folgende Zeile aus `redis.conf`:```
loadmodule /path/to/redistimeseries.so
Methode 3 — Nur das Modul aktualisieren (ohne Redis zu aktualisieren):
Laden Sie die gepatchte Modulversion herunter:
redis-cli MODULE UNLOAD timeseries redis-cli MODULE LOAD /path/to/new/redistimeseries.so
---
### CVE-2026-25589
| Eigenschaft | Wert |
| -------------- | ----------------------------------------------------------------------------- |
| **Titel** | Ungültiger Speicherzugriff in RESTORE mit RedisBloom-Modul |
| **CVSS 4.0** | **7.7 (HOCH)** |
| **CWE** | CWE-20 + CWE-122 + CWE-787 (Out-of-Bounds Write) + CWE-190 (Integer Overflow) |
| **Vektor** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Bedingung** | Authentifiziert + RESTORE-Berechtigung + **RedisBloom-Modul geladen** |
| **Umfang** | Redis OSS/CE + RedisBloom-Modul |
#### Technische Beschreibung
Die Schwachstelle umfasst mehrere Sub-Issues im RedisBloom-Modul bei der Verarbeitung von RESTORE-Payloads:
1. **Out-of-Bounds read/write** (Daniel Firer) — Lesen/Schreiben außerhalb des zugewiesenen Speicherbereichs
2. **Integer Overflow, Heap-Buffer-Overflow und OOB read/write** (Joseph Surin) — Integer-Überlauf führt zu Heap-Buffer-Überlauf
Wenn das RedisBloom-Modul geladen ist, kann ein Angreifer einen speziell gestalteten RESTORE-Payload senden, um die oben genannten Fehler während der Deserialisierung von Bloom-Filter-, Cuckoo-Filter-, Count-Min-Sketch- oder Top-K-Daten auszunutzen.
#### Erkennungsmerkmale
- Redis-Absturz mit Stack-Trace im Zusammenhang mit dem RedisBloom-Modul
- Das RedisBloom-Modul ist geladen (`MODULE LIST` zeigt bf/bloom an)
- Daten in den Bloom-Filtern sind beschädigt oder weisen ungewöhnliche Änderungen auf
#### Abhilfemaßnahmen (ohne Upgrade)
**Methode 1 — RESTORE über ACL blockieren:** (wie bei CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Methode 2 — Entfernen des RedisBloom-Moduls (falls nicht benötigt):```bash redis-cli MODULE UNLOAD bf
Danach entferne die folgende Zeile aus `redis.conf`:```
loadmodule /path/to/redisbloom.so
Methode 3 — Nur das Modul upgraden (ohne Redis zu upgraden):
Laden Sie die gepatchte Modulversion herunter:
---
### CVE-2026-23631
| Eigenschaft | Wert |
| -------------- | ---------------------------------------------------------------- |
| **Titel** | Lua Use-After-Free über Master-Replica-Synchronisation |
| **CVSS 4.0** | **6.1 (MITTEL)** |
| **CWE** | CWE-416 (Use After Free) |
| **Vektor** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Bedingung** | Authentifiziert + **Replica** mit `replica-read-only` = **deaktiviert** |
| **Umfang** | Alle Redis OSS/CE mit Lua-Scripting, NUR auf Replica |
| **Codename** | „DarkReplica" (Yoni Shiraz, Wiz Zeroday Cloud) |
#### Technische Beschreibung
Ein authentifizierter Angreifer kann den Master-Replica-Synchronisationsmechanismus ausnutzen, um spezielle Lua-Skripte zu senden, die einen Use-After-Free in der Lua-Engine auf der Replica auslösen.
**Wichtige Bedingung:** Der Bug **betrifft nur Replicas**, die mit `replica-read-only disabled` konfiguriert sind (d. h. die Replica kann schreiben). Dies ist KEINE Standardkonfiguration — standardmäßig ist `replica-read-only` = `yes`.
Wenn die Replica im Read-Only-Modus konfiguriert ist (Standard), ist die Instanz **nicht betroffen**.
#### Erkennungsmerkmale
- Redis-Absturz auf der Replica mit Stack-Trace aus der Lua-Engine
- Konfiguration `replica-read-only` = `no` auf der Replica
- Ausführung unbekannter Befehle auf der Replica
- Nicht autorisierte Netzwerkverbindungen zur Replica
#### Abhilfemaßnahmen (ohne Upgrade)
**Methode 1 — replica-read-only aktivieren (empfohlen, dies ist die Standardeinstellung):**```bash
# Runtime
redis-cli CONFIG SET replica-read-only yes
# Trong redis.conf:
replica-read-only yes
Methode 2 — Lua-Scripting über ACL blockieren:```bash redis-cli ACL SETUSER default -@scripting redis-cli ACL SETUSER default -eval -evalsha -script -function -fcall -fcall_ro redis-cli ACL SAVE
**Methode 3 — Lua-Befehle deaktivieren (Redis-Neustart erforderlich):**```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 → Diagnose, prüft alle CVEs--fix-... → wendet die Abhilfemaßnahme für die jeweilige CVE an```
$ ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
→ hiển thị banner + HELP + thoát### Systemanforderungen
- **Betriebssystem:** Linux (Ubuntu, Debian, CentOS, RHEL, ...)
- **Werkzeug:** `redis-cli` (normalerweise im Paket `redis-tools` oder `redis` enthalten)
- **Berechtigungen:** Lese-/Schreibzugriff auf die Datei `redis.conf` (zur Behebung)
- **Verbindung:** Netzwerkzugriff auf die zu prüfende Redis-Instanz
### Installation von redis-cli (falls noch nicht vorhanden)```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. Vollständiger CVE-Scan (Diagnose)```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. Schnellbehebung nach Gruppen (empfohlen)```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
### Vollständige Parametertabelle
#### Aktionsparameter (ACTION) — erforderlich
| Parameter | Funktion | Anzahl geschützter CVEs |
| ---------------- | -------------------------------------------- | ----------------------------- |
| *(kein Parameter)* | Zeigt die Bedienungsanleitung an | — |
| `--scan` | Führt eine Diagnose aller 5 CVEs durch | — |
| `--fix-all` | Behebt alle CVEs | **5/5** |
| `--fix-restore` | **[Schnell]** Blockiert nur den RESTORE-Befehl | **3/5** (25243, 25588, 25589) |
| `--fix-blocking` | **[Schnell]** Blockiert nur blockierende Befehle | **1/5** (23479) |
| `--fix-lua` | **[Schnell]** Blockiert Lua + aktiviert replica-read-only | **1/5** (23631) |
| `--fix-cve-23479`| Behebt CVE-2026-23479 | 1/5 |
| `--fix-cve-25243`| Behebt CVE-2026-25243 | 1/5 |
| `--fix-cve-25588`| Behebt CVE-2026-25588 | 1/5 |
| `--fix-cve-25589`| Behebt CVE-2026-25589 | 1/5 |
| `--fix-cve-23631`| Behebt CVE-2026-23631 | 1/5 |
#### Verbindungsparameter
| Parameter | Beschreibung | Standard |
| -------------------- | ------------------------- | ------------ |
| `-H, --host HOST` | Redis-Hostadresse | `127.0.0.1` |
| `-p, --port PORT` | Redis-Port | `6379` |
| `-a, --pass PASS` | Redis-Passwort | *(leer)* |
| `-u, --user USER` | ACL-Benutzername | `default` |
| `-s, --socket PATH` | Unix-Socket-Pfad | *(leer)* |
#### Zusätzliche Parameter
| Parameter | Beschreibung | Standard |
| -------------------- | ------------------------------------------ | ------------------------ |
| `-h, --help` | Zeigt Hilfe an | — |
| `-c, --config FILE` | Pfad zu redis.conf | `/etc/redis/redis.conf` |
| `-o, --output FILE` | Schreibt Bericht in Datei (nur mit `--scan`) | *(leer)* |
| `--redis-cli PATH` | Pfad zur redis-cli-Binary | `redis-cli` (aus PATH) |
| `--no-backup` | Kein Backup der Config vor der Änderung | `false` |
### Exit-Codes
| Code | Bedeutung |
| ---- | -------------------------------------------------------- |
| `0` | Erfolg — kein CVE erkannt oder Fix abgeschlossen |
| `1` | Fehler: redis-cli nicht gefunden oder keine Verbindung möglich |
| `2` | `--scan` hat mindestens 1 CVE erkannt — Behebung erforderlich |
### Ausgabe beim Scannen (`--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:
---
## ALLGEMEINE ABHILFEMETHODEN
### Methode 1: ACL (Redis >= 6.0) — EMPFOHLEN
Dies ist die **sicherste und flexibelste Methode**, ohne dass Redis neu gestartet werden muss.```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
Fügen Sie die folgenden Zeilen zu redis.conf hinzu:```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 ""
Danach starte Redis neu:```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
### Methode 4: Redis mit minimalen Rechten ausführen```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
---
## RISIKOBEWERTUNG — INTERNES REDIS-SYSTEM / SENTINEL
Dieser Abschnitt gilt für **Redis Sentinel**-Cluster oder eigenständige Redis-Instanzen, die im internen Netzwerk laufen, durch eine Firewall (Fortinet, iptables usw.) geschützt sind und **keine direkte Verbindung zum Internet** haben.
### Zusammenfassung
| Vorhandene Schutzstufe | Risikominderung? | Upgrade erforderlich? |
| ------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------- |
| Kein Internetzugriff | **Ja** — eliminiert externe Angreifer | Nicht dringend |
| Fortinet Firewall (mit IPS/DPI) | **Ja** — filtert Quell-IPs, IPS kann ungewöhnliche Payloads erkennen | Nicht dringend |
| iptables (Quell-IP-Beschränkung) | **Ja** — nur erlaubte IPs können sich mit dem Redis-Port verbinden | Nicht dringend |
| **Kombination aller drei Maßnahmen** | **Reduziert die Ausnutzungswahrscheinlichkeit erheblich** | **Nicht dringend, aber ein Plan ist ratsam** |
### Kernpunkt: Warum eine Firewall nicht ausreicht?
Alle 5 CVEs haben eines gemeinsam: Der Angreifer muss **bereits authentifiziert** sein (PR:L — Privileges Required: Low im CVSS-Vektor). Eine Firewall blockiert Verbindungen von nicht erlaubten IPs, schützt aber **nicht** vor den folgenden Bedrohungen:
| Bedrohung | Eintrittswahrscheinlichkeit | Folgen bei Ausnutzung |
| -------------------------------------------------------------------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------ |
| **Böswilliger interner Mitarbeiter** — hat Zugriff auf das interne Netzwerk + kennt das Redis-Passwort | Gering, aber nicht auszuschließen | **RCE** auf dem Redis-Server, Privilege Escalation, Datendiebstahl |
| **Kompromittierter interner Host (Lateral Movement)** — Angreifer übernimmt einen beliebigen Host im Netzwerk und greift von dort Redis an | Mittel | Alle Redis-Daten werden gestohlen/verändert/gelöscht; Angreifer kann Backdoors installieren |
| **Firewall-Konfigurationsfehler** — versehentliches Öffnen des Redis-Ports nach außen durch fehlerhafte Regeländerung | Gering | Gleichbedeutend mit direkter Internet-Exposition |
| **Supply Chain / Drittanbieter** — Partner oder Anbieter mit VPN-Zugang ins interne Netzwerk | Gering | RCE, Datendiebstahl (Data Exfiltration) |
| **Schwachstelle in der Firewall/Netzwerk selbst** — Angreifer umgeht die Firewall über eine andere Schwachstelle | Sehr gering | Das gesamte interne System ist betroffen |
### Quantitative Risikoanalyse```
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
Redis-Sentinel-Cluster bringen zusätzliche eigene Risiken mit sich:
| Sentinel-Angriffsvektor | Beschreibung | Zugehörige CVEs |
|---|---|---|
| Sentinel-Übernahme — Angreifer übernimmt Sentinel-Knoten und führt Failover auf bösartige Replica durch | Sentinel kommuniziert über einen eigenen Port (üblicherweise 26379), wenn dieser nicht separat geschützt ist | CVE-2026-23631 (falls Replica replica-read-only no hat) |
| Replica-Promotion — kompromittierte Replica wird zum Master befördert | Daten des gesamten Clusters werden verändert | Alle RESTORE-CVEs (25243, 25588, 25589) |
| Master-Replica-Synchronisierung — Angreifer fängt den Sync-Datenstrom ab | Daten werden während der Synchronisierung gestohlen | CVE-2026-23631 |
| Priorität | Aktion | Umsetzungszeit | Downtime erforderlich? |
|---|---|---|---|
| P0 — Sofort | Prüfskript auf allen Knoten ausführen (Master + Replica + Sentinel): ./CVE-...sh -H <ip> -p <port> -a <pass> | 2-5 Minuten / Knoten | Nein |
| P0 — Sofort | replica-read-only yes auf allen Replicas prüfen: redis-cli CONFIG GET replica-read-only | 1 Minute / Knoten | Nein |
| P1 — Innerhalb der Woche | RESTORE über ACL blockieren (kein Neustart nötig): redis-cli ACL SETUSER default -restore; redis-cli ACL SAVE | 2 Minuten / Knoten | Nein |
| P1 — Innerhalb der Woche | @blocking-Befehle über ACL blockieren (CVE-2026-23479) | 2 Minuten / Knoten | Nein |
| P1 — Innerhalb der Woche | @scripting-Befehle über ACL blockieren, falls Lua nicht verwendet wird (CVE-2026-23631) | 2 Minuten / Knoten | Nein |
| P2 — Bis zum nächsten Wartungsfenster | rename-command RESTORE "", rename-command EVAL "", ... in redis.conf hinzufügen | 10 Minuten (mit Neustart) | Ja (Redis-Neustart) |
| P2 — Bis zum nächsten Wartungsfenster | Redis auf gepatchte Version aktualisieren (6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3) | 30-60 Minuten / Cluster | Ja (Clusterweiter Neustart) |
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
Để sử dụng công cụ này, bạn cần có Python 3.6 trở lên. Cài đặt các phụ thuộc bằng lệnh sau:
pip install -r requirements.txt
Sau đó, chạy công cụ với lệnh:
python main.py --target example.com --output report.html
| Tham số | Mô tả | Bắt buộc |
|---|---|---|
--target | Tên miền hoặc địa chỉ IP mục tiêu | Có |
--output | Đường dẫn tệp đầu ra cho báo cáo | Không |
--verbose | Bật chế độ ghi log chi tiết | Không |
Quét một mục tiêu và lưu kết quả vào tệp HTML:
python main.py --target example.com --output report.html
Quét với chế độ chi tiết:
python main.py --target example.com --verbose
Công cụ này được phân phối theo giấy phép MIT. Xem tệp LICENSE để biết thêm chi tiết.
# ============================================
# 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
```
### Entscheidungsablauf: Ist ein sofortiges Upgrade erforderlich?```
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
```
### Fazit
> **Firewall + Netzwerk-Isolation reduzieren die Ausnutzungswahrscheinlichkeit auf ein sehr niedriges Niveau, aber die Konsequenz bei erfolgreicher Ausnutzung bleibt eine systemweite RCE.** Da die Behebungskosten nahezu null betragen (ein paar ACL-Zeilen ohne Neustart hinzufügen), ist die Anwendung der Schutzmaßnahme eine vorteilhafte Entscheidung im Risikomanagement. **Kein Grund für panische Sofort-Upgrades**, aber **die ACL-Workaround sollte diese Woche angewendet werden** und ein Upgrade im nächsten Wartungsfenster eingeplant werden.
---
## ACL-REFERENZ
### Wichtige Befehlskategorien
| Gruppe | Beschreibung | CVE-Auswirkung |
| ------------- | ------------------------------------------------------------------------------ | ---------------------------- |
| `@dangerous` | Gefährliche Befehle (einschließlich RESTORE, FLUSHDB, FLUSHALL, KEYS, SHUTDOWN, DEBUG, CONFIG) | CVE-2026-25243, 25588, 25589 |
| `@blocking` | Blockierende Befehle (BLPOP, BRPOP, BZPOPMIN, XREAD, WAIT, ...) | CVE-2026-23479 |
| `@scripting` | Lua-Scripting (EVAL, EVALSHA, SCRIPT, FUNCTION, FCALL) | CVE-2026-23631 |
| `@admin` | Verwaltungsbefehle (CONFIG, ACL, CLIENT, CLUSTER, MONITOR, SHUTDOWN, ...) | Allgemeiner Schutz |
| `@keyspace` | Befehle im Zusammenhang mit dem Keyspace (KEYS, SCAN, FLUSHDB, FLUSHALL, ...) | Allgemeiner Schutz |
| `@read` | Datenlesebefehle (GET, HGET, LRANGE, SMEMBERS, ZRANGE, ...) | Sicher |
| `@write` | Datenschreibbefehle (SET, HSET, LPUSH, SADD, ZADD, ...) | Sicher |
### Beispiel für eine vollständige ACL-Konfiguration```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
```
### Effektive ACL-Prüfung```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
```
---
## REGELMÄSSIGER PRÜFPROZESS
### 1. Einmalige Prüfung (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. Massenprüfung mehrerer Redis-Instanzen
Erstellen Sie die Datei `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 zur Massenprüfung:```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. Integration in cron (tägliche Überprüfung)```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. Integration in den CI/CD-Pipeline```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
```
---
## HÄUFIG GESTELLTE FRAGEN (FAQ)
### F: Muss ich Redis nach der Anwendung von `--fix-...` neu starten?
**A:** Ja, für `rename-command`-Änderungen — diese werden erst nach einem Neustart von Redis wirksam. Änderungen über `CONFIG SET` (wie `protected-mode`, `replica-read-only`) werden sofort wirksam. Änderungen über `ACL SETUSER` + `ACL SAVE` werden sofort wirksam, **kein Neustart erforderlich**. Wenn Sie nur ACL verwenden (`--fix-restore`, `--fix-blocking`, `--fix-lua`), ist kein Neustart nötig. Das Skript wendet immer gleichzeitig ACL (Laufzeit) und rename-command (Neustart erforderlich) an, um einen mehrschichtigen Schutz zu gewährleisten.
### F: Beeinträchtigt das Blockieren von RESTORE den normalen Betrieb?
**A:** Der Befehl `RESTORE` wird normalerweise nur in folgenden Fällen verwendet:
- Wiederherstellung von Daten aus Backups
- Datenmigration zwischen Instanzen
- Benutzerdefinierte Datensynchronisierung
Wenn Ihre Anwendung RESTORE nicht verwendet, ist das Blockieren dieses Befehls sicher. Falls Sie es verwenden, erstellen Sie einen separaten ACL-Benutzer mit RESTORE-Berechtigung und nutzen Sie diesen nur für administrative Zwecke.
### F: Ich verwende Redis < 6.0, ACL ist nicht verfügbar. Was nun?
**A:** Bei Redis < 6.0 können Sie nur `rename-command` verwenden, um Befehle zu deaktivieren. Die Schritte:
1. Fügen Sie `rename-command RESTORE ""` zur redis.conf hinzu
2. Fügen Sie `rename-command`-Einträge für Blocking-Befehle hinzu
3. Aktivieren Sie `protected-mode yes`
4. Richten Sie `requirepass` mit einem starken Passwort ein
5. Begrenzen Sie Verbindungen über die Firewall
6. Starten Sie Redis neu
### F: Wie erkenne ich, ob die Module RedisTimeSeries/RedisBloom geladen sind?
**A:** Führen Sie den Befehl aus:```bash
redis-cli MODULE LIST
```
Die Ausgabe zeigt die Liste der geladenen Module samt Version. Wenn `timeseries` oder `bf` nicht erscheint, ist das Modul nicht geladen.
### F: Sind `--fix-all` / `--fix-restore` / `--fix-...` sicher für die Produktion?
**A:** Die Fix-Befehle führen sichere Änderungen durch:
- Backup von redis.conf vor der Änderung (außer bei Verwendung von `--no-backup`)
- **ACL** (`-restore`, `-@blocking`, `-@scripting`): wirken sofort, keine Ausfallzeit, leicht rückgängig zu machen
- **rename-command**: erfordert einen Redis-Neustart, um wirksam zu werden
- **CONFIG SET**: zur Laufzeit, geht bei einem Neustart verloren, wenn nicht in redis.conf geschrieben
Empfehlung: Für die Produktion zuerst `--fix-restore`, `--fix-blocking`, `--fix-lua` verwenden (nur ACL, kein Neustart erforderlich). Danach ein Wartungsfenster einplanen, um mit `rename-command` neu zu starten.
### F: Wie kann ich die Änderungen von `--fix-...` rückgängig machen (Rollback)?
**A:**
1. Wenn ein Backup vorhanden ist: Backup-Datei über redis.conf kopieren, dann Redis neu starten
2. Bei Verwendung von `CONFIG SET`: Ein Neustart von Redis stellt die Konfiguration aus der Datei wieder her
3. Bei Verwendung von `ACL SETUSER`: `ACL SETUSER <user> +<cmd>` verwenden, um die Berechtigungen wiederherzustellen
### F: Sollte ich Redis aktualisieren?
**A:** **Ja, wenn möglich.** Das Upgrade auf eine gepatchte Version ist die gründlichste Lösung. Dieses Skript ist für folgende Fälle gedacht:
- Ein Upgrade ist aufgrund von Anwendungsbeschränkungen nicht sofort möglich
- Zeit zum Testen der neuen Version ist erforderlich
- Eine vorübergehende Schutzmaßnahme wird benötigt, während auf das Wartungsfenster gewartet wird
### F: Redis läuft intern, ohne Internetzugang, durch eine Firewall geschützt — ist ein Upgrade erforderlich?
**A:** **Kein dringendes Upgrade erforderlich**, aber **Workaround anwenden und Upgrade planen**, denn:
- Eine Firewall reduziert nur die **Wahrscheinlichkeit** eines Angriffs, beseitigt das Risiko aber nicht vollständig
- Angreifer aus dem internen Netzwerk (böswillige Mitarbeiter, kompromittierte Maschinen, laterale Bewegung) können weiterhin ausnutzen
- Die Folge einer Ausnutzung ist **RCE auf dem gesamten System** — höchster Schweregrad
- **Die Kosten des Workarounds sind sehr gering**: Hinzufügen von ACL `-restore -@blocking -@scripting` dauert 2 Minuten, keine Ausfallzeit
**Empfohlener Fahrplan:**
1. **Diese Woche:** ACL-Workaround anwenden (keine Ausfallzeit)
2. **Nächstes Wartungsfenster:** Redis aktualisieren + `rename-command` hinzufügen
Details siehe [Risikobewertung — Internes Redis-System / Sentinel](#risikobewertung--internes-redis-system--sentinel).
---
## REFERENZEN
- [Offizielles Redis Security Advisory](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)
- [Redis ACL-Dokumentation](https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/)
- [Redis rename-command-Dokumentation](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)
---
> **Haftungsausschluss:** Dieses Dokument wurde auf der Grundlage öffentlich zugänglicher Informationen aus dem Redis-Sicherheitsadvisory und NVD-Quellen erstellt. Der Benutzer ist dafür verantwortlich, die für seine Umgebung geeigneten Abhilfemaßnahmen vor der Anwendung zu prüfen und zu bestätigen.