
Exploit de leitura arbitrária de arquivos sem autenticação para Jenkins CVE-2024-23897, com suporte a HTTPS e CSRF-crumb para contornar instâncias endurecidas.
cve-2024-23897-crumb.py — leitura arbitrária de arquivos não autenticada contra
Jenkins <= 2.441 / LTS <= 2.426.2 (corrigido em 2.442 / LTS 2.426.3).
Os PoCs amplamente utilizados — exploit-db 51993, xaitax/CVE-2024-23897, e o template nuclei do ProjectDiscovery — são apenas HTTP e não enviam crumb CSRF. Contra uma instância Jenkins que:
eles falham com 403 No valid crumb was included in the request, o que é
indistinguível de "corrigido" e produz um falso negativo.
Esta variante:
--httpJSESSIONID correspondente da página de
erro /cli não autenticada e os reproduz no canal duplex;Efeito líquido: deteta e explora instâncias endurecidas mas não corrigidas que as ferramentas públicas reportam como seguras.
python3 cve-2024-23897-crumb.py <host> [file] [--http] [--port N]
python3 cve-2024-23897-crumb.py jenkins.example.com
python3 cve-2024-23897-crumb.py jenkins.example.com /etc/shells
python3 cve-2024-23897-crumb.py 10.0.0.5 /etc/passwd --http --port 8080
Apenas biblioteca padrão do Python 3. Somente leitura: envia help "@<file>"; nada é
gravado, carregado ou executado.
help ecoa a(s) primeira(s) linha(s) de um ficheiro — a primeira linha na
mensagem Too many arguments: mais as linhas seguintes no campo (default: ...).
Funciona bem em ficheiros cuja primeira linha contém vários campos ou é longa:
/etc/passwd, /etc/shells/proc/net/arp, /proc/net/route (IPs internos, gateway, MACs)/proc/mounts (layout de contentores/armazenamento)Ficheiros com uma primeira linha muito curta (ex.: /etc/hostname) caem num
caminho de erro de autenticação e não retornam nada via help. A extração do
ficheiro completo usa o comando connect-node em vez disso, mas isso requer que o
utilizador anónimo tenha Overall/Read — frequentemente não concedido, caso em que
a primitiva de leitura ainda funciona mas apenas as primeiras linhas são retornadas.
Aponte-o apenas para hosts que está autorizado a testar. O mesmo canal expõe
comandos CLI que alteram o estado (enable-job, reload-configuration, …); este
script utiliza deliberadamente apenas o caminho de leitura help.