← voltar
CVE-2024-23897criticalsob ataqueransomwareCWE-27

CVE-2024-23897

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 9.8epss 100%
da publicação à arma0 dias
Publicada no NVD24 de jan.
1ª PoC23 de jan.
metasploit24 de jan.
CISA KEV+208d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
94 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2024-09-09

Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.

Resumo

CVE-2024-23897 afeta o CLI (Command Line Interface) do Jenkins Controller e permite que um atacante não autenticado leia arquivos arbitrários do sistema de arquivos do controller, com impacto que pode escalar para execução remota de código. A gravidade real depende de permissões: sem autenticação o atacante só lê as primeiras linhas de arquivos; com a permissão Overall/Read, lê arquivos completos — inclusive segredos criptográficos que habilitam RCE por múltiplas cadeias.

Detalhamento técnico

A causa é uma feature do parser de argumentos args4j, usado pelo Jenkins para processar comandos da CLI: quando um argumento contém o caractere '@' seguido de um caminho de arquivo, o parser substitui automaticamente esse trecho pelo conteúdo do arquivo referenciado (`expandAtFiles`). Essa expansão é habilitada por padrão na biblioteca e o Jenkins nunca a desativou, então qualquer comando CLI que aceite um argumento arbitrário pode ser abusado para forçar a leitura de um arquivo local do controller e devolver seu conteúdo na resposta. É classificada como CWE-27/path traversal pela CISA, embora a raiz seja mais uma falha de design de parsing de input do que travessia clássica de diretório.

O alcance da leitura depende do nível de acesso do atacante. Sem nenhuma autenticação, o time de segurança do Jenkins confirmou ser possível ler as três primeiras linhas de arquivos usando comandos CLI disponíveis por padrão, sem plugins instalados — e não encontrou plugins que aumentem essa contagem. Com a permissão Overall/Read (usuário autenticado com privilégio mínimo de leitura), o atacante lê o arquivo inteiro, incluindo arquivos binários contendo chaves criptográficas usadas por diversos recursos do Jenkins.

A leitura de binários tem uma limitação prática: o parser lê o arquivo como string usando o encoding padrão do processo Jenkins (`file.encoding`). Em UTF-8, aproximadamente metade dos bytes de um segredo aleatório de 32 bytes (como os usados em HMAC-SHA256) seria substituída por um placeholder de valor ilegal, exigindo em média 16 bytes corretos por tentativa — inviável na prática. Em Windows-1252, apenas 5 dos 256 valores possíveis são ilegais, o que reduz drasticamente a dificuldade de reconstruir a chave binária. O próprio Jenkins Security Team alerta que, apesar de improvável, não é impossível que chaves geradas aleatoriamente usem poucos bytes problemáticos, então a dependência do encoding não deve ser tratada como mitigação confiável.

A partir dos segredos obtidos, pesquisadores da Sonar e a própria equipe de segurança do Jenkins mapearam múltiplas cadeias de exploração pós-leitura: RCE via Resource Root URLs (duas variantes), RCE via cookie 'Remember me' forjado, RCE via XSS armazenado em logs de build, bypass de proteção CSRF, descriptografia de segredos armazenados no Jenkins, exclusão de qualquer item e download de heap dump Java. O advisory do Jenkins deixa explícito que essa lista não é definitiva.

Como é explorada

O vetor é a interface CLI do Jenkins, acessível via rede (HTTP/HTTPS na porta do controller) sem necessidade de plugin específico. A complexidade de exploração é baixa: o ataque não exige interação do usuário e, no caso mais básico (sem autenticação), não exige nenhuma credencial — apenas enviar um comando CLI qualquer com um argumento no formato '@/caminho/do/arquivo'. Isso já entrega as primeiras linhas de qualquer arquivo legível pelo processo Jenkins, o que é suficiente para reconhecimento e, em muitos casos, para vazar segredos que iniciam cadeias de RCE.

A exploração completa (leitura de arquivo integral, incluindo chaves binárias) exige a permissão Overall/Read, que em instalações Jenkins configuradas de forma permissiva costuma estar disponível para qualquer usuário autenticado ou até para 'anonymous' em setups sem controle de acesso adequado — um pré-requisito frequentemente ignorado por quem só lê o CVSS 9.8 e assume acesso total sem autenticação. A escalada de leitura de arquivo para RCE depende de qual segredo é obtido e da configuração específica do controller (Resource Root URLs habilitadas, 'Remember me' ativo, presença de logs de build exploráveis via XSS armazenado etc.).

A vulnerabilidade está no catálogo KEV da CISA desde 19/08/2024, confirmando exploração ativa em campo, com prazo de mitigação definido pela CISA para 09/09/2024. Existem módulo Metasploit, template Nuclei e PoCs públicas, o que reduz a barreira técnica para atacantes automatizados e scanners de massa — a superfície de instâncias Jenkins expostas à internet com CLI habilitado é o alvo típico.

Versões

