JFrog Artifactory projeto de reprodução de RCE em toda a cadeia com pré-autenticação (CVE-2026-42018 / CVE-2026-65616 / CVE-2026-65615): relatório completo da cadeia de ataque, entregáveis de reprodução em Docker 7.146.7 (EXP / implantação / validação de linha de base / amostras de payload / ferramenta de recuperação)
Destinado exclusivamente a testes de segurança autorizados, pesquisa defensiva e ensino de segurança. Esta cadeia de vulnerabilidades foi corrigida pelo fornecedor (recomenda-se atualizar para 7.161.15+); reproduza-a apenas em um ambiente de laboratório isolado e descartável. A realização não autorizada de qualquer operação descrita neste repositório em sistemas de terceiros é ilegal, e todas as consequências decorrentes são de responsabilidade exclusiva do operador.
Este repositório é o artefato completo de reprodução da cadeia de vulnerabilidades de RCE pré-autenticação no JFrog Artifactory divulgada pelo edrabb.fr: com base na imagem oficial releases-docker.jfrog.io/jfrog/artifactory-oss:7.146.7 (única forma oficial de implantação da linha 7.146.x: PostgreSQL externo), foi concluída a reprodução totalmente automatizada da cadeia de ataque em 5 etapas, e a autenticidade da reprodução foi comprovada por meio de um experimento de linha de base de "executar RCE diretamente em um ambiente totalmente novo" (consulte attack-chain-package/baseline/BASELINE-VERIFIED.md).
| Etapa | Fase | CVE |
|---|---|---|
| Step 1 | Bypass de autenticação por barra final, obtenção de JWT anônimo (aud=*@*) | CVE-2026-42018 |
| Step 2 | Troca pelo par de tokens access + refresh | CVE-2026-42018 |
| Step 3 | Descoberta do service ID jfrt@ pelo Router → falsificação de refresh de JWT admin → token de administrador com assinatura real | CVE-2026-65616 |
| Step 4 | Upload de payload.zip via systemUpload → gravação de logback.xml malicioso por descompactação no system import | — |
| Step 5 | Gravação em disco de web.xml / componente CGI pelo fileHeader do Logback → RCE pré-autenticação via Tomcat CGI | CVE-2026-65615 |
├── 漏洞攻击链完整报告.md ← Relatório geral (verificação de linha de base da autenticidade da reprodução, princípios, comparação com o artigo de divulgação, recomendações de correção)
├── 复现报告.md ← Relatório técnico detalhado de reprodução com 744 linhas (princípios em nível de código-fonte + etapas manuais)
└── attack-chain-package/
├── README.md ← Guia rápido (implantar o alvo / iniciar o ataque / restaurar o ambiente)
├── exploit/
│ ├── exp.py ← EXP automatizado de toda a cadeia (biblioteca padrão do Python 3, sem dependências de terceiros)
│ └── forge_jwt.py ← Script manual de falsificação de JWT da Step 3 (independente do exp.py)
├── deploy/system.yaml ← Configuração de montagem do contêiner Artifactory 7.146.7 (a imagem oficial exige obrigatoriamente PostgreSQL)
├── baseline/ ← Verificação de linha de base da autenticidade da reprodução (registros e configurações do experimento de execução direta de RCE em ambiente totalmente novo)
├── payload-sample/ ← Amostra de componente de payload gerada offline (produto de exp.py --dump-payload)
└── recovery/ ← Scripts de restauração e verificação do ambiente (referência para resposta a incidentes)
# 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
O ataque causa destruição irreversível ao webapp: as funcionalidades web originais do Artifactory são eliminadas no momento em que o RCE é executado, portanto use obrigatoriamente um contêiner de laboratório descartável.
attack-chain-package/payload-sample/payload.zip (artefato final de upload, cuja importação dispara o RCE) é armazenado em formato de texto base64 como 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 (conta inicial padrão do JFrog; toda esta cadeia de ataque é pré-autenticação e não utiliza nenhuma credencial)