JFrog Artifactory pre-autenticazione catena completa RCE progetto di riproduzione (CVE-2026-42018 / CVE-2026-65616 / CVE-2026-65615): report completo della catena di attacco, deliverable di riproduzione Docker 7.146.7 (EXP / deployment / verifica baseline / campioni payload / strumenti di ripristino)
Solo per test di sicurezza autorizzati, ricerca difensiva e didattica sulla sicurezza. Questa catena di vulnerabilità è stata corretta dal fornitore (si consiglia l'aggiornamento a 7.161.15+); riprodurla esclusivamente in un ambiente di laboratorio isolato e monouso. L'esecuzione non autorizzata di qualsiasi operazione descritta in questo repository su sistemi di terzi è illegale e tutte le conseguenze che ne derivano sono a carico esclusivo dell'operatore.
Questo repository è il deliverable completo di riproduzione della catena di vulnerabilità RCE pre-autenticazione di JFrog Artifactory divulgata da edrabb.fr: basato sull'immagine ufficiale releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7 (unica forma di deployment ufficiale per la 7.146.x: PostgreSQL esterno), completa la riproduzione completamente automatizzata della catena di attacco in 5 passi e dimostra l'autenticità della riproduzione tramite un esperimento di baseline "RCE eseguito direttamente su un ambiente nuovo" (vedi attack-chain-package/baseline/BASELINE-VERIFIED.md).
| Passo | Fase | CVE |
|---|---|---|
| Step 1 | Bypass dell'autenticazione con slash finale, ottenimento di un JWT anonimo (aud=*@*) | CVE-2026-42018 |
| Step 2 | Scambio della coppia di token access + refresh | CVE-2026-42018 |
| Step 3 | Il Router scopre l'ID del servizio jfrt@ → falsificazione del refresh del JWT admin → token amministratore con firma reale | CVE-2026-65616 |
| Step 4 | systemUpload carica payload.zip → system import estrae e scrive il logback.xml malevolo | — |
| Step 5 | Logback fileHeader scrive su disco web.xml / componenti CGI → RCE pre-autenticazione via Tomcat CGI | CVE-2026-65615 |
├── 漏洞攻击链完整报告.md ← Report generale (verifica di baseline dell'autenticità della riproduzione, principi, confronto con l'articolo di divulgazione, raccomandazioni di remediation)
├── 复现报告.md ← Report tecnico dettagliato di riproduzione di 744 righe (principi a livello di codice sorgente + passaggi manuali)
└── attack-chain-package/
├── README.md ← Guida rapida (deploy del target / avvio dell'attacco / ripristino dell'ambiente)
├── exploit/
│ ├── exp.py ← EXP automatizzato per l'intera catena (libreria standard Python 3, zero dipendenze di terze parti)
│ └── forge_jwt.py ← Script manuale di falsificazione JWT per lo Step 3 (indipendente da exp.py)
├── deploy/system.yaml ← Configurazione di mount del container Artifactory 7.146.7 (l'immagine ufficiale richiede obbligatoriamente PostgreSQL)
├── baseline/ ← Verifica di baseline dell'autenticità della riproduzione (registro e configurazione dell'esperimento di RCE eseguito direttamente su ambiente nuovo)
├── payload-sample/ ← Esempi di componenti payload generati offline (prodotto di exp.py --dump-payload)
└── recovery/ ← Script di ripristino e verifica dell'ambiente (riferimento per l'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
L'attacco provoca una distruzione irreversibile della webapp: le funzionalità Web originali di Artifactory vengono uccise nel momento in cui l'RCE va a segno, quindi è indispensabile utilizzare un container di laboratorio monouso.
attack-chain-package/payload-sample/payload.zip (l'artefatto finale caricato, la cui importazione attiva l'RCE) è memorizzato in formato testo base64 come 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 (account iniziale predefinito di JFrog; l'intera catena di attacco è pre-autenticazione e non utilizza alcuna credenziale)