Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
cve-2026-47627 — Prueba de concepto de exploit para CVE-2026-47627, una vulnerabilidad de path traversal en NVIDIA Triton Inference Server que permite la escritura arbitraria de archivos mediante Zip-Slip. Incluye análisis detallado, entorno de laboratorio y scripts de exploit con un solo clic. | Kitploit
Herramientas/GitHubGitHub/anekazek/cve-2026-47627
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubanekazek/cve-2026-47627

cve-2026-47627

Prueba de concepto de exploit para CVE-2026-47627, una vulnerabilidad de path traversal en NVIDIA Triton Inference Server que permite la escritura arbitraria de archivos mediante Zip-Slip. Incluye análisis detallado, entorno de laboratorio y scripts de exploit con un solo clic.

Ver Repositorio
322hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

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

Writeup completo de la investigación y PoC en este repo (imagen nvcr.io/nvidia/tritonserver:26.05-py3 / server v2.69.0). El repo está configurado para estar siempre en modo explicit para que el PoC funcione sin reinicio vía gRPC.


Tabla de Contenidos

  1. Resumen del CVE
  2. Entorno de Laboratorio
  3. Anatomía de la Vulnerabilidad
  4. Análisis de Causa Raíz (Diff 26.05 → 26.06)
  5. Rutas de Explotación: ¿Cuáles Afectan Realmente?
  6. PoC Principal: Zip-Slip vía EXECUTION_ENV_PATH
  7. Cómo Ejecutar el PoC (One-Click)
  8. Evidencia de Traversal (No un 500 Falso)
  9. Impacto DoS
  10. Mitigación
  11. Estructura del Repo (Después de la Limpieza)
  12. Referencias y Cronología

1. Resumen del CVE

CampoValor
CVECVE-2026-47627
CNA[email protected]
Publicación2026-08-18 (NVD en Análisis)
BoletínNV 5865 → https://github.com/NVIDIA/product-security/tree/main/2026/5865
CVSS 3.19.8 CRÍTICO AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-22 Path Traversal
Afectado0.0-26.05 (server v2.69.0 / core r26.05)
Corregido26.06 (server v2.70.0 / core r26.06)
ImpactoDoS (descripción del CNA) — esta investigación demuestra escritura de archivos fuera de /models vía Zip-Slip, que puede ampliarse a DoS/agotamiento de recursos
CréditoMartin Brodeur

Nota honesta: La descripción del CNA solo indica path traversal → DoS sin detalles. Este writeup reconstruye la ubicación del bug mediante el diff r26.05..r26.06 y pruebas directas en el contenedor 26.05-py3.


2. Entorno de Laboratorio

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

Compose siempre en explicit (ya parcheado en este repo):

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

run_triton.bat:10, run_triton.ps1:11, run_triton.sh:12 también están en explicit.

Modo Triton:

  • NONE (predeterminado upstream) → carga una vez al inicio, POST /v2/repository/models/.../load → 503, requiere reinicio para cargar un modelo nuevo.
  • POLL → escanea el repo cada segundo, auto-carga, sigue bloqueando la carga explícita.
  • EXPLICIT (este repo) → no escanea, pero abre gRPC load_model / POST /load → PoC sin reinicio vía gRPC.

Puertos: | 8000 | HTTP REST | v2/health, v2/models, v2/repository | | 8001 | gRPC | RepositoryModelLoad, ModelInfer | | 8002 | Métricas | Prometheus |

Modelo inicial:

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

Inicio rápido:

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

3. Anatomía de la Vulnerabilidad

Entrada del usuario (model_name / entrada tar) ──► join(parent, child) ──► canonicalize ──► verificar "¿child dentro de parent?" ──► abrir archivo
         │                                    │                     │                         │                     │
         └──► "../tmp/pwn"               /models + "/../tmp/pwn" = /models/../tmp/pwn → /tmp/pwn    rfind vs find + verificación '/'    FileExists / extract
  • Si join sin canonicalize o la verificación rfind(parent,0)==0 es incorrecta (coincidencia parcial /models vs /models_evil), entonces ../ puede escapar.
  • DoS ocurre si el archivo atravesado es un FIFO, /dev/zero, /proc/self/mem, o un tar que contiene ../../ que sobrescribe archivos del sistema → cuelgue / OOM / crash.