Afetadas
Jenkins 2.441 e anteriores; Jenkins LTS 2.426.2 e anteriores.
Corrigidas em
Jenkins 2.442; Jenkins LTS 2.426.3.

Como se proteger

A correção oficial é atualizar para Jenkins 2.442 (semanal) ou Jenkins LTS 2.426.3 (linha LTS), ambos publicados em 24/01/2024 junto com o advisory. Não há indicação de outros backports para ramos LTS mais antigos nas fontes revisadas — quem roda LTS anterior a 2.426.2 deve migrar para 2.426.3 ou superior.

Quando a atualização imediata não é viável, o advisory do Jenkins Project descreve desabilitar o acesso à CLI como workaround (removendo a superfície de ataque do parser de comandos). Esse controle tem custo operacional: qualquer automação, pipeline ou ferramenta que dependa da CLI do Jenkins (`java -jar jenkins-cli.jar`) para de funcionar até a reversão. Não confie no encoding de caracteres do sistema (`file.encoding`) como mitigação — o próprio Jenkins Security Team afirma que administradores devem atualizar independentemente do encoding configurado, porque a dificuldade de extrair segredos binários é estatística, não uma barreira garantida.

Controles compensatórios adicionais: restringir a permissão Overall/Read ao mínimo necessário, não expor a interface do Jenkins controller (incluindo a porta CLI/HTTP) diretamente à internet, e revisar logs de acesso à CLI para detectar tentativas anteriores à correção, já que a falha permite reconstrução de segredos que continuam válidos até serem rotacionados — atualizar o Jenkins não invalida chaves já vazadas.

Como detectar

Como o vetor de exploração básico passa por comandos legítimos da CLI do Jenkins com um argumento contendo '@' seguido de caminho de arquivo, logs de acesso HTTP/HTTPS ao endpoint da CLI (`/cli`) e logs de auditoria do Jenkins que registrem execução de comandos CLI são o ponto de partida — procurar por argumentos anômalos contendo '@/etc/passwd', '@/caminho/interno' ou tentativas repetidas de comandos CLI vindas de IPs sem sessão autenticada prévia. A existência de módulo Metasploit e template Nuclei públicos significa que scanners automatizados de massa também deixam padrões de requisição reconhecíveis (múltiplas tentativas de comando CLI em sequência rápida, sem autenticação).

