Проект воспроизведения полной цепочки RCE с предварительной аутентификацией в JFrog Artifactory (CVE-2026-42018 / CVE-2026-65616 / CVE-2026-65615): отчёт о полной цепочке атаки, артефакты воспроизведения в Docker 7.146.7 (EXP / развёртывание / проверка базовой конфигурации / образцы payload / инструменты восстановления)
Только для авторизованного тестирования безопасности, исследований в области защиты и обучения безопасности. Данная цепочка уязвимостей уже исправлена производителем (рекомендуется обновление до 7.161.15+), воспроизводите её только в одноразовой изолированной лабораторной среде. Неавторизованное выполнение любых описанных в этом репозитории действий в отношении чужих систем является противоправным, и вся ответственность за возникшие последствия лежит на операторе.
Данный репозиторий представляет собой полный комплект воспроизведения цепочки pre-auth RCE в JFrog Artifactory, раскрытой edrabb.fr: на основе официального образа 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 сервисного ID jfrt@ → подделка обновления admin JWT → реально подписанный токен администратора | CVE-2026-65616 |
| Step 4 | systemUpload загрузка payload.zip → system import распаковка и запись вредоносного logback.xml | — |
| Step 5 | Logback fileHeader запись на диск web.xml / компонентов CGI → pre-auth RCE через Tomcat CGI | 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 уничтожается в момент срабатывания 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; вся данная цепочка атаки выполняется pre-auth и не использует никаких учётных данных)