Автор межсетевого экрана Симоне Маргарителли обнаружил опасные уязвимости в системе CUPS, которые позволяют проводить удалённые атаки на операционные системы GNU/Linux, Solaris и FreeBSD. Эти уязвимости позволяют злоумышленникам выполнять код без необходимости аутентификации, изменяя параметры принтера или добавляя фальшивые принтеры, при этом жертва должна начать процесс печати.

Злоумышленники могут осуществить атаку, только если включён процесс cups-browsed. Для проверки его состояния используйте команду «sudo systemctl status cups-browsed». Проблема затрагивает уязвимые версии cups-filters, libcupsfilters, libppd и cups-browsed. Рекомендуется закрыть UDP-порт 631, отключить cups-browsed или настроить BrowseRemoteProtocols на значение «none» для защиты.

Обнаруженные уязвимости:

  • в cups-browsed (CVE-2024-47176) создает сокет на порту 631 для принятия IPP-запросов, что позволяет атакующему добавлять свои принтеры.
  • в foomatic-rip (CVE-2024-47177) обеспечивает выполнение кода через параметр FoomaticRIPCommandLine в PPD-файле, переданном посредством cups-browsed.
  • в libppd (CVE-2024-47175) позволяет вставлять произвольные данные в PPD-файл с использованием символа новой строки.
  • в libcupsfilters (CVE-2024-47076) связана с отсутствием проверки значений от внешнего IPP-сервера, что даёт возможность обрабатывать произвольные IPP-атрибуты.

Сценарий атаки:

  1. Злоумышленник устанавливает IPP-сервер.

  2. Отправляет жертве UDP-пакет с ссылкой на свой принтер.

  3. Система жертвы подключается к IPP-серверу и запрашивает атрибуты принтера.

  4. IPP-сервер возвращает PPD-файл с изменённым атрибутом, что приводит к выполнению вредоносной команды.

Исследователь потратил пару дней на выявление уязвимостей и 22 дня на обсуждение с разработчиками, которые не сразу признали серьёзность проблемы. Динамика изменилась после публичного обсуждения. На ситуация повлияла и утечка информации — данные об эксплоите появились в открытом доступе на breachforums.st.

В настоящее время уже опубликован патч CUPS версии 2.4.11