JFrog Artifactory 사전 인증 전체 체인 RCE 재현 프로젝트(CVE-2026-42018 / CVE-2026-65616 / CVE-2026-65615): 전체 공격 체인 보고서, 7.146.7 Docker 재현 산출물(EXP / 배포 / 베이스라인 검증 / payload 샘플 / 복구 도구)
승인된 보안 테스트, 방어 연구 및 보안 교육 목적으로만 사용하십시오. 해당 취약점 체인은 벤더에 의해 수정되었으므로(7.161.15+로 업그레이드 권장), 일회성 격리 실험 환경에서만 재현하십시오. 타인의 시스템에 대해 본 저장소에 설명된 어떠한 작업도 무단으로 수행하는 것은 불법이며, 이로 인해 발생하는 모든 결과는 작업자 본인이 부담합니다.
본 저장소는 edrabb.fr에서 공개한 JFrog Artifactory 사전 인증 RCE 취약점 체인의 완전한 재현 산출물입니다: 공식 이미지 releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7(7.146.x의 유일한 공식 배포 형태: 외부 PostgreSQL)을 기반으로 5단계 공격 체인을 전자동으로 재현하였으며, "완전히 새로운 환경에서 직접 RCE를 실행"하는 기준선 실험을 통해 재현의 진위를 입증하였습니다(자세한 내용은 attack-chain-package/baseline/BASELINE-VERIFIED.md 참조).
| 단계 | 环节 | CVE |
|---|
| Step 1 | 후행 슬래시 인증 우회, 익명 JWT 획득(aud=*@*) | CVE-2026-42018 |
| Step 2 | access + refresh 토큰 쌍 교환 | CVE-2026-42018 |
| Step 3 | Router가 jfrt@ 서비스 ID 발견 → admin JWT 갱신 위조 → 실제 서명된 관리자 토큰 | CVE-2026-65616 |
| Step 4 | systemUpload로 payload.zip 업로드 → system import로 압축 해제하여 악성 logback.xml 기록 | — |
| Step 5 | Logback fileHeader가 web.xml / CGI 컴포넌트를 디스크에 기록 → Tomcat CGI 사전 인증 RCE | CVE-2026-65615 |
├── 漏洞攻击链完整报告.md ← 총괄 보고서(재현 진위 기준선 검증, 원리, 공개 글과의 비교, 수정 권고)
├── 复现报告.md ← 744줄 상세 기술 재현 보고서(소스 코드 수준 원리 + 수동 단계)
└── attack-chain-package/
├── README.md ← 빠른 시작(타깃 환경 배포 / 공격 실행 / 환경 복구)
├── exploit/
│ ├── exp.py ← 전체 체인 자동화 EXP(Python 3 표준 라이브러리, 서드파티 의존성 없음)
│ └── forge_jwt.py ← Step 3 수동 JWT 위조 스크립트(exp.py와 독립적)
├── deploy/system.yaml ← Artifactory 7.146.7 컨테이너 마운트 설정(공식 이미지의 필수 요구 사항인 PostgreSQL)
├── baseline/ ← 재현 진위 기준선 검증(완전히 새로운 환경에서 직접 RCE를 실행한 실험 기록 및 설정)
├── payload-sample/ ← 오프라인으로 생성된 payload 컴포넌트 샘플(exp.py --dump-payload 산출물)
└── recovery/ ← 환경 복구 및 검증 스크립트(사고 대응 참고)
# 1. 타깃 환경 배포(자세한 내용은 attack-chain-package/README.md 참조; 약 6 GB 디스크와 8 GB 사용 가능 메모리 필요)
docker network create jfrog-net
docker run -d --name artifactory-pg --network jfrog-net \
-e POSTGRES_DB=artifactory -e POSTGRES_USER=artifactory -e POSTGRES_PASSWORD=artifactory \
postgres:15
docker run -d --name artifactory-rce --network jfrog-net -p 8081:8081 -p 8082:8082 \
-v <ABS_PATH>/attack-chain-package/deploy/system.yaml:/opt/jfrog/artifactory/var/etc/system.yaml \
releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7
# 2–4분 대기 후, ping이 OK를 반환하면 준비 완료
curl -s http://127.0.0.1:8082/artifactory/api/system/ping
# 2. 공격 실행(일회성 모드, 기본적으로 id 실행; Windows 호스트에서 python이 2.x인 경우 py -3 사용)
python3 attack-chain-package/exploit/exp.py --target http://127.0.0.1:8082
# 3. 환경 복구(가장 간단한 방법: 삭제 후 재생성; 제자리 복구는 recovery/recover5.sh 참조)
docker rm -f artifactory-rce
공격은 webapp에 대해 일회성 파괴입니다: Artifactory의 원래 Web 기능은 RCE가 실행되는 즉시 종료되므로, 반드시 일회성 실험 컨테이너를 사용하십시오.
attack-chain-package/payload-sample/payload.zip(최종 업로드물, 가져오기 시 RCE 트리거)은 base64 텍스트 형식으로 payload.zip.b64로 저장되어 있습니다:
# Windows PowerShell
[IO.File]::WriteAllBytes("payload.zip", [Convert]::FromBase64String((Get-Content "payload.zip.b64" -Raw).Trim()))
# Linux / macOS
base64 -d payload.zip.b64 > payload.zip
admin / password(JFrog 기본 초기 계정; 본 공격 체인은 전 과정 사전 인증이며, 어떠한 자격 증명도 사용하지 않음)