Lyutoon/redis-RCE-poc

GitHub: Lyutoon/redis-RCE-poc

针对 Redis 8.8.0 的认证后 RCE PoC,利用 RedisBloom TDigest 反序列化堆溢出漏洞实现纯远程代码执行。

Stars: 0 | Forks: 0

# 通过 RedisBloom TDigest 堆溢出实现 Redis 认证后 RCE 这是一个针对 **Redis** 的远程认证后代码执行漏洞利用,仅通过 Redis 协议,经由 **RedisBloom** 模块的 TDigest RDB 反序列化器触发。无需文件上传、无需调试器、无需宿主机访问权限——并且没有硬编码偏移量:每个地址都是在运行时从正在运行的进程中动态解析的。 **从发现漏洞到构建可用的漏洞利用程序,整条链条完全由自主 AI 代理端到端地发现和构建,无需任何人工逆向工程或偏移量研究。** ## 根本原因 当 Redis 从 RDB payload 中加载 TDigest 键时,`TDigestRdbLoad` 会根据 `compression` 字段(`6 * compression + 10` 个条目)来为其内部的 `nodes_mean[]` / `nodes_weight[]` 数组分配空间。然后,它会**使用直接从 payload 中读取的值覆盖其自身的 `cap`**,并且随后写入操作的边界检查是基于这个受攻击者控制的 `cap` 执行的,而不是基于实际的分配大小。将较小的内存分配与攻击者提供的大量 `merged_nodes`/`cap` 相结合,就能实现一次干净的堆越界写入。 这个单一的漏洞利用原语被逐步升级——堆指针泄露 → 任意读取 → libc / 模块地址解析 → 覆盖可写函数指针 → `system()` ——最终实现以 `redis` 用户身份执行代码。 ## 披露状态 —— 已报告,仍未修复 我于 **2026-06-04** 向 Redis 报告了此问题。Redis 的回复如下: 换句话说:该漏洞最初于 **2025-12-29**(大约七个月前)报告给了 Redis,目前*仍在评估中*。我的报告以及另外两份独立的报告被作为该原始提交的副本关闭,而该原始提交在最新版本中仍未产生修复补丁。鉴于这段漫长的未修复窗口期,在此发布仅出于教育目的。 ## 快速开始 ``` # 1. 启动通过 digest 锁定的经过精确测试的镜像(:latest 是一个可变 tag) ./redis_setup.sh # launches the pinned redis:latest snapshot on :6379 # 等效的手动运行: # docker run -d --name redis-latest -p 6379:6379 \ # redis@sha256:aa049e689e141a4358ad1d4562dc49c88a89fbab711fd8fcc33f684c80b26301 # 2. 运行 exploit(纯远程 —— 无 docker exec,无主机访问权限) python3 exploit_chain_8.8.0.py --host 127.0.0.1 --port 6379 # 3. 检查 proof docker exec redis-latest cat /tmp/pwned # uid=999(redis) ... ``` 针对远程或自定义目标: ``` python3 exploit_chain_8.8.0.py --host 10.0.0.5 --port 6379 -v ``` `-v` 会追踪每个阶段;如果在运行过程中服务器重启,脚本会自动重试完整的利用链条。 ## 环境要求 - Python 3.6+ — 仅需标准库,无需 pip 包 - Docker(用于启动演示目标),或任何可访问的 Redis + RedisBloom 实例 - 经过认证的 Redis 协议访问权限 — 任何可以向目标发出命令的客户端(免认证实例属于最简单的情况) - 目标允许使用 `RESTORE`、`DUMP`、`DEL`、`TDIGEST.ADD`、`EVAL`、`CONFIG`、`PING`(默认全部开启) ## 文件 - `exploit_chain_8.8.0.py` — 完整的 RCE 漏洞利用程序(纯 Python 编写,仅使用标准库) - `redis_setup.sh` — 演示:启动锁定的 `redis:latest` 快照并验证前置条件(打印镜像摘要和版本以供确认) ## 注意事项 - **可复现性。** `:latest` 标签是可变的;演示脚本和上面的摘要锁定了确切的易受攻击构建版本。`redis_setup.sh` 在启动时会打印镜像的 `RepoDigests` —— 请确认它与 `sha256:aa049e689e141a4358ad1d4562dc49c88a89fbab711fd8fcc33f684c80b26301` 相匹配。 - **最新的 Redis 受到影响。** 已针对 `redis:latest`(即上面锁定的摘要)以及 `redis:8.8.0` / `redis:8.6.3` 标签进行确认;在服务器运行过程保持存活的情况下成功实现了 RCE。 - 漏洞利用程序本身会通过 `CONFIG SET` 设置 `sanitize-dump-payload no`。这在 Redis 7.x / 8.x 中已经是默认设置,因此官方镜像无需更改。 - **无需偏移量或校准。** 所有地址(libc 基址、`system()`、用作 `system()` 跳板的可写函数指针)都是在运行时从正在运行的进程解析出来的,因此它可以适应其他构建版本。 ## 仅供教育用途 本仓库**严格仅用于教育和防御性安全研究**。请仅针对您拥有或获得明确授权进行测试的系统运行本程序。禁止对任何第三方系统进行未经授权的使用。
标签:AI安全智能体, RCE, Redis, XXE攻击, 云资产清单, 堆溢出, 搜索引擎查询, 请求拦截, 逆向工具, 逆向工程