← volver
CVE-2024-23897criticalbajo ataqueransomwareCWE-27

CVE-2024-23897

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 9.8epss 100%
de la publicación al arma0 días
Publicada en NVD24 ene
1ª PoC23 ene
metasploit24 ene
CISA KEV+208d
probabilidad de explotación
100%top 1% de las CVE
explotación observada
CISA + VulnCheck
95 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2024-09-09

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

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
Jenkins 2.441 e anteriores; Jenkins LTS 2.426.2 e anteriores.
Corregidas en
Jenkins 2.442; Jenkins LTS 2.426.3.

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
Jenkins Project · Jenkins
PoCs públicas encontradas95
exploitdbwww.exploit-db.com/exploits/51993no 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/Ap0dexMe0/CVE-2024-238972githubgithub.com/vmtyan/poc-cve-2024-238972githubgithub.com/Fineken/Jenkins-CVE-2024-23897-Lab2githubgithub.com/JAthulya/CVE-2024-238971githubgithub.com/Nebian/CVE-2024-238971githubgithub.com/dheeraj-jayaswal/CICD-Goat-Vapt-Writeup1githubgithub.com/jopraveen/CVE-2024-238971githubgithub.com/AbraXa5/Jenkins-CVE-2024-238971githubgithub.com/WLXQqwer/Jenkins-CVE-2024-23897-0githubgithub.com/B4CK4TT4CK/CVE-2024-238970githubgithub.com/Surko888/Surko-Exploit-Jenkins-CVE-2024-238970githubgithub.com/cc3305/CVE-2024-238970githubgithub.com/ShieldAuth-PHP/PBL05-CVE-Analsys0githubgithub.com/pulentoski/CVE-2024-23897-Arbitrary-file-read0githubgithub.com/ifconfig-me/CVE-2024-238970githubgithub.com/slytechroot/CVE-2024-238970githubgithub.com/brandonhjh/Jenkins-CVE-2024-23897-Exploit-Demo0githubgithub.com/tvasari/CVE-2024-238970githubgithub.com/vmc8ll/poc-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/w41l3r/jenkins_scan0githubgithub.com/hybinn/CVE-2024-238970githubgithub.com/aadi0258/Exploit-CVE-2024-238970githubgithub.com/r0xDB/CVE-2024-238970githubgithub.com/harekrishnarai/CVE-2024-23897-test-windows0githubgithub.com/murataydemir/CVE-2024-238970vulncheckvulncheck.com/xdb/f520f4462657no verificadovulncheckvulncheck.com/xdb/97119087d54dno verificadovulncheckvulncheck.com/xdb/56f3efc97d5ano verificadovulncheckvulncheck.com/xdb/f240e8d471e6no verificadovulncheckvulncheck.com/xdb/f5619d4199d8no verificadovulncheckvulncheck.com/xdb/20c72b87534cno verificadovulncheckvulncheck.com/xdb/e82dc77437a5no verificadovulncheckvulncheck.com/xdb/93fd98979e35no verificadovulncheckvulncheck.com/xdb/8fb56cde4d69no verificadovulncheckvulncheck.com/xdb/c79b60996775no verificadovulncheckvulncheck.com/xdb/f917d38f15d9no verificadovulncheckvulncheck.com/xdb/2923262d1f2bno verificadovulncheckvulncheck.com/xdb/ecedf1c97c4dno verificadovulncheckvulncheck.com/xdb/65d508c63f7bno verificadovulncheckvulncheck.com/xdb/eed3068dc5a8no verificadovulncheckvulncheck.com/xdb/57f6cf67c94bno verificadovulncheckvulncheck.com/xdb/01299e2b815ano verificadovulncheckvulncheck.com/xdb/6a08e72187dfno verificadocve_referencepacketstormsecurity.com/files/176840/Jenkins-2.441-LTS-2.426.3-Arbitrary-File-Read.htmlno verificadocve_referencepacketstormsecurity.com/files/176839/Jenkins-2.441-LTS-2.426.3-CVE-2024-23897-Scanner.htmlno verificadovulncheckvulncheck.com/xdb/d47740f112e0no verificadovulncheckvulncheck.com/xdb/3c4a94b767cbno verificadovulncheckvulncheck.com/xdb/b4eb66bed0a1no verificadovulncheckvulncheck.com/xdb/0f934ed4f2f3no verificadovulncheckvulncheck.com/xdb/e7f68889c96bno verificadovulncheckvulncheck.com/xdb/ea61ab6382c6no verificadovulncheckvulncheck.com/xdb/6028cfd20f54no verificadovulncheckvulncheck.com/xdb/56f0947af384no verificadovulncheckvulncheck.com/xdb/29a3cbe431c7no verificadovulncheckvulncheck.com/xdb/59f5833a8dd0no verificadovulncheckvulncheck.com/xdb/020fda9d3348no verificadovulncheckvulncheck.com/xdb/0450095821bbno verificadovulncheckvulncheck.com/xdb/5f45754388abno verificadovulncheckvulncheck.com/xdb/58ee3e361a9cno verificadovulncheckvulncheck.com/xdb/4ebb59b08827no verificadovulncheckvulncheck.com/xdb/16ccb84aebedno verificadovulncheckvulncheck.com/xdb/9fd38a912fe1no verificadovulncheckvulncheck.com/xdb/98fe8aa360aeno verificadovulncheckvulncheck.com/xdb/13fbb1e454d4no verificadovulncheckvulncheck.com/xdb/066b2623ad07no verificadovulncheckvulncheck.com/xdb/b79e6878d0b3no verificadovulncheckvulncheck.com/xdb/0013389cb2b5no verificadovulncheckvulncheck.com/xdb/f548a7c24191no verificadovulncheckvulncheck.com/xdb/2a862a5f18bfno verificadovulncheckvulncheck.com/xdb/8a21c598c826no verificadovulncheckvulncheck.com/xdb/015a1eb7b8c5no verificadovulncheckvulncheck.com/xdb/2e81d41ecf10no verificadovulncheckvulncheck.com/xdb/bafdcb3d292cno verificadovulncheckvulncheck.com/xdb/45c1b452f366no verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.