
Диагностический и корректирующий скрипт для пяти CVE в Redis, предоставляющий сканирование, смягчение на основе ACL и рекомендации по усилению конфигурации для уязвимостей аутентифицированного удалённого выполнения кода.
Дата выпуска: 2026-05-08 Автор: TonyCao ([email protected]) Источник: Redis Security Advisory
05.05.2026 компания Redis Ltd. опубликовала security advisory о 5 критических уязвимостях безопасности, затрагивающих все версии Redis OSS/CE. Все CVE могут привести к удалённому выполнению кода (RCE) при успешной эксплуатации.
| # | Код CVE | CVSS | Уровень | Тип ошибки | Условия эксплуатации |
|---|---|---|---|---|---|
| 1 | CVE-2026-23479 | 7.7 | HIGH | Use-After-Free | Аутентифицированный доступ, права на выполнение blocking-команд |
| 2 | CVE-2026-25243 | 7.7 | HIGH | Invalid Memory Access | Аутентифицированный доступ, права на выполнение RESTORE |
| 3 | CVE-2026-25588 | 7.7 | HIGH | Invalid Memory Access | Аутентифицированный доступ, права на RESTORE + модуль RedisTimeSeries |
| 4 | CVE-2026-25589 | 7.7 | HIGH | Invalid Memory Access | Аутентифицированный доступ, права на RESTORE + модуль RedisBloom |
| 5 | CVE-2026-23631 | 6.1 | MEDIUM | Use-After-Free | Аутентифицированный доступ, replica с replica-read-only = disabled |
Общее: Все CVE требуют, чтобы атакующий был аутентифицирован (authenticated) в экземпляре Redis. CVE-2026-23631 затрагивает только replica с конфигурацией
replica-read-only disabled.
| Линейка версий | Исправленная версия (минимальная) |
|---|---|
| 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 |
| Модуль | Минимальная версия |
|---|---|
| RedisTimeSeries | 1.12.14 / 1.10.24 / 1.8.23 |
| RedisBloom | 2.8.20 / 2.6.28 / 2.4.23 |
| Версия | Патч |
|---|---|
| 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 |
Все развёртывания Redis Cloud были автоматически пропатчены на момент публикации advisory.
| Свойство | Значение |
|---|---|
| Название | Use-After-Free в Unblock Client Flow |
| CVSS 4.0 | 7.7 (HIGH) |
| CWE | CWE-416 (Use After Free) |
| Вектор | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Условие | Аутентифицированный атакующий, права на выполнение blocking-команд |
| Область | Все Redis OSS/CE, Redis Software <= 8.0.6 |
Когда клиент находится в заблокированном состоянии (blocked) — например, ожидает в BLPOP — и происходит evict во время повторного выполнения заблокированной команды, функция processCommandAndResetClient может вернуть ошибку. Текущий код некорректно обрабатывает этот случай, что приводит к указателю, ссылающемуся на уже освобождённую область памяти (use-after-free). Атакующий может использовать UAF для удалённого выполнения кода (RCE).
unblock client, processCommandAndResetClientredis-server выполняет неизвестные командыBLPOP, BRPOP, BRPOPLPUSH, BLMOVE, BLMPOP, BZPOPMIN, BZPOPMAX, BZMPOP, WAIT, WAITAOF, XREAD, XREADGROUP
#### Метод устранения (без обновления)
**Способ 1 — Блокировка через ACL (рекомендуется):**```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
Способ 2 — Отключение через rename-command (требуется перезапуск 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 ""
**Способ 3 — Включение protected-mode и ограничение подключений:**```bash
redis-cli CONFIG SET protected-mode yes
# Trong redis.conf:
protected-mode yes
bind 127.0.0.1
| Атрибут | Значение |
|---|---|
| Заголовок | Неправомерный доступ к памяти в команде RESTORE |
| CVSS 4.0 | 7.7 (ВЫСОКИЙ) |
| CWE | CWE-20 (Некорректная проверка входных данных) + CWE-122 (Переполнение буфера в куче) |
| Вектор | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| Условие | Аутентифицированный атакующий с правом выполнения RESTORE |
| Область | Все Redis OSS/CE, Redis Software <= 8.0.6 |
Уязвимость включает 2 подпроблемы:
Аутентифицированный атакующий отправляет специально созданный payload RESTORE для эксплуатации указанных ошибок, что может привести к RCE в контексте процесса redis-server.
Способ 1 — Блокировка RESTORE через ACL (рекомендуется):```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SETUSER default -@dangerous
redis-cli ACL SAVE
**Способ 2 — Отключение RESTORE (требуется перезапуск Redis):**```bash
# Thêm vào redis.conf:
rename-command RESTORE ""
Способ 3 — Создание отдельного ACL-пользователя для приложения:```bash
redis-cli ACL SETUSER app_user on >StrongPass123 ~*
+@read +@write
-@dangerous
-@admin
-@scripting
-@blocking
-restore
-debug
redis-cli ACL SAVE
---
### CVE-2026-25588
| Атрибут | Значение |
| -------------- | ----------------------------------------------------------------- |
| **Название** | Недопустимый доступ к памяти в RESTORE с модулем RedisTimeSeries |
| **CVSS 4.0** | **7.7 (HIGH)** |
| **CWE** | CWE-20 + CWE-122 |
| **Вектор** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Условия** | Аутентифицированный + права RESTORE + **модуль RedisTimeSeries загружен** |
| **Область** | Redis OSS/CE + модуль RedisTimeSeries |
#### Техническое описание
Когда команда `RESTORE` используется на экземпляре с загруженным **модулем RedisTimeSeries**, специально созданная сериализованная полезная нагрузка может вызвать недопустимый доступ к памяти в процессе обработки данных временных рядов. Уязвимость заключается в том, как модуль RedisTimeSeries десериализует данные из полезной нагрузки RESTORE.
#### Признаки обнаружения
- Сбой Redis с трассировкой стека, связанной с модулем RedisTimeSeries
- Модуль RedisTimeSeries загружен (`MODULE LIST` показывает timeseries)
- Непредвиденное выполнение команд процессом redis-server
#### Методы устранения (без обновления)
**Способ 1 — Блокировка RESTORE через ACL:** (как в CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Способ 2 — Удаление модуля RedisTimeSeries (если он не нужен):```bash redis-cli MODULE UNLOAD timeseries
Затем удалите следующую строку из `redis.conf`:```
loadmodule /path/to/redistimeseries.so
Способ 3 — Только обновление модуля (без обновления Redis):
Загрузите исправленную версию модуля:
redis-cli MODULE UNLOAD timeseries redis-cli MODULE LOAD /path/to/new/redistimeseries.so
---
### CVE-2026-25589
| Атрибут | Значение |
| -------------- | ----------------------------------------------------------------------------- |
| **Название** | Недопустимый доступ к памяти в RESTORE с модулем RedisBloom |
| **CVSS 4.0** | **7.7 (HIGH)** |
| **CWE** | CWE-20 + CWE-122 + CWE-787 (запись за пределами буфера) + CWE-190 (целочисленное переполнение) |
| **Вектор** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Условия** | Аутентифицированный + права RESTORE + **загружен модуль RedisBloom** |
| **Область** | Redis OSS/CE + модуль RedisBloom |
#### Техническое описание
Уязвимость включает несколько подпроблем в модуле RedisBloom при обработке полезной нагрузки RESTORE:
1. **Чтение/запись за пределами буфера** (Daniel Firer) — чтение/запись за пределами выделенной памяти
2. **Целочисленное переполнение, переполнение кучи и чтение/запись за пределами буфера** (Joseph Surin) — целочисленное переполнение, приводящее к переполнению кучи
Когда модуль RedisBloom загружен, атакующий может отправить специально созданную полезную нагрузку RESTORE для эксплуатации указанных выше ошибок в процессе десериализации данных фильтра Блума, фильтра Cuckoo, Count-Min Sketch или Top-K.
#### Признаки обнаружения
- Сбой Redis со стеком вызовов, связанным с модулем RedisBloom
- Модуль RedisBloom загружен (`MODULE LIST` показывает bf/bloom)
- Данные в фильтрах Блума повреждены или изменены необычным образом
#### Методы устранения (без обновления)
**Способ 1 — Блокировка RESTORE через ACL:** (аналогично CVE-2026-25243)```bash
redis-cli ACL SETUSER default -restore
redis-cli ACL SAVE
Способ 2 — Удаление модуля RedisBloom (если он не нужен):```bash redis-cli MODULE UNLOAD bf
Sau đó xóa dòng sau khỏi `redis.conf`:```
loadmodule /path/to/redisbloom.so
Способ 3 — Только обновление модуля (без обновления Redis):
Загрузите исправленную версию модуля:
---
### CVE-2026-23631
| Свойство | Значение |
| ------------ | --------------------------------------------------------------- |
| **Название** | Lua Use-After-Free через синхронизацию Master-Replica |
| **CVSS 4.0** | **6.1 (MEDIUM)** |
| **CWE** | CWE-416 (Use After Free) |
| **Вектор** | `AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N` |
| **Условия** | Аутентифицированный + **replica** с `replica-read-only` = **disabled** |
| **Область** | Все Redis OSS/CE с Lua scripting, ТОЛЬКО на replica |
| **Кодовое имя** | "DarkReplica" (Yoni Shiraz, Wiz Zeroday Cloud) |
#### Техническое описание
Аутентифицированный атакующий может использовать механизм синхронизации master-replica для отправки специальных Lua-скриптов, вызывающих use-after-free в Lua-движке на replica.
**Критическое условие:** Ошибка **влияет только на replica**, настроенную с `replica-read-only disabled` (т.е. replica может выполнять запись). Это НЕ конфигурация по умолчанию — по умолчанию `replica-read-only` = `yes`.
Если replica настроена в режиме read-only (по умолчанию), экземпляр **не подвержен уязвимости**.
#### Признаки обнаружения
- Сбой Redis на replica со стеком вызовов из Lua-движка
- Конфигурация `replica-read-only` = `no` на replica
- Выполнение неизвестных команд на replica
- Несанкционированные сетевые подключения к replica
#### Методы устранения (без обновления)
**Способ 1 — Включить replica-read-only (рекомендуется, это значение по умолчанию):**```bash
# Runtime
redis-cli CONFIG SET replica-read-only yes
# Trong redis.conf:
replica-read-only yes
Способ 2 — Блокировка Lua-скриптов через ACL:```bash redis-cli ACL SETUSER default -@scripting redis-cli ACL SETUSER default -eval -evalsha -script -function -fcall -fcall_ro redis-cli ACL SAVE
**Способ 3 — Отключение команд Lua (требуется перезапуск 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 → диагностика, проверка всех CVE--fix-... → применение мер устранения для конкретного CVE```
$ ./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh
→ hiển thị banner + HELP + thoát### Требования к системе
- **Операционная система:** Linux (Ubuntu, Debian, CentOS, RHEL, ...)
- **Инструменты:** `redis-cli` (обычно входит в пакет `redis-tools` или `redis`)
- **Права:** Права на чтение/запись файла `redis.conf` (для исправления)
- **Подключение:** Сеть до проверяемого экземпляра Redis
### Установка redis-cli (если ещё не установлен)```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. Полное сканирование CVE (диагностика)```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. Групповое быстрое исправление (рекомендуется)```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
### Полная таблица параметров
#### Параметр действия (ACTION) — обязательный
| Параметр | Функция | Количество защищённых CVE |
| ----------------- | -------------------------------------------- | ------------------------------ |
| *(без параметра)* | Показать инструкцию по использованию | — |
| `--scan` | Диагностическое сканирование всех 5 CVE | — |
| `--fix-all` | Устранить все CVE | **5/5** |
| `--fix-restore` | **[Быстро]** Только блокировка команды RESTORE | **3/5** (25243, 25588, 25589) |
| `--fix-blocking` | **[Быстро]** Только блокировка блокирующих команд | **1/5** (23479) |
| `--fix-lua` | **[Быстро]** Блокировка Lua + включение replica-read-only | **1/5** (23631) |
| `--fix-cve-23479` | Устранить CVE-2026-23479 | 1/5 |
| `--fix-cve-25243` | Устранить CVE-2026-25243 | 1/5 |
| `--fix-cve-25588` | Устранить CVE-2026-25588 | 1/5 |
| `--fix-cve-25589` | Устранить CVE-2026-25589 | 1/5 |
| `--fix-cve-23631` | Устранить CVE-2026-23631 | 1/5 |
#### Параметры подключения
| Параметр | Описание | По умолчанию |
| -------------------- | ------------------------ | ------------ |
| `-H, --host HOST` | Адрес Redis host | `127.0.0.1` |
| `-p, --port PORT` | Порт Redis | `6379` |
| `-a, --pass PASS` | Пароль Redis | *(пусто)* |
| `-u, --user USER` | Имя пользователя ACL | `default` |
| `-s, --socket PATH` | Путь к Unix-сокету | *(пусто)* |
#### Дополнительные параметры
| Параметр | Описание | По умолчанию |
| -------------------- | ------------------------------------------ | ------------------------ |
| `-h, --help` | Показать справку | — |
| `-c, --config FILE` | Путь к redis.conf | `/etc/redis/redis.conf` |
| `-o, --output FILE` | Записать отчёт в файл (только с `--scan`) | *(пусто)* |
| `--redis-cli PATH` | Путь к бинарнику redis-cli | `redis-cli` (из PATH) |
| `--no-backup` | Не создавать резервную копию конфигурации перед изменением | `false` |
### Коды выхода (Exit Codes)
| Код | Значение |
| --- | ------------------------------------------------------- |
| `0` | Успех — CVE не обнаружены или исправление завершено |
| `1` | Ошибка: redis-cli не найден или нет подключения |
| `2` | `--scan` обнаружил как минимум 1 CVE — требуется исправление |
### Результат вывода при сканировании (`--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:
---
## ОБЩИЕ МЕТОДЫ УСТРАНЕНИЯ
### Метод 1: ACL (Redis >= 6.0) — РЕКОМЕНДУЕТСЯ
Это **самый безопасный и гибкий метод**, не требующий перезапуска 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
Добавьте следующие строки в 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 ""
Затем перезапустите 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
### Метод 4: Запуск Redis с минимальными привилегиями```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
---
## ОЦЕНКА РИСКА — ВНУТРЕННЯЯ СИСТЕМА REDIS / SENTINEL
Данный раздел предназначен для кластеров **Redis Sentinel** или автономных Redis, работающих во внутренней сети, защищённых межсетевым экраном (Fortinet, iptables и т. д.) и **не имеющих прямого подключения к Интернету**.
### Сводка
| Текущий уровень защиты | Снижение риска? | Требуется ли обновление? |
| ------------------------------- | -------------------------------------------------------------- | ---------------------------------------- |
| Нет доступа в Интернет | **Да** — устраняет внешних атакующих | Не требуется срочно |
| Fortinet Firewall (с IPS/DPI) | **Да** — фильтрует исходные IP, IPS может обнаруживать аномальные payload | Не требуется срочно |
| iptables (ограничение исходных IP) | **Да** — только разрешённые IP могут подключаться к порту Redis | Не требуется срочно |
| **Комбинация всех трёх мер выше** | **Снижает вероятность эксплуатации до очень низкой** | **Не требуется срочно, но желательно иметь план** |
### Ключевой момент: Почему межсетевого экрана недостаточно?
Все 5 CVE имеют общую черту: атакующий должен быть **уже аутентифицирован** в Redis (PR:L — Privileges Required: Low в векторе CVSS). Межсетевой экран блокирует подключения с неразрешённых IP, но **не защищает** от следующих угроз:
| Угроза | Вероятность | Последствия при эксплуатации |
| ------------------------------------------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------------------------------------- |
| **Вредоносный внутренний сотрудник** — имеет доступ к внутренней сети + знает пароль Redis | Низкая, но исключать нельзя | **RCE** на сервере Redis, повышение привилегий, кража данных |
| **Скомпрометированная внутренняя машина (Lateral Movement)** — атакующий проникает на любую машину в сети, затем атакует Redis | Средняя | Все данные Redis украдены/изменены/удалены; атакующий может установить бэкдор |
| **Ошибка конфигурации межсетевого экрана** — случайное открытие порта Redis наружу из-за неверного изменения правил | Низкая | Эквивалентно прямому раскрытию в Интернет |
| **Supply Chain / Third-Party** — партнёры, вендоры имеют VPN-подключение к внутренней сети | Низкая | RCE, утечка данных |
| **Уязвимость в самом межсетевом экране/сети** — атакующий обходит межсетевой экран через другую уязвимость | Очень низкая | Вся внутренняя система затронута |
### Количественный анализ риска```
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 добавляет собственные риски:
| Вектор атаки Sentinel | Описание | Связанные CVE |
|---|---|---|
| Захват Sentinel — атакующий захватывает узел Sentinel и переключает failover на вредоносную реплику | Sentinel общается через отдельный порт (обычно 26379), если он не защищён отдельно | CVE-2026-23631 (если у реплики replica-read-only no) |
| Повышение реплики — захваченная реплика повышается до мастера | Данные всего кластера изменяются | Все CVE RESTORE (25243, 25588, 25589) |
| Синхронизация мастер-реплика — атакующий перехватывает поток синхронизации | Данные похищаются во время синхронизации | CVE-2026-23631 |
| Приоритет | Действие | Время выполнения | Требуется downtime? |
|---|---|---|---|
| P0 — Немедленно | Запустить скрипт проверки всех узлов (master + replica + sentinel): ./CVE-...sh -H <ip> -p <port> -a <pass> | 2-5 минут / узел | Нет |
| P0 — Немедленно | Проверить replica-read-only yes на всех репликах: redis-cli CONFIG GET replica-read-only | 1 минута / узел | Нет |
| P1 — В течение недели | Заблокировать RESTORE через ACL (без перезапуска): redis-cli ACL SETUSER default -restore; redis-cli ACL SAVE | 2 минуты / узел | Нет |
| P1 — В течение недели | Заблокировать команды @blocking через ACL (CVE-2026-23479) | 2 минуты / узел | Нет |
| P1 — В течение недели | Заблокировать команды @scripting через ACL, если Lua не используется (CVE-2026-23631) | 2 минуты / узел | Нет |
| P2 — До следующего окна обслуживания | Добавить rename-command RESTORE "", rename-command EVAL "", ... в redis.conf | 10 минут (с перезапуском) | Да (перезапуск Redis) |
| P2 — До следующего окна обслуживания | Обновить Redis до исправленной версии (6.2.22, 7.2.14, 7.4.9, 8.2.6, 8.4.3, 8.6.3) | 30-60 минут / кластер | Да (перезапуск всего кластера) |
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
## Các tính năng chính
- **Phát hiện và phân loại tự động**: Tự động phát hiện các loại tài liệu khác nhau và phân loại chúng theo nội dung.
- **Trích xuất dữ liệu thông minh**: Trích xuất thông tin quan trọng từ tài liệu bằng thuật toán học máy tiên tiến.
- **Hỗ trợ đa định dạng**: Hỗ trợ nhiều định dạng tài liệu phổ biến bao gồm PDF, DOCX, XLSX và TXT.
- **Giao diện dòng lệnh thân thiện**: Cung cấp CLI trực quan với các tùy chọn linh hoạt để tùy chỉnh quy trình xử lý.
- **Báo cáo chi tiết**: Tạo báo cáo chi tiết về kết quả phân tích, bao gồm cả số liệu thống kê và biểu đồ trực quan.
## Cài đặt
Để cài đặt công cụ, bạn có thể sử dụng pip:
```bash
pip install doc-analyzer
Hoặc clone từ GitHub:
git clone https://github.com/example/doc-analyzer.git
cd doc-analyzer
pip install -r requirements.txt
doc-analyzer analyze --input ./documents --output ./results
doc-analyzer analyze --input ./documents --output ./results --format json --verbose
doc-analyzer --help
doc-analyzer/
├── README.md
├── LICENSE
├── setup.py
├── requirements.txt
├── doc_analyzer/
│ ├── __init__.py
│ ├── cli.py
│ ├── core/
│ │ ├── __init__.py
│ │ ├── detector.py
│ │ ├── extractor.py
│ │ └── classifier.py
│ └── utils/
│ ├── __init__.py
│ └── helpers.py
└── tests/
├── __init__.py
├── test_detector.py
└── test_extractor.py
Chúng tôi hoan nghênh mọi đóng góp từ cộng đồng. Vui lòng đọc CONTRIBUTING.md để biết thêm chi tiết về quy trình đóng góp.
Dự án này được phân phối dưới giấy phép MIT. Xem tệp LICENSE để biết thêm chi tiết.```bash
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
### Поток принятия решения: Нужно ли обновляться немедленно?```
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
Firewall + сетевая изоляция снижают вероятность эксплуатации до очень низкого уровня, но последствия в случае эксплуатации остаются RCE на всю систему. При стоимости устранения, практически равной нулю (добавление нескольких строк ACL без перезапуска), применение мер защиты является выгодным решением с точки зрения управления рисками. Нет необходимости в паническом срочном обновлении, но рекомендуется применить workaround ACL на этой неделе и запланировать обновление в следующее окно технического обслуживания.
| Группа | Описание | Влияние CVE |
|---|---|---|
@dangerous | Опасные команды (включая RESTORE, FLUSHDB, FLUSHALL, KEYS, SHUTDOWN, DEBUG, CONFIG) | CVE-2026-25243, 25588, 25589 |
@blocking | Блокирующие команды (BLPOP, BRPOP, BZPOPMIN, XREAD, WAIT, ...) | CVE-2026-23479 |
@scripting | Lua-скриптинг (EVAL, EVALSHA, SCRIPT, FUNCTION, FCALL) | CVE-2026-23631 |
@admin | Административные команды (CONFIG, ACL, CLIENT, CLUSTER, MONITOR, SHUTDOWN, ...) | Общая защита |
@keyspace | Команды, связанные с keyspace (KEYS, SCAN, FLUSHDB, FLUSHALL, ...) | Общая защита |
@read | Команды чтения данных (GET, HGET, LRANGE, SMEMBERS, ZRANGE, ...) | Безопасно |
@write | Команды записи данных (SET, HSET, LPUSH, SADD, ZADD, ...) | Безопасно |
redis-cli ACL SETUSER admin on >AdminPass123 ~* +@all
redis-cli ACL SETUSER app on >AppPass123 ~*
+@read
+@write
-@dangerous
-@admin
-@scripting
-@blocking
-restore
-debug
redis-cli ACL SETUSER reader on >ReaderPass123 ~*
+@read
-@dangerous
-@admin
-@scripting
redis-cli ACL SETUSER default off
redis-cli ACL SAVE
redis-cli ACL LIST
### Эффективная проверка 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
./CVE-2026-25589-25588-25243-23631-23479-REDIS.sh --scan
-H <redis_host> -p -a
-o report_$(date +%Y%m%d_%H%M%S).txt
### 2. Массовая проверка нескольких экземпляров Redis
Создайте файл `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
Скрипт массовой проверки:```bash #!/bin/bash
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. Интеграция в cron (ежедневная проверка)```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
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
---
## ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ (FAQ)
### В: Нужно ли перезапускать Redis после применения `--fix-...`?
**О:** Да, для изменений `rename-command` — они вступают в силу только после перезапуска Redis. Изменения через `CONFIG SET` (например, `protected-mode`, `replica-read-only`) вступают в силу немедленно. Изменения через `ACL SETUSER` + `ACL SAVE` вступают в силу немедленно, **перезапуск не требуется**. Если используются только ACL (`--fix-restore`, `--fix-blocking`, `--fix-lua`), перезапуск не нужен. Скрипт всегда применяет одновременно и ACL (runtime), и rename-command (требует перезапуска) для многоуровневой защиты.
### В: Влияет ли блокировка RESTORE на нормальную работу?
**О:** Команда `RESTORE` обычно используется только в следующих случаях:
- Восстановление данных из резервной копии
- Миграция данных между экземплярами
- Пользовательская синхронизация данных
Если ваше приложение не использует RESTORE, блокировка этой команды безопасна. Если использует, создайте отдельного ACL-пользователя с правами на RESTORE и применяйте его только для административных целей.
### В: Я использую Redis < 6.0, ACL недоступен. Что делать?
**О:** Для Redis < 6.0 вы можете использовать только `rename-command` для отключения команд. Шаги:
1. Добавьте `rename-command RESTORE ""` в redis.conf
2. Добавьте команды `rename-command` для блокирующих команд
3. Включите `protected-mode yes`
4. Установите `requirepass` с надёжным паролем
5. Ограничьте подключения через брандмауэр
6. Перезапустите Redis
### В: Как узнать, загружены ли модули RedisTimeSeries/RedisBloom?
**О:** Выполните команду:```bash
redis-cli MODULE LIST
Вывод покажет список загруженных модулей с версиями. Если timeseries или bf отсутствуют, значит модуль не загружен.
--fix-all / --fix-restore / --fix-... для production?О: Команды fix выполняют безопасные изменения:
--no-backup)-restore, -@blocking, -@scripting): вступают в силу немедленно, без downtime, легко откатываютсяРекомендация: Для production сначала используйте --fix-restore, --fix-blocking, --fix-lua (только ACL, без перезапуска). Затем запланируйте окно обслуживания для перезапуска с rename-command.
--fix-...?О:
CONFIG SET: перезапуск Redis восстановит конфигурацию из файлаACL SETUSER: используйте ACL SETUSER <user> +<cmd> для восстановления правО: Да, если возможно. Обновление до исправленной версии — самое радикальное решение. Этот скрипт предназначен для случаев:
О: Срочное обновление не требуется, но стоит применить workaround и составить план обновления, потому что:
-restore -@blocking -@scripting занимает 2 минуты, без downtimeРекомендуемый план:
rename-commandПодробнее см. в Оценка рисков — Внутренняя система Redis / Sentinel.
Отказ от ответственности: Этот документ составлен на основе публичной информации из Redis security advisory и источников NVD. Пользователь несёт ответственность за проверку и подтверждение мер по устранению уязвимостей, соответствующих его среде, перед их применением.