Tres preguntas de investigación (del informe inicial):

  1. ¿Dónde controla el usuario la ruta? → model_name en gRPC RepositoryModelLoad, entrada tar EXECUTION_ENV_PATH, override file:, TRITON_BATCH_STRATEGY_PATH.
  2. ¿Cómo se usa la ruta? → posixpath.join(repo, model_name) / temp_dir + "/" + file_name + IsChildPathEscapingParentPath.
  3. ¿Cuál es el impacto? → DoS vía agotamiento de recursos / cuelgue. En este repo se demuestra escritura de archivos en /tmp/poc_marker.

4. Análisis de Causa Raíz (Diff 26.05 → 26.06)

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

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

    // VULNERABLE (r26.05):
    absolute_child.rfind(absolute_parent,0) != 0
    // → bug de coincidencia parcial: el prefijo "/models" de "/models_evil/file" se considera interno
    
    // CORREGIDO (r26.06):
    canonical_child.find(canonical_parent,0)==0 &&
    ((child.size() > parent.size() && child[parent.size()]=='/') || child.size()==parent.size())
    // → debe haber '/' después del prefijo, "/models_evil" ahora está correctamente fuera
    

    Usado en src/backend_model.cc:196 (TRITON_BATCH_STRATEGY_PATH) y 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, ya en 26.05 pero reforzado en 26.06):

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

    Esto es lo que hace que gRPC load_model('../tmp/pwn') → 400 INVALID_ARGUMENT en 26.05 (ya bloqueado). Pero %2f (/ codificado) pasa porque no es un / literal → 500 de poll literal.

  3. python_be.cc:292 EXECUTION_ENV_PATH — e520f8c7 test zipslip_test.py: El tar se extrae sin verificar .. / rutas absolutas. La entrada ../../poc_marker de /models/poc_exploit/malicious_env.tar.gz se extrae a /tmp/poc_marker (fuera del directorio del modelo). Fix en 26.06: usar ARCHIVE_EXTRACT_SECURE_NODOTDOT|NOABSOLUTEPATHS + verificación IsChildPathEscapingParentPath.

Repo server (r26.05..r26.06): solo sagemaker_server.cc:1027 (verificación RE2::FullMatch) + http_server.cc:2440 (atoi→stoi), no es la ruta de este CVE.

Conclusión: La ruta model_name vía HTTP/gRPC ya está bloqueada en 26.05 por ValidateModelName, pero el Zip-Slip del tar no — esto es lo que explota el PoC de este repo.


5. Rutas de Explotación: ¿Cuáles Afectan Realmente?

VectorPayloadResultado 26.05¿Afecta?
HTTP raw ../POST /v2/repository/models/../tmp/pwn/load404 (normalización de ruta)❌
HTTP codificado ..%2fPOST /v2/repository/models/..%2ftmp%2fpwn/load500 literal, poll /models/..%2ftmp%2fpwn no existe❌ (500 falso, no es traversal)
gRPC raw ../tmp/pwnload_model('../tmp/pwn')400 INVALID_ARGUMENT❌ (ya bloqueado)
gRPC codificado ..%2fload_model('..%2ftmp%2fpwn')500 poll literal❌
Override file: ../models_evilfile:../models_evil/pwn400/500 dependiendo de la coincidencia parcial⚠️ (depende del bug IsChildPathEscapingParentPath, pero ya bloqueado por ValidateModelName para model_name)
Tar EXECUTION_ENV_PATH ../../poc_markermalicious_env.tar.gz entrada ../../poc_marker200 + archivo en /tmp/poc_marker✅ VULNERABLE
Descargar herramienta