2026 年 10 月 3 日,Redis 和 Wiz 联合披露了一个核弹级漏洞:CVE-2025-49844,代号 RediShell,CVSS 10.0(NVD 后续微调为 9.9)。Redis 内嵌的 Lua 引擎里藏着一个 use-after-free,藏了 13 年。已认证的攻击者发一段特制的 Lua 脚本,就能逃出 Lua 沙箱,在宿主机上执行任意原生代码。

Redis 服务器被一段 Lua 脚本打穿,红色警示

先说结论:补丁昨天已经发布,自建 Redis 今天就得升级。云托管(ElastiCache、Memorystore、阿里云等)大多已自动更新;凡是自己运维的实例,版本低于修复线就是裸奔。Wiz 扫出来的数字很刺眼:全球约 33 万 Redis 公网可达,其中约 6 万连密码都没设——“需要认证才能利用”这个前提,在这 6 万台机器上根本不存在。

这 13 年是怎么藏住的

时间线值得细看:

  • 约 2012 年:有问题的代码写进 Redis,Lua 垃圾回收(GC)机制存在 UAF 缺陷;
  • 2025 年 5 月 16 日:Wiz 研究员在 Pwn2Own Berlin 现场演示利用,并向 Redis 报告;
  • 2026 年 10 月 3 日: embargo 结束,Redis 与 Wiz 联合披露,补丁同步发布;
  • 2026 年 10 月 6 日:Wiz 公开完整技术博客。

13 年,横跨无数次代码审计和安全 review,没人发现。这不是 Redis 第一次出 Lua 相关问题,但这是第一个被评为 Critical 的 Redis 原生漏洞。原因很微妙:漏洞藏在 Lua 解释器和 Redis 的 GC 交互逻辑里——攻击者用精心构造的 Lua 脚本操纵垃圾回收器的行为,触发 use-after-free,把原本只能跑在沙箱里的小脚本,变成宿主机上的任意代码执行。

Lua 脚本操纵 GC 触发 UAF,逃逸沙箱拿到宿主机 shell

完整的攻击链是这样的:

  1. 攻击者连上 Redis(EVAL 是默认开启的功能);
  2. 发送特制 Lua 脚本,操纵 GC 触发 UAF;
  3. 逃逸 Lua 沙箱,执行宿主机原生代码;
  4. 反弹 shell,拿到宿主机完全控制权;
  5. 收割:SSH 私钥、云厂商 IAM token、证书;
  6. 横向移动:内网漫游、挖矿、勒索加密。

第 5 步是最要命的。Redis 通常跑在应用内网的核心位置,拿下一台 Redis 宿主机,等于拿到了云上身份凭证的提款机。Wiz 特别指出:多数云上 Redis 是以”未经安全加固的容器镜像”跑的,默认配置 + 公网暴露 + 无密码,三重 debuff 叠满。

影响版本和修复线

分支 修复版本
Redis OSS 8.x 8.2.2 及以上
Redis OSS 8.0 8.0.4 及以上
Redis OSS 7.4 7.4.6 及以上
Redis OSS 7.2 7.2.11 及以上
Redis Stack 7.4 7.4.0-v7 及以上
Redis Stack 7.2 7.2.0-v19 及以上

注意:7.0 及更早分支已经 EOL,不会有补丁,只能升级大版本。查版本一条命令:

1
redis-cli INFO server | grep redis_version

现在就做这四件事

Redis 安全自查四步:查版本、查密码、查暴露面、升级

1. 查版本。 低于上表修复线的,自建实例今天就安排升级窗口。INFO server 一把梭。

2. 查认证和暴露面。 这两条命令:

1
2
3
redis-cli CONFIG GET requirepass   # 为空 = 没设密码,高危
redis-cli CONFIG GET protected-mode
redis-cli CONFIG GET bind # 含 0.0.0.0 且公网可达 = 裸奔

Wiz 的 6 万台”无认证公网 Redis”就是这么被扫出来的。内网也不能裸奔——打穿一台应用服务器,内网 Redis 就是下一个跳板。

3. 应急止血。 来不及升级的,先用 ACL 把 Lua 相关命令限死:

1
2
# 给应用账号去掉脚本执行权限,只保留必要的读写命令
ACL SETUSER appuser on >密码 -@all +@connection +@string +@hash -EVAL -EVALSHA -SCRIPT

Lua 脚本业务如果根本不用,直接 rename-command EVAL "" 禁掉最干净。另外确认 Redis 不是 root 在跑。

4. 复查。 升级后 INFO server 确认版本已达修复线;ACL LIST 确认无多余权限;检查 slowlog 和可疑客户端连接,确认窗口期内没被光顾过。

写在最后

从 GitLab 的路径遍历到 Redis 的 RediShell,10 月第一周已经是第二个 CVSS 9.9+ 的现货了。剧本完全一样:披露即开抢,补丁窗口按小时算。上次 GitLab 是披露当天就出现野外扫描,这次 Wiz 把 33 万暴露实例的数字直接摆在了台面上——扫描器可不会等你排期。

DBCheck 这边,Redis 巡检引擎已经上线,RediShell 就是头条规则:版本低于修复线直接高危告警,附带把”无密码””公网暴露””无持久化”这些经典裸奔项一次扫出来。老规矩,dbcheck.org,上传采集包就能拿完整报告,免费。

原文作者: liups.com

原文链接: http://liups.com/posts/d8d98844/

许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议