Não há um indicador único e confiável de comprometimento pós-exploração, porque a falha em si é uma leitura de arquivo — não deixa rastro no sistema de arquivos, e o impacto real (RCE) só aparece se e quando o atacante usar os segredos vazados em uma das cadeias secundárias (Resource Root URL, cookie forjado, etc.), cada uma com seus próprios sinais específicos e não documentados de forma unificada nas fontes disponíveis.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Jenkins 2.441 and earlier, LTS 2.426.2 and earlier does not disable a feature of its CLI command parser that replaces an '@' character followed by a file path in an argument with the file's contents, allowing unauthenticated attackers to read arbitrary files on the Jenkins controller file system.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
PoCs públicas encontradas94
exploitdbwww.exploit-db.com/exploits/51993não verificadogithubgithub.com/h4x0r-dz/CVE-2024-23897207githubgithub.com/binganao/CVE-2024-2389799githubgithub.com/wjlin0/CVE-2024-2389786githubgithub.com/xaitax/CVE-2024-2389780githubgithub.com/godylockz/CVE-2024-2389743githubgithub.com/kaanatmacaa/CVE-2024-2389722githubgithub.com/Vozec/CVE-2024-2389717githubgithub.com/P4x1s/CVE-2024-2389715githubgithub.com/Maalfer/CVE-2024-2389713githubgithub.com/verylazytech/CVE-2024-2389710githubgithub.com/jenkinsci-cert/SECURITY-3314-33157githubgithub.com/viszsec/CVE-2024-238975githubgithub.com/yoryio/CVE-2024-238975githubgithub.com/D1se0/CVE-2024-23897-Vulnerabilidad-Jenkins4githubgithub.com/10T4/PoC-Fix-jenkins-rce_CVE-2024-238974githubgithub.com/Praison001/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability3githubgithub.com/vmtyan/poc-cve-2024-238972githubgithub.com/Fineken/Jenkins-CVE-2024-23897-Lab2githubgithub.com/Ap0dexMe0/CVE-2024-238972githubgithub.com/jopraveen/CVE-2024-238971githubgithub.com/JAthulya/CVE-2024-238971githubgithub.com/AbraXa5/Jenkins-CVE-2024-238971githubgithub.com/Nebian/CVE-2024-238971githubgithub.com/dheeraj-jayaswal/CICD-Goat-Vapt-Writeup1githubgithub.com/harekrishnarai/CVE-2024-23897-test-windows0githubgithub.com/r0xDB/CVE-2024-238970githubgithub.com/WLXQqwer/Jenkins-CVE-2024-23897-0githubgithub.com/B4CK4TT4CK/CVE-2024-238970githubgithub.com/ifconfig-me/CVE-2024-238970githubgithub.com/pulentoski/CVE-2024-23897-Arbitrary-file-read0githubgithub.com/murataydemir/CVE-2024-238970githubgithub.com/Surko888/Surko-Exploit-Jenkins-CVE-2024-238970githubgithub.com/cc3305/CVE-2024-238970githubgithub.com/ShieldAuth-PHP/PBL05-CVE-Analsys0githubgithub.com/slytechroot/CVE-2024-238970githubgithub.com/brandonhjh/Jenkins-CVE-2024-23897-Exploit-Demo0githubgithub.com/tvasari/CVE-2024-238970githubgithub.com/rivaedoardo62-boop/cve-2024-23897-jenkins-poc0githubgithub.com/Dungsocool/CVE-2024-238970githubgithub.com/razureink/cve-2024-23897-jenkins_lfi_reproduction0githubgithub.com/amalpvatayam67/day03-jenkins-238970githubgithub.com/hybinn/CVE-2024-238970githubgithub.com/aadi0258/Exploit-CVE-2024-238970githubgithub.com/vmc8ll/poc-CVE-2024-238970githubgithub.com/w41l3r/jenkins_scan0vulncheckvulncheck.com/xdb/6a08e72187dfnão verificadovulncheckvulncheck.com/xdb/3c4a94b767cbnão verificadovulncheckvulncheck.com/xdb/0f934ed4f2f3não verificadovulncheckvulncheck.com/xdb/e7f68889c96bnão verificadovulncheckvulncheck.com/xdb/ea61ab6382c6não verificadovulncheckvulncheck.com/xdb/6028cfd20f54não verificadovulncheckvulncheck.com/xdb/56f0947af384não verificadovulncheckvulncheck.com/xdb/29a3cbe431c7não verificadovulncheckvulncheck.com/xdb/59f5833a8dd0não verificadovulncheckvulncheck.com/xdb/020fda9d3348não verificadovulncheckvulncheck.com/xdb/0450095821bbnão verificadovulncheckvulncheck.com/xdb/5f45754388abnão verificadovulncheckvulncheck.com/xdb/58ee3e361a9cnão verificadovulncheckvulncheck.com/xdb/4ebb59b08827não verificadovulncheckvulncheck.com/xdb/16ccb84aebednão verificadovulncheckvulncheck.com/xdb/9fd38a912fe1não verificadovulncheckvulncheck.com/xdb/98fe8aa360aenão verificadovulncheckvulncheck.com/xdb/13fbb1e454d4não verificadovulncheckvulncheck.com/xdb/066b2623ad07não verificadovulncheckvulncheck.com/xdb/b79e6878d0b3não verificadovulncheckvulncheck.com/xdb/0013389cb2b5não verificadovulncheckvulncheck.com/xdb/f548a7c24191não verificadovulncheckvulncheck.com/xdb/2a862a5f18bfnão verificadovulncheckvulncheck.com/xdb/8a21c598c826não verificadovulncheckvulncheck.com/xdb/015a1eb7b8c5não verificadovulncheckvulncheck.com/xdb/2e81d41ecf10não verificadovulncheckvulncheck.com/xdb/bafdcb3d292cnão verificadovulncheckvulncheck.com/xdb/45c1b452f366não verificadovulncheckvulncheck.com/xdb/f520f4462657não verificadovulncheckvulncheck.com/xdb/97119087d54dnão verificadovulncheckvulncheck.com/xdb/56f3efc97d5anão verificadovulncheckvulncheck.com/xdb/f240e8d471e6não verificadovulncheckvulncheck.com/xdb/f5619d4199d8não verificadovulncheckvulncheck.com/xdb/20c72b87534cnão verificadovulncheckvulncheck.com/xdb/e82dc77437a5não verificadovulncheckvulncheck.com/xdb/93fd98979e35não verificadovulncheckvulncheck.com/xdb/8fb56cde4d69não verificadovulncheckvulncheck.com/xdb/c79b60996775não verificadovulncheckvulncheck.com/xdb/f917d38f15d9não verificadovulncheckvulncheck.com/xdb/2923262d1f2bnão verificadovulncheckvulncheck.com/xdb/ecedf1c97c4dnão verificadovulncheckvulncheck.com/xdb/65d508c63f7bnão verificadovulncheckvulncheck.com/xdb/eed3068dc5a8não verificadocve_referencepacketstormsecurity.com/files/176840/Jenkins-2.441-LTS-2.426.3-Arbitrary-File-Read.htmlnão verificadocve_referencepacketstormsecurity.com/files/176839/Jenkins-2.441-LTS-2.426.3-CVE-2024-23897-Scanner.htmlnão verificadovulncheckvulncheck.com/xdb/d47740f112e0não verificadovulncheckvulncheck.com/xdb/57f6cf67c94bnão verificadovulncheckvulncheck.com/xdb/01299e2b815anão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.