
Неаутентифицированный эксплойт произвольного чтения файлов для Jenkins CVE-2024-23897, с поддержкой HTTPS и CSRF-crumb для обхода усиленных экземпляров.
cve-2024-23897-crumb.py — неаутентифицированное произвольное чтение файлов в
Jenkins <= 2.441 / LTS <= 2.426.2 (исправлено в 2.442 / LTS 2.426.3).
Широко используемые PoC — exploit-db 51993, xaitax/CVE-2024-23897 и шаблон nuclei от ProjectDiscovery — работают только по HTTP и не отправляют CSRF-crumb. Против экземпляра Jenkins, который:
они завершаются ошибкой 403 No valid crumb was included in the request, которую
невозможно отличить от «исправлено», что даёт ложноотрицательный результат.
Этот вариант:
--httpJSESSIONID с неаутентифицированной
страницы ошибки /cli, а затем воспроизводит их на дуплексном канале;Итоговый эффект: обнаруживает и эксплуатирует усиленные, но не исправленные экземпляры, которые публичные инструменты помечают как безопасные.
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
Только стандартная библиотека Python 3. Только чтение: отправляет help "@<file>"; ничего
не записывается, не загружается и не выполняется.
help выводит первую(-ые) строку(-и) файла — первую строку в сообщении
Too many arguments: плюс последующие строки в поле (default: ...).
Хорошо работает с файлами, первая строка которых содержит несколько полей или является длинной:
/etc/passwd, /etc/shells/proc/net/arp, /proc/net/route (внутренние IP, шлюз, MAC-адреса)/proc/mounts (компоновка контейнеров/хранилища)Файлы с очень короткой первой строкой (например, /etc/hostname) попадают на путь
ошибки аутентификации и ничего не возвращают через help. Полное извлечение файла
использует команду connect-node, но для этого анонимному пользователю требуется
право Overall/Read — часто не выдаётся, и в этом случае примитив чтения всё равно
работает, но возвращаются только первые строки.
Направляйте его только на хосты, которые вам разрешено тестировать. Тот же канал
открывает доступ к изменяющим состояние командам CLI (enable-job, reload-configuration, …);
этот скрипт намеренно использует только путь чтения help.