
Образовательная Python-мишень, имитирующая CVE-2026-22807 — RCE в цепочке поставок ИИ через TOCTOU при загрузке моделей. Включает уязвимую библиотеку, PoC-скрипт и динамическую генерацию полезной нагрузки для исследований в области безопасности и обучения.
⚠️ Отказ от ответственности / Disclaimer
Данный проект предназначен исключительно для исследовательских и образовательных целей и демонстрирует принципы атак на цепочку поставок при загрузке моделей ИИ (Remote Code Execution). Не используйте сгенерированные вредоносные модели в производственных средах и строго запрещается использовать данный проект для любых незаконных атак. Разработчики не несут юридической ответственности за ненадлежащее использование.
Это лёгкий полигон на Python для симуляции и воспроизведения CVE-2026-22807 (типичной логики уязвимости в цепочке поставок ИИ).
Полигон демонстрирует проблему гонки состояний (TOCTOU) при загрузке моделей в ИИ-фреймворках (таких как vLLM, Transformers и др.):
если загрузчик, прежде чем проверить trust_remote_code=False, слишком рано импортирует пользовательский Python-код для разбора архитектуры модели (AutoConfig/AutoModel), атакующий может обойти проверку безопасности и добиться удалённого выполнения кода (RCE).
| Имя файла | Роль | Описание |
|---|---|---|
vulnerable_lib.py | 🎯 Жертва (Victim) | Симулирует уязвимую библиотеку загрузчика моделей ИИ (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 в Python код верхнего уровня вредоносного файла с 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()