
CVE-2024-23897: Leitura Arbitrária de Arquivos no Jenkins Leva a RCE
CVE-2024-23897: Leitura Arbitrária de Arquivos no Jenkins Leva a RCE 🎯 Produtos e Versões Afetados
Produto: Jenkins (servidor de Integração Contínua/Entrega Contínua)
Versões: Jenkins 2.441 e anteriores, Jenkins LTS 2.426.2 e anteriores
Corrigido em: Jenkins 2.442, Jenkins LTS 2.426.3
📝 Descrição
O CVE-2024-23897 é uma vulnerabilidade crítica no Jenkins que permite que atacantes não autenticados leiam arquivos arbitrários no sistema de arquivos do controlador Jenkins. A vulnerabilidade existe porque o Jenkins não desativa um recurso do seu analisador de comandos CLI que substitui um caractere '@' seguido por um caminho de arquivo pelo conteúdo do arquivo.
Essa falha pode levar à execução remota de código (RCE) quando combinada com outras técnicas, tornando-a particularmente perigosa para organizações que utilizam Jenkins em seus pipelines de CI/CD. 🔍 Detalhes da Vulnerabilidade Causa Raiz
A vulnerabilidade decorre da função expandAtFiles() na classe org.kohsuke.args4j.CmdLineParser. Ao analisar argumentos da CLI, se o analisador encontrar um símbolo '@' seguido por um caminho de arquivo, ele lê e expande o conteúdo desse arquivo. Vetor de Ataque
Atacantes podem explorar essa vulnerabilidade usando a interface CLI do Jenkins sem autenticação: bash
java -jar jenkins-cli.jar -s http://target-jenkins-server:8080/ help @/etc/passwd
Análise Técnica Limitações de Leitura de Arquivos
Sem autenticação: Apenas as primeiras 3 linhas do arquivo podem ser lidas (dependendo do comando CLI)
Com permissão 'Overall/Read': O conteúdo completo do arquivo pode ser lido
Arquivos binários: Podem ser extraídos, mas podem ser afetados por problemas de codificação (Windows-1252 no Windows produz melhores resultados que UTF-8 no Linux)
Expansão da Superfície de Ataque
Uma vez obtida a leitura de arquivos, os atacantes podem escalar para ataques mais graves:
Extrair Credenciais:
Ler /var/jenkins_home/credentials.xml para obter credenciais criptografadas
Ler /var/jenkins_home/secrets/master.key e hudson.util.Secret para descriptografia
Descriptografar credenciais usando o console de script do Jenkins: println(Hudson.util.Secret.fromString("{XXX=}").getPlainText())
Forjar Cookies "Remember-me":
Obter acesso administrativo forjando cookies de autenticação
Executar Código Arbitrário:
Alcançar RCE por meio de vetores de Resource Root URL, XSS ou CSRF
💥 Impacto Impacto Imediato
Confidencialidade: Divulgação completa de todos os arquivos no servidor Jenkins (código-fonte, credenciais, chaves SSH, tokens)
Integridade: Atacantes podem modificar builds, pipelines e configurações
Disponibilidade: Potencial para negação de serviço ou implantação de ransomware
Exploração no Mundo Real
Esta vulnerabilidade tem sido ativamente explorada no mundo real:
Adicionada ao catálogo de Vulnerabilidades Exploradas Conhecidas (KEV) da CISA
Usada por gangues de ransomware (RansomEXX) para comprometer infraestruturas
Explorada pelo ator de ameaças IntelBroker para roubar repositórios do GitHub e comprometer provedores de serviços de TI
🔧 Detecção Indicadores de Comprometimento
Tentativas de exploração bem-sucedidas podem ser detectadas por meio de:
Padrões de Requisições HTTP: texto
POST /cli?remoting=false HTTP/1.1 Content-type: application/octet-stream [binary payload containing @/path/to/file]
Exemplos Típicos de Payload:
@/etc/passwd
@/var/jenkins_home/secrets/initialAdminPassword
@/etc/os-release
Consulta de Detecção do Splunk texto
index=web uri="/cli?remoting=false" http_method=POST http_status=200
🛡️ Mitigação Correção Oficial
Atualize para as versões corrigidas:
Jenkins ≥ 2.442
Jenkins LTS ≥ 2.426.3
Mitigação Temporária
Se não for possível aplicar o patch imediatamente:
Desative o acesso à CLI do Jenkins
Defina a propriedade de sistema Java: hudson.cli.CLICommand.allowAtSyntax=false
Restrinja o acesso de rede à interface administrativa do Jenkins
Implemente regras de WAF para bloquear requisições contendo padrões @/
🔗 Referências
Entrada NVD
Aviso de Segurança do Jenkins
Catálogo KEV da CISA
Pesquisa Splunk
Página Tenable do CVE
📦 Compilação e Execução bash
go build -o jenkins-cve-2024-23897 exploit.go
./jenkins-cve-2024-23897 http://target-jenkins:8080 /etc/passwd
go run exploit.go http://target-jenkins:8080 /etc/passwd
🎯 Exemplos de Uso bash
./jenkins-cve-2024-23897 http://jenkins.internal:8080 /etc/passwd ./jenkins-cve-2024-23897 http://localhost:8080 /var/jenkins_home/secrets/initialAdminPassword
./jenkins-cve-2024-23897 http://win-jenkins:8080 C:/Windows/win.ini
⚙️ Como Funciona
Inicialização da Sessão: Gera um ID de sessão exclusivo de 20 bytes
Construção do Payload: Constrói payload binário com a estrutura help @/path/to/file
Fase de Upload: Envia o payload para o endpoint CLI do Jenkins
Fase de Download: Recupera o conteúdo do arquivo da resposta
Saída: Exibe o conteúdo do arquivo ou mensagem de erro
📊 Recursos
Implementação em Go puro - Sem dependências externas
Multiplataforma - Funciona em Windows, Linux, macOS
Timeouts configuráveis - Ajustáveis para redes lentas
Tratamento de erros limpo - Mensagens de erro detalhadas
Seguro para binários - Lida com arquivos de texto e binários
⚠️ Notas Importantes
Somente para fins educacionais - Use apenas em sistemas que você possui ou tem permissão para testar
Leituras não autenticadas - Sem autenticação, apenas as primeiras ~3 linhas podem ser lidas
Arquivos binários - Podem ser afetados por problemas de codificação (use um alvo Windows para melhor extração de binários)