
# CVE-2026-29000 데모: pac4j-jwt 라이브러리 수준 PoC 랩 pac4j-jwt의 CVE-2026-29000을 시연하는 라이브러리 수준의 개념 증명 랩으로, Docker를 사용해 취약한 버전과 패치된 버전을 비교하여 위조된 JWT의 수용 및 거부를 보여줍니다.
| 버전 | 기준 | 공격 | 결과 |
|---|
6.0.3 | ✅ | ✅ | 취약 |
6.0.4.1 | ✅ | ✅ | 취약 |
6.3.3 | ✅ | ❌ | 패치됨 |
이 PoC는 취약한 버전에서 공격자가 제어하는 subject 및 역할로 인증된 프로필이 생성되는 것을 입증하며, 패치된 버전은 위조된 토큰을 거부합니다.
이것은 웹 애플리케이션 데모가 아닙니다.
JwtAuthenticator를 직접 호출하고 Docker 내부에서 여러 버전의 pac4j-jwt를 비교하는 작은 Java 프로그램입니다.
목표는 세 가지를 입증하는 것입니다:
테스트된 버전은 의도적으로 선택되었습니다:
이를 통해 랩은 세 가지 유용한 기준점을 제공합니다:
.
├── docker-compose.yml
├── Dockerfile
├── pom.xml
└── src/main/java/lab/Repro.java
docker-compose.yml
각 버전에 대한 테스트 매트릭스를 정의합니다.
Dockerfile
컨테이너 내부에서 PoC를 빌드하고 실행합니다.
pom.xml
종속성을 정의하고 실행 가능한 fat JAR을 빌드합니다.
src/main/java/lab/Repro.java
실제 PoC 하네스입니다.
docker-compose.yml 파일은 세 가지 서비스를 정의합니다:
v603 = pac4j-jwt 6.0.3 테스트v6041 = pac4j-jwt 6.0.4.1 테스트patched = pac4j-jwt 6.3.3 테스트따라서 다음 명령은 "특정 버전에 대해 PoC를 한 번 실행"을 의미합니다:
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
--rm은 실행이 끝난 후 임시 컨테이너가 제거됨을 의미합니다.
docker compose build --no-cache
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
각 버전에 대해 프로그램은 두 가지 사례를 실행합니다.
정상 토큰을 생성하고 JwtAuthenticator를 통해 검증합니다.
예상 결과:
공격자가 제어하는 클레임이 포함된 위조 토큰을 생성하고 JwtAuthenticator를 통해 검증합니다.
예상 결과:
다음과 같은 내용이 표시되어야 합니다:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: ACCEPTED
observed_subject: admin#override
observed_roles: [ROLE_SUPERUSER, ROLE_ADMIN]
[summary]
conclusion: VULNERABLE: forged token accepted
의미:
다음과 같은 내용이 표시되어야 합니다:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: REJECTED
reason: CredentialsException: A non-signed JWT cannot be accepted as signature configurations have been defined
[summary]
conclusion: PATCHED: forged token rejected
의미:
이 CVE는 라이브러리 수준 인증 경로에 영향을 미치며, 단일한 보편적 역할 모델을 가진 단일 애플리케이션이 아닙니다.
재사용 가능한 부분은 공격 형태입니다:
JwtAuthenticator에 전달실제 애플리케이션에서 보편적이지 않은 것:
이 때문에 이 저장소는 임의의 애플리케이션에 자동으로 작동하는 보편적인 토큰이 있다고 가정하는 대신, 취약한 버전에서 라이브러리가 공격자가 제어하는 위조 클레임을 수락한다는 것을 입증하는 데 초점을 맞춥니다.
docker compose run --rm v603docker compose run --rm v6041docker compose run --rm patched


이 프로젝트는 세 가지 핵심 사실을 입증합니다:
6.0.3 및 6.0.4.1에서 수락됨6.3.3에서 거부됨이것이 이 저장소에서 이 CVE에 대한 핵심 취약-대-패치 증거입니다.
취약한 버전에서 위조된 토큰은 단순히 파싱되는 것이 아니라 공격자가 제어하는 subject 및 역할로 인증된 프로필을 생성합니다.