发布日期: 2026-05-08 作者: TonyCao ([email protected]) 来源: Redis 安全公告
2026 年 5 月 5 日,Redis Ltd. 发布了安全公告,涉及 5 个影响所有 Redis OSS/CE 版本的严重安全漏洞。如果被成功利用,所有这些 CVE 都可能导致远程代码执行 (RCE)。
| # | CVE 编号 | CVSS | 严重程度 | 漏洞类型 | 利用条件 |
|---|---|---|---|---|---|
| 1 | CVE-2026-23479 | 7.7 | 高 | Use-After-Free | 已认证,有权执行阻塞命令 |
| 2 | CVE-2026-25243 | 7.7 | 高 | 无效内存访问 | 已认证,有权执行 RESTORE |
| 3 | CVE-2026-25588 | 7.7 | 高 | 无效内存访问 | 已认证,有权执行 RESTORE + RedisTimeSeries 模块 |
| 4 | CVE-2026-25589 | 7.7 | 高 | 无效内存访问 | 已认证,有权执行 RESTORE + RedisBloom 模块 |
| 5 | CVE-2026-23631 | 6.1 | 中 | Use-After-Free | 已认证,副本且 replica-read-only = 禁用 |
共同点: 所有 CVE 都要求攻击者已对 Redis 实例完成认证(authenticated)。CVE-2026-23631 仅影响配置了
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 部署在公告发布时均已自动完成补丁更新。
| 属性 | 值 |
|---|---|
| 标题 | 解除客户端阻塞流程中的 Use-After-Free |
| CVSS 4.0 | 7.7(高) |
| CWE | CWE-416(释放后使用) |
| 向量 | AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| 条件 | 攻击者已认证,有权执行阻塞命令 |
| 范围 | 所有 Redis OSS/CE,Redis Software <= 8.0.6 |
当客户端处于阻塞状态(blocked)——例如正在等待 BLPOP——在重新执行被阻塞命令期间被驱逐(evict)时,processCommandAndResetClient 函数可能返回错误。当前代码未正确处理此情况,导致指针引用了已释放的内存区域(use-after-free)。攻击者可以利用 UAF 实现远程代码执行(RCE)。
unblock client、processCommandAndResetClient 相关的函数redis-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 个子问题:
已认证的攻击者发送特制的 RESTORE payload 以利用上述错误,可能导致在 redis-server 进程上下文中实现 RCE。
方法 1 — 通过 ACL 阻止 RESTORE(推荐):```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
| 属性 | 值 |
| ----------- | ---------------------------------------------------------------- |
| **标题** | RedisTimeSeries 模块中 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 权限 + **已加载 RedisTimeSeries 模块** |
| **范围** | Redis OSS/CE + RedisTimeSeries 模块 |
#### 技术描述
当在已加载 **RedisTimeSeries 模块** 的实例上使用 `RESTORE` 命令时,特制的序列化负载可能会在处理时间序列数据期间触发无效内存访问。该漏洞存在于 RedisTimeSeries 模块从 RESTORE 负载反序列化数据的方式中。
#### 识别迹象
- Redis 崩溃,堆栈跟踪与 RedisTimeSeries 模块相关
- RedisTimeSeries 模块已加载(`MODULE LIST` 显示 timeseries)
- redis-server 执行了非预期的命令
#### 修复方法(不升级)
**方法 1 — 通过 ACL 阻止 RESTORE:**(与 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