Разработчик популярного открытого ПО для автоматизации CI/CD-процессов (Continuous Integration/Continuous Delivery) Jenkins исправил 9 уязвимостейв системе безопасности, включая одну критическую – CVE-2024-23897, которая приводит к удаленному выполнению кода (Remote Code Execution, RCE).
CVE-2024-23897описана как уязвимость чтения произвольного файла через встроенный интерфейс командной строки (Jenkins CLI). Особенностью парсера команд, использующегося в Jenkins, является замена символа “@” на содержимое файла, если путь к файлу следует за этим символом в аргументе команды. Эта функция активирована по умолчанию в версиях Jenkins 2.441 и более ранних, а также в LTS 2.426.2 и более ранних, и до недавнего времени не была отключена.
Эксплуатация уязвимости позволяет злоумышленнику читать произвольные файлы в файловой системе контроллера Jenkins, используя стандартную кодировку символов процесса контроллера. При наличии у атакующего прав “Overall/Read” он может читать файлы целиком, а без таких прав – только первые 3 строки файлов в зависимости от команд CLI.
Кроме того, недостаток может быть использован для чтения бинарных файлов, содержащих криптографические ключи, хотя и с определенными ограничениями. Извлечение секретов открывает путь к различным атакам:
- Удаленное выполнение кода через корневые URL-адреса ресурсов;
- Удаленное выполнение кода через cookie-файл “Запомнить меня”;
- Удаленное выполнение кода с помощью XSS-атак (Cross-Site Scripting, XSS) через журналы сборки;
- Удаленное выполнение кода через обход защиты CSRF (Cross-Site Request Forgery);
- Расшифровка секретов, хранящихся в Jenkins;
- Удаление любого элемента в Jenkins;
- Загрузка дампа кучи Java.
Исследователь безопасности из компании Checkmarx Янив Низри получил признание за обнаружение и сообщение об уязвимости, которая была устранена в версиях Jenkins 2.442 и LTS 2.426.3 путём отключения функции синтаксического анализа команд. В качестве временного решения, пока исправление не будет применено, рекомендуется отключить доступ к CLI.