
⚠️ 免責事項 / Disclaimer
本プロジェクトはセキュリティ研究および教育目的のみに使用され、AI モデル読み込みプロセスにおけるサプライチェーン攻撃の原理(Remote Code Execution)をデモンストレーションすることを目的としています。 本番環境で生成された悪意のあるモデルを使用しないでください。また、本プロジェクトを違法な攻撃行為に使用することは固く禁じられています。開発者は、不適切な使用によって生じたいかなる法的責任も負いません。
これは、CVE-2026-22807(典型的な AI サプライチェーン脆弱性ロジック)をシミュレートおよび再現するための軽量な Python ターゲットレンジです。
このターゲットレンジは、AI 推論フレームワーク(vLLM、Transformers など)がモデルを読み込む際の**時系列競合(TOCTOU)問題をデモンストレーションします:
ローダーが trust_remote_code=False をチェックする前に、モデルアーキテクチャ(AutoConfig/AutoModel)を解析するためにユーザー提供の Python コードを早期にインポートした場合、攻撃者はセキュリティチェックをバイパスしてリモートコード実行(RCE)**を実現できます。
| ファイル名 | 役割 | 説明 |
|---|---|---|
vulnerable_lib.py | 🎯 ターゲット (Victim) | 脆弱性のある AI モデルローダーライブラリ (MiniLLM) をシミュレートします。誤ったロジック順序を含みます。 |
poc_dynamic.py | 🔫 攻撃者 (Attacker) | 自動化攻撃スクリプト。悪意のあるモデルディレクトリを生成し、読み込みプロセスをトリガーします。 |
dynamic_evil_model/ | 📦 悪意のあるペイロード | スクリプト実行後に自動生成されるディレクトリで、config.json とコードが注入された malicious.py を含みます。 |
Python 3.x がインストールされていることを確認してください。このターゲットレンジにはサードパーティライブラリの依存関係はありません。
攻撃スクリプトを直接実行すると、デフォルトで whoami コマンドが実行されます。
python poc_dynamic.py
期待される出力: コンソールに PWNED という文字と現在のシステムユーザー名が表示され、その後プログラムが "Remote code not allowed" の例外をスローします。これは防御がバイパスされたことを証明します。
任意のシステムコマンドを引数としてスクリプトに渡し、特定の「爆弾」を生成できます。
Windows の例 (電卓を起動):
python poc_dynamic.py calc
Linux/Mac の例 (ファイルを表示):
python poc_dynamic.py cat /etc/passwd
このターゲットレンジは、以下の危険なプロセスを再現します:
config.json を読み取ります。auto_map フィールドを検出し、モデルクラスを確認するために、importlib を使用してターゲットの Python ファイルを直接インポートします。import メカニズムにより、悪意のあるファイルのトップレベルの os.system() が即座に実行されます。trust_remote_code をチェックします。この時点でブロックしてエラーをスローしますが、攻撃はすでに完了しています。❌ 脆弱なコード (vulnerable_lib.py):
# 1. 先にコードの読み込みをトリガー (RCE はここで発生)
self._resolve_model_class()
# 2. 後にセキュリティチェックを実行 (後の祭り)
if not self.trust_remote_code:
raise RuntimeError("Aborted!")
✅ 修正案:
# 1. 先にセキュリティチェックを実行
if not self.trust_remote_code and self._needs_remote_code():
raise RuntimeError("Aborted!")
# 2. チェック通過後にのみコードを読み込み
self._resolve_model_class()