
Nicht authentifizierter Exploit zum beliebigen Lesen von Dateien für Jenkins CVE-2024-23897, mit HTTPS- und CSRF-Crumb-Unterstützung, um gehärtete Instanzen zu umgehen.
cve-2024-23897-crumb.py — unauthentifiziertes beliebiges Dateilesen gegen
Jenkins <= 2.441 / LTS <= 2.426.2 (behoben in 2.442 / LTS 2.426.3).
Die weit verbreiteten PoCs — exploit-db 51993, xaitax/CVE-2024-23897 und die ProjectDiscovery-nuclei-Vorlage — sind nur HTTP-basiert und senden keinen CSRF-crumb. Gegen eine Jenkins-Instanz, die:
schlagen sie mit 403 No valid crumb was included in the request fehl, was
nicht von „gepatcht" zu unterscheiden ist und ein falsches Negativ erzeugt.
Diese Variante:
--http);JSESSIONID aus der unauthentifizierten
/cli-Fehlerseite und spielt sie dann auf dem Duplex-Kanal ab;Nettoeffekt: Sie erkennt und nutzt gehärtete, aber ungepatchte Instanzen aus, die die öffentlichen Tools als sicher melden.
python3 cve-2024-23897-crumb.py <host> [datei] [--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
Nur Python-3-Standardbibliothek. Schreibgeschützt: sendet help "@<datei>"; nichts wird
geschrieben, hochgeladen oder ausgeführt.
help gibt die führende(n) Zeile(n) einer Datei zurück — die erste Zeile in der
Too many arguments:-Meldung plus folgende Zeilen im (default: ...)-Feld.
Funktioniert gut bei Dateien, deren erste Zeile mehrere Felder enthält oder lang ist:
/etc/passwd, /etc/shells/proc/net/arp, /proc/net/route (interne IPs, Gateway, MACs)/proc/mounts (Container-/Speicherlayout)Dateien mit einer sehr kurzen ersten Zeile (z. B. /etc/hostname) fallen auf einen
Auth-Fehlerpfad zurück und liefern über help nichts zurück. Die Extraktion der gesamten Datei
verwendet stattdessen den connect-node-Befehl, aber das erfordert, dass der anonyme Benutzer
Overall/Read besitzt — oft nicht gewährt, in welchem Fall das Leseprimitiv trotzdem funktioniert,
aber nur die führenden Zeilen zurückkommen.
Richten Sie es nur an Hosts, die Sie testen dürfen. Derselbe Kanal legt
zustandsändernde CLI-Befehle offen (enable-job, reload-configuration, …); dieses
Skript verwendet absichtlich nur den schreibgeschützten help-Pfad.