JFrog Artifactory Pre-Auth Full-Chain RCE Reproduktionsprojekt (CVE-2026-42018 / CVE-2026-65616 / CVE-2026-65615): vollständiger Angriffskettenbericht, 7.146.7 Docker-Reproduktionsartefakte (EXP / Deployment / Baseline-Verifikation / Payload-Beispiele / Wiederherstellungstools)
Nur für autorisierte Sicherheitstests, Defensivforschung und Sicherheitsschulungen. Diese Schwachstellenkette wurde vom Hersteller behoben (Upgrade auf 7.161.15+ empfohlen). Bitte nur in einer einmaligen, isolierten Laborumgebung reproduzieren. Die unbefugte Durchführung jeglicher in diesem Repository beschriebener Operationen an fremden Systemen ist illegal, und alle daraus resultierenden Konsequenzen liegen in der Verantwortung des Ausführenden.
Dieses Repository ist das vollständige Reproduktionsartefakt der von edrabb.fr offengelegten JFrog Artifactory Pre-Auth-RCE-Schwachstellenkette: Basierend auf dem offiziellen Image releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7 (der einzigen offiziellen Bereitstellungsform von 7.146.x: externe PostgreSQL) wird eine vollautomatische Reproduktion der 5-stufigen Angriffskette durchgeführt, und die Echtheit der Reproduktion wird durch ein Baseline-Experiment „direkt RCE aus einer brandneuen Umgebung heraus" nachgewiesen (Details siehe attack-chain-package/baseline/BASELINE-VERIFIED.md).
| Schritt | Phase | CVE |
|---|---|---|
| Step 1 | Umgehung der Authentifizierung mittels abschließendem Schrägstrich, Erlangung eines anonymen JWT (aud=*@*) | CVE-2026-42018 |
| Step 2 | Einlösung des access + refresh Token-Paares | CVE-2026-42018 |
| Step 3 | Router entdeckt jfrt@ Service-ID → gefälschte Admin-JWT-Aktualisierung → echt signiertes Administrator-Token | CVE-2026-65616 |
| Step 4 | systemUpload lädt payload.zip hoch → system import entpackt und schreibt bösartige logback.xml | — |
| Step 5 | Logback fileHeader schreibt web.xml / CGI-Komponenten auf die Festplatte → Tomcat CGI Pre-Auth RCE | CVE-2026-65615 |
├── 漏洞攻击链完整报告.md ← Gesamtbericht (Baseline-Verifikation der Reproduktionsechtheit, Prinzipien, Vergleich mit dem Offenlegungsartikel, Behebungsempfehlungen)
├── 复现报告.md ← 744-zeiliger detaillierter technischer Reproduktionsbericht (quellcodebasierte Prinzipien + manuelle Schritte)
└── attack-chain-package/
├── README.md ← Schnellstart (Zielumgebung bereitstellen / Angriff starten / Umgebung wiederherstellen)
├── exploit/
│ ├── exp.py ← Vollautomatischer EXP der gesamten Kette (Python 3 Standardbibliothek, keine Drittanbieter-Abhängigkeiten)
│ └── forge_jwt.py ← Manuelles JWT-Fälschungsskript für Step 3 (unabhängig von exp.py)
├── deploy/system.yaml ← Artifactory 7.146.7 Container-Mount-Konfiguration (offizielles Image erfordert zwingend PostgreSQL)
├── baseline/ ← Baseline-Verifikation der Reproduktionsechtheit (Experimentaufzeichnungen und Konfiguration für direktes RCE aus brandneuer Umgebung)
├── payload-sample/ ← Offline generierte Payload-Komponentenbeispiele (Produkt von exp.py --dump-payload)
└── recovery/ ← Skripte zur Umgebungswiederherstellung und -verifikation (Referenz für Incident Response)
# 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
Der Angriff ist für die Webapp einmalig destruktiv: Die ursprüngliche Web-Funktionalität von Artifactory wird beim Eintreffen des RCE sofort beendet. Bitte unbedingt einen einmaligen Experiment-Container verwenden.
attack-chain-package/payload-sample/payload.zip (das endgültige Upload-Artefakt, dessen Import das RCE auslöst) ist als base64-Textdatei payload.zip.b64 abgelegt:
# 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 Standard-Initialkonto; diese Angriffskette ist durchgehend Pre-Auth und verwendet keinerlei Anmeldedaten)