Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cve-2026-47627 — Proof-of-concept exploit per CVE-2026-47627, una vulnerabilità di path traversal in NVIDIA Triton Inference Server che porta alla scrittura arbitraria di file tramite Zip-Slip. Include analisi dettagliata, ambiente di laboratorio e script di exploit con un clic. | Kitploit
Strumenti/GitHubGitHub/anekazek/cve-2026-47627
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubanekazek/cve-2026-47627

cve-2026-47627

Proof-of-concept exploit per CVE-2026-47627, una vulnerabilità di path traversal in NVIDIA Triton Inference Server che porta alla scrittura arbitraria di file tramite Zip-Slip. Include analisi dettagliata, ambiente di laboratorio e script di exploit con un clic.

Vedi Repository
3221 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-47627 — NVIDIA Triton Inference Server Path Traversal → DoS (Zip-Slip)

Writeup completo dei risultati della ricerca e PoC in questo repo (immagine nvcr.io/nvidia/tritonserver:26.05-py3 / server v2.69.0). Il repo è configurato per essere sempre explicit così il PoC funziona senza riavvio via gRPC.


Indice

  1. Riepilogo CVE
  2. Ambiente di Laboratorio
  3. Anatomia della Vulnerabilità
  4. Analisi della Root Cause (Diff 26.05 → 26.06)
  5. Percorsi di Sfruttamento: Quali Sono Realmente Colpiti?
  6. PoC Principale: Zip-Slip via EXECUTION_ENV_PATH
  7. Come Eseguire il PoC (One-Click)
  8. Prova di Traversal (Non un Falso 500)
  9. Impatto DoS
  10. Mitigazioni
  11. Struttura del Repo (Dopo la Pulizia)
  12. Riferimenti e Timeline

1. Riepilogo CVE

CampoValore
CVECVE-2026-47627
CNA[email protected]
Pubblicazione2026-08-18 (NVD in Attesa di Analisi)
BollettinoNV 5865 → https://github.com/NVIDIA/product-security/tree/main/2026/5865
CVSS 3.19.8 CRITICO AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-22 Path Traversal
Versioni Affette0.0-26.05 (server v2.69.0 / core r26.05)
Corretta in26.06 (server v2.70.0 / core r26.06)
ImpattoDoS (descrizione CNA) — questa ricerca dimostra scrittura di file fuori da /models via Zip-Slip, che può essere estesa a DoS/esaurimento risorse
CreditiMartin Brodeur

Nota onesta: La descrizione CNA riporta solo path traversal → DoS senza dettagli. Questo writeup ricostruisce la posizione del bug tramite diff r26.05..r26.06 e test diretti nel container 26.05-py3.


2. Ambiente di Laboratorio

Immagine: nvcr.io/nvidia/tritonserver:26.05-py3 (TRITON_VERSION 2.69.0)

Compose sempre explicit (già patchato in questo repo):

# docker-compose.yml:12
command: ["tritonserver", "--model-repository=/models", "--model-control-mode=explicit", "--log-verbose=0"]

Anche run_triton.bat:10, run_triton.ps1:11, run_triton.sh:12 sono già explicit.

Modalità Triton:

  • NONE (default upstream) → carica una volta all'avvio, POST /v2/repository/models/.../load → 503, bisogna riavviare per caricare nuovi modelli.
  • POLL → esegue la scansione del repo ogni secondo, auto-carica, blocca comunque il caricamento esplicito.
  • EXPLICIT (questo repo) → non esegue scansioni, ma apre gRPC load_model / POST /load → PoC senza riavvio via gRPC.

Porte: | 8000 | HTTP REST | v2/health, v2/models, v2/repository | | 8001 | gRPC | RepositoryModelLoad, ModelInfer | | 8002 | Metriche | Prometheus |

Modelli iniziali:

model_repository/
├── echo_python/ (backend python, model.py)
│   └── 1/model.py
└── identity_onnx/ (onnxruntime, model.onnx ~1KB)

Avvio rapido:

docker compose up -d
docker compose logs -f
py scripts/client_test.py  # health + infer identity_onnx

3. Anatomia della Vulnerabilità

Input utente (model_name / voce tar) ──► join(parent, child) ──► canonicalize ──► controllo "child dentro parent?" ──► apertura file
         │                                    │                     │                         │                     │
         └──► "../tmp/pwn"               /models + "/../tmp/pwn" = /models/../tmp/pwn → /tmp/pwn    rfind vs find + controllo '/'    FileExists / estrazione
  • Se join senza canonicalize o controllo rfind(parent,0)==0 errato (corrispondenza parziale /models vs /models_evil), allora ../ può fuoriuscire.
  • DoS si verifica se il file attraversato è una FIFO, /dev/zero, /proc/self/mem, o un tar contenente ../../ che sovrascrive file di sistema → hang / OOM / crash.

Tre domande di ricerca (dal report iniziale):

  1. Dove l'utente controlla il percorso? → model_name in gRPC RepositoryModelLoad, voce tar EXECUTION_ENV_PATH, override file:, TRITON_BATCH_STRATEGY_PATH.
  2. Come viene usato il percorso? → posixpath.join(repo, model_name) / temp_dir + "/" + file_name + IsChildPathEscapingParentPath.
  3. Qual è l'impatto? → DoS via esaurimento risorse / hang. In questo repo è dimostrata la scrittura di file in /tmp/poc_marker.

4. Analisi della Root Cause (Diff 26.05 → 26.06)

Repo core (r26.05..r26.06):

  1. src/filesystem/api.cc:407 IsChildPathEscapingParentPath — fix dcb315d + 72f3d9b:

    // VULNERABILE (r26.05):
    absolute_child.rfind(absolute_parent,0) != 0
    // → bug di corrispondenza parziale: il prefisso "/models" di "/models_evil/file" è considerato interno
    
    // CORRETTO (r26.06):
    canonical_child.find(canonical_parent,0)==0 &&
    ((child.size() > parent.size() && child[parent.size()]=='/') || child.size()==parent.size())
    // → deve esserci '/' dopo il prefisso, "/models_evil" ora è correttamente esterno
    

    Usato in src/backend_model.cc:196 (TRITON_BATCH_STRATEGY_PATH) e src/model_repository_manager/model_repository_manager.cc:162 (file:).

  2. src/model_repository_manager/model_repository_manager.cc:62 ValidateModelName — core#472/#481 (marzo 2026, già in 26.05 ma rafforzata in 26.06):

    if (trimmed==".." || trimmed.find('/')!=npos) return INVALID_ARG "must not contain path traversal"
    

    Questo fa sì che gRPC load_model('../tmp/pwn') → 400 INVALID_ARGUMENT in 26.05 (già bloccato). Ma %2f (/ codificato) passa perché non è un / letterale → 500 poll letterale.

  3. python_be.cc:292 EXECUTION_ENV_PATH — e520f8c7 test zipslip_test.py: Il tar viene estratto senza controllo di .. / percorsi assoluti. La voce ../../poc_marker da /models/poc_exploit/malicious_env.tar.gz viene estratta in /tmp/poc_marker (fuori dalla directory del modello). Fix in 26.06: usa ARCHIVE_EXTRACT_SECURE_NODOTDOT|NOABSOLUTEPATHS + controllo IsChildPathEscapingParentPath.

Repo server (r26.05..r26.06): solo sagemaker_server.cc:1027 (controllo RE2::FullMatch) + http_server.cc:2440 (atoi→stoi), non sono il percorso di questa CVE.

Conclusione: Il percorso model_name via HTTP/gRPC è già bloccato in 26.05 da ValidateModelName, ma lo Zip-Slip del tar non lo è — è questo che viene sfruttato dal PoC di questo repo.


5. Percorsi di Sfruttamento: Quali Sono Realmente Colpiti?

VettorePayloadRisultato 26.05Colpito?
HTTP raw ../POST /v2/repository/models/../tmp/pwn/load404 (routing normalizzato)❌
HTTP codificato ..%2fPOST /v2/repository/models/..%2ftmp%2fpwn/load500 letterale, poll /models/..%2ftmp%2fpwn non esiste❌ (500 falso, non traversal)
gRPC raw ../tmp/pwnload_model('../tmp/pwn')400 INVALID_ARGUMENT❌ (già bloccato)
gRPC codificato ..%2fload_model('..%2ftmp%2fpwn')500 poll letterale❌
Override file: ../models_evilfile:../models_evil/pwn400/500 a seconda della corrispondenza parziale⚠️ (dipende dal bug IsChildPathEscapingParentPath, ma già bloccato da ValidateModelName per model_name)
Tar EXECUTION_ENV_PATH ../../poc_markermalicious_env.tar.gz voce ../../poc_marker200 + file in /tmp/poc_marker✅ VULNERABILE
Scarica lo strumento