Jenkins закрывает 11 критических уязвимостей: угроза удаленного выполнения кода через LDAP и чтение файлов

Jenkins

Разработчики Jenkins выпустили внеочередное обновление безопасности, затрагивающее сразу одиннадцать популярных плагинов. В списке проблем - уязвимости, позволяющие злоумышленнику удаленно выполнить код на сервере, прочитать произвольные файлы из файловой системы или обойти проверки прав доступа. Наиболее опасные дыры связаны с механизмами аутентификации по протоколу LDAP (облегчённый протокол доступа к каталогам) и функциями встраивания изображений в письма.

Две уязвимости в плагинах LDAP и Active Directory: путь к полному контролю над Jenkins

В плагине LDAP (версии 807.v7d7de30930cf и старше) обнаружена проблема, вызванная слепым доверием к так называемым рефералам LDAP. Когда сервер Jenkins обращается к настроенному LDAP-серверу, последний может перенаправить запрос на другой ресурс, например, на RMI-сервер (протокол удаленного вызова методов). Если в памяти контроллера оказываются подходящие "гаджеты" для десериализации - то есть классы, которые при восстановлении объектов из потока данных могут выполнить произвольный код - атакующий получает возможность выполнить команды на уровне операционной системы. Аналогичная уязвимость затрагивает и плагин Active Directory (версии 2.41 и старше). В обоих случаях для эксплуатации требуется либо контроль над самим LDAP-сервером, либо возможность провести атаку "человек посередине" (перехват трафика). Разработчики исправили проблему, отключив следование рефералам по умолчанию. Администраторы, которые не могут немедленно обновить плагины, могут временно смягчить риск через системное свойство Java "hudson.plugins.active_directory.referral.ignore=true".

Произвольное чтение файлов через встроенные изображения в Email Extension

Плагин Email Extension (до версии 1933.v45cec755423f включительно) предлагал возможность встраивать изображения прямо в тело письма в формате base64 через атрибут "data-inline". При этом не проверялось, откуда берётся само изображение. Злоумышленник, способный управлять содержимым отправляемого письма, мог указать URL вида "file:///etc/passwd" - и Jenkins, обрабатывая такой запрос, отправлял в письме содержимое любого системного файла. Уязвимость получила высокий рейтинг опасности. В новой версии плагина (1933.1935.v276319e3cc47) функция полностью удалена. Пользователям, которым она необходима, предлагают описать свой сценарий использования в трекере ошибок проекта для возможного возврата с ограничениями.

Символьные ссылки в библиотеках Pipeline: Groovy Libraries

Ещё один высокорисковый вектор - плагин Pipeline: Groovy Libraries (версии 797.v90ea_a_9b_e45a_0 и старше). Он не блокировал создание символьных ссылок (симлинков) в общих библиотеках Groovy. Атакующий, имеющий возможность загрузить или изменить содержимое библиотеки, используемой в пайплайне, мог создать ссылку на чувствительный файл Jenkins (например, "/var/jenkins_home/credentials.xml") и прочитать его. Исправление в версии 798.v5cc688825312 добавляет запрет на символьные ссылки.

Путь к выполнению кода через подделку имени файла в Credentials Binding

Плагин Credentials Binding (версии 720.v3f6decef43ea и старше) неправильно обрабатывал имена файлов, которые загружаются как учётные данные. Это позволяло атакующему записать файл в произвольную директорию на узле, где выполняется задание. Если Jenkins настроен так, что малопривилегированный пользователь может создать учётную запись типа "файл" или "zip-файл" для задания на встроенном узле (built-in node), злоумышленник может перезаписать критический файл, например, библиотеку или конфигурацию, и в итоге получить выполнение кода. Исправление в версии 725.ve52b_2328a_fde усилило очистку путей.

Другие проблемы: от открытого перенаправления до межсайтовой подделки запроса

Помимо перечисленных, устранены ещё несколько уязвимостей среднего и высокого уровня. В плагине AppSpider (до 1.0.17) отсутствовала проверка прав в методе валидации формы, что позволяло пользователям с минимальными правами (Overall/Read) отправлять запросы на произвольные URL. Плагин Bitbucket OAuth (до 0.17) не ограничивал URL перенаправления после входа, открывая возможность фишинговых атак. GitHub Integration Plugin (до 0.7.3) и Multijob Plugin (до 662.vd2e0001f6b_b_d) не требовали POST-запросов, что делало их уязвимыми к межсайтовой подделке запроса (CSRF) - атакующий мог запустить сборку или возобновить неудавшиеся задания. Job Import Plugin (до 143.v044a_2e819b_27) позволял перечислять идентификаторы учётных данных, даже имея лишь право на чтение. И наконец, в плагине buildgraph-view (до 1.8) обнаружена хранимая межсайтовая подделка сценария (XSS): URL сборки не экранировался, что давало возможность внедрить вредоносный код в интерфейс Jenkins. Для этой проблемы исправление пока не выпущено, и разработчики лишь уведомили об уязвимости.

Что делать администраторам

Набор исправлений охватывает как критические ошибки, ведущие к полной компрометации сервера, так и менее опасные, но всё же способные облегчить атаку. Администраторам рекомендуется незамедлительно обновить все перечисленные плагины до последних версий. Особое внимание стоит уделить LDAP и Active Directory - отключение следования рефералам может потребовать настройки, но безопасность здесь важнее совместимости. Также полезно проверить, какие пользователи имеют право создавать или изменять shared libraries и учётные данные в формате файлов. Уязвимость в buildgraph-view пока не закрыта, поэтому его стоит временно отключить, если нет острой необходимости. Регулярное отслеживание бюллетеней безопасности Jenkins и быстрая установка обновлений остаются главной линией защиты.

Ссылки

Комментарии: 0