Security Week 2440: уязвимость CUPS переменной опасности

Security Week 2440: уязвимость CUPS переменной опасности
Главным событием прошлой недели в области информационной безопасности стало обнаружение четырех уязвимостей в службе печати Common Unix Printing System. Уязвимости актуальны для множества Linux- и Unix-дистрибутивов. И сами уязвимости, и способ их эксплуатации, разработанный первооткрывателем, исследователем Симоном Маргарителли, представляют большой интерес. Впрочем, помимо технических особенностей проблемы, на прошлой неделе также имела место драма со сложностями процесса ответственного раскрытия информации, а также с чрезмерным обсуждением персональных особенностей людей, вовлеченных в процесс.


Суть исследования Маргарителли приведена на скриншоте выше: в некоторых случаях мы можем обратиться к серверу, на котором установлен и запущен компонент cups-browsed, и без спроса добавить собственный принтер. С помощью всех остальных уязвимостей мы можем вызвать выполнение произвольного кода. Звучит страшновато, но для объективной оценки лучше сослаться на бюллетень компании Canonical: проблема затрагивает в основном десктопные системы и не может быть проэксплуатирована без участия пользователя. У этой простой формулировки есть множество дополнений мелким шрифтом, которые мы постараемся кратко изложить далее.

Сухие строчки бюллетеня Canonical заметно контрастируют с эмоциональным отчетом исследователя Симона Маргарителли. Путь к выполнению произвольного кода начался со сканирования открытых портов на ноутбуке со свежеустановленной ОС Ubuntu. Было обнаружено, что эта система держит открытым порт 631 по протоколу UDP и ответственность за это несет служба, известная как cups-browsed.

Она отвечает за автоматическое обнаружение и добавление принтеров. Подключение к порту позволяет инициировать добавление принтера извне. В конфигурационном файле cups-browsed есть возможность ввести ограничения на то, кому система будет отвечать по данному порту, но по умолчанию допускаются любые подключения. Вся эта функциональность является реализацией протокола Internet Printing Protocol .

Здесь Симон делает небольшое отступление: он применил метод фаззинга и нашел несколько случаев падения cups-browsed во время коммуникации по порту 631. Но последствия этих ошибок обработки данных он не расследовал: возможно, позднее они приведут к обнаружению иных уязвимостей. В основной ветке работы использовалась штатная функциональность данной подсистемы, которая позволила добавить ничего не подозревающему пользователю системы на базе Linux «левый принтер»:


Если вернуться к скриншоту в начале текста, можно отметить, что во время обращения к cups-browsed происходит также раскрытие информации о системе. Как минимум становится известна версия ядра Linux, а в некоторых случаях может раскрываться имя пользователя. Это первая из найденных уязвимостей, получившая идентификатор CVE-2024-47176 : то, что cups-browsed отвечает на любой запрос и позволяет произвольно добавлять принтеры в систему, уже является проблемой.

Что еще хуже, во время добавления принтера потенциальный злоумышленник контролирует несколько строк с его параметрами, которые не проверяются атакуемой системой. Это краткое описание еще двух уязвимостей в компонентах libcupsfilters и libppd, соответственно CVE-2024-47076 и CVE-2024-47175 . В CUPS также входит пакет cups-filters, одной из задач которого является конверсия поступающих на печать данных в «понятный» для принтера формат. В составе этого пакета имеется исполняемый файл foomatic-rip, в котором также обнаружилась проблема.

Преобразователи данных из одного формата в другой традиционно становятся целью атак. Не стал исключением и код foomatic-rip. В 2011 году в нем была закрыта уязвимость , приводящая к выполнению произвольного кода, если при печати использовался именно этот обработчик данных. Проблема в том, что этот патч не был портирован в основной код CUPS. Уязвимость по факту не была закрыта, и Маргарителли ей воспользовался. Это четвертая уязвимость в цепочке атаки, получившая идентификатор CVE-2024-47177 .

Собираем атаку. Через «не баг, но фичу» cups-browsed добавляем принтер в систему. На этом этапе нам вообще не требуется какое-либо действие пользователя, все происходит автоматически. На этапе добавления задаем параметры «принтера», включая обращение к foomatic-rip с произвольными параметрами. Эти «параметры» (в примере Симона: echo 1 >/tmp/PWNED) будут выполнены при попытке печати чего угодно на заранее установленный потенциальным злоумышленником «принтере».

А теперь поговорим о сопутствовавшей данному исследованию драме. Маргарителли, будучи достаточно эмоциональным человеком, явно был не в восторге от процесса коммуникации с мейнтейнерами CUPS. Обнаружение уязвимости и построение Proof of Concept заняли два дня, в то время как общение с ответственными за подсистему печати в общей сложности длилось больше трех недель (что вообще-то нельзя назвать чем-то из ряда вон выходящим). В результате еще до раскрытия информации 26 сентября ходили слухи о какой-то грандиозной уязвимости в Linux с рейтингом по шкале CVSS чуть ли не 9,9 балла из 10 возможных. Когда в реальности выяснилось, что речь идет все же об (а) относительно легкоустранимой и (б) затрагивающей сравнительно небольшое количество систем проблеме, наступила стадия легкого разочарования.

Маргарителли начали обвинять в хайпе на не столь существенной проблеме, он едко отвечал на подобные комментарии в соцсетях, нападал на СМИ, обвинял разработчиков в затягивании процесса и так далее. Среди всего этого неконструктивного диалога есть только один интересный момент: откуда взялась оценка уязвимости (четвертой, в cups-filters и foomatic-rip) в 9,9 балла? Маргарителли тут вроде бы ни при чем, оценку предложил в приватной переписке один из разработчиков Red Hat. Позднее она была пересмотрена до 9 баллов ровно.

То есть происходил приватный диалог в закрытой группе, в ходе которого кто-то предположил оценку уязвимости. Никто не собирался публиковать информацию, пока все стороны не придут к общему мнению, чтобы не вызывать излишнюю панику. Проблема в том, что эту переписку слили: 24 сентября в общий доступ попало приватное обсуждение уязвимости на площадке американского CERT. Впрочем днем ранее, 23 сентября, оценку уязвимости в 9,9 балла выложил в паблик сам Маргарителли, красочно расписав свою фрустрацию от затягивания процесса responsible disclosure. Вывод из этой истории заключается в том, что все стороны процесса при обсуждении уязвимости должны… ну, например, соблюдать спокойствие и проявлять выдержку. Предварительное обсуждение, в котором оценивается опасность свежеобнаруженной проблемы, должно быть приватным именно для того, чтобы не допускать излишних спекуляций.

А так получилось, что (из-за утечки с портала CERT VINCE) уязвимость раскрыли во всей полноте еще до выпуска патчей. Отметим, что по-настоящему эффект от обнаружения данной уязвимости пока трудно оценить. Относительно легко устраняется, возможно, только данная конкретная цепочка эксплуатации, в то время как внутри CUPS может быть множество других проблем.

По независимой оценке , 29 сентября в сети обнаруживались больше ста тысяч систем, отвечающих на запросы на порт 631 по протоколу UDP. Что это за системы — вопрос, который тоже предстоит исследовать. Одно дело, когда это относительно легко обновляемые настольные компьютеры под Linux (с белым IP), другое — если речь идет о роутерах с системой CUPS, которые будут обновляться очень медленно или вообще не получат патч. Относительно хорошей новостью является тот факт, что CUPS по умолчанию не устанавливается в серверных версиях ОС, но, возможно, и из этого правила могут быть какие-то немногочисленные исключения. В любом случае речь идет о достаточно серьезной прорехе в безопасности Unix-подобных систем.

Что еще произошло

Не менее впечатляющее исследование на прошлой неделе опубликовал исследователь Сэм Карри. Он и его команда нашли серьезную прореху в веб-сервисе компании KIA, который позволял удаленно разблокировать двери и запускать двигатель в большом числе автомобилей этого производителя. Для начала атаки требовалось знать только госномер автомобиля.

Исследователи «Лаборатории Касперского» подробно разбирают троян Necro, который распространялся вместе с рядом приложений в магазине Google Play.

ИИ-фича Windows Recall возвращается . Об этой функции и потенциальных проблемах с безопасностью собираемых ей данных (по сути, скриншотов экрана каждые несколько минут) мы писали ранее. После того как фича была раскритикована, Microsoft взяла паузу, и теперь снова готова внедрить ее в ближайшем будущем. С рядом улучшений безопасности: доступ к «истории активности пользователя» теперь будет возможен, только если подтверждено наличие самого пользователя у компьютера. Кроме того, Recall можно будет отключить и даже полностью удалить из системы.

Серьезная проблема (9 баллов по шкале CVSS) закрыта в наборе решений для виртуализации NVIDIA Container Toolkit. Уязвимость при худшем сценарии позволяет провести «побег из “песочницы”» и получить полный контроль над хостом.
cups-browsed cups-filters
Alt text

Кодовое слово дня — безопасность.

Узнай больше — подпишись на нас!