Отдалечено експлоатирани уязвимости в сървъра за печат CUPS

Симоне Маргарителли (Simone Margaritelli), автор на междинния защитен екран OpenSnitch и мрежовия анализатор bettercap, преждевременно разкри информация относно преди анонсираните критични уязвимости, които позволяват отдалечени атаки срещу дистрибуции на GNU/Linux, Solaris, FreeBSD и някои други BSD системи. Публикацията първоначално беше планирана за 6 октомври, но поради изтичане на информация се наложи тя да бъде публикувана предсрочно, преди повечето дистрибуции да успеят да подготвят актуализации на пакетите. Уязвимостите засягат сървъра за печат CUPS и позволяват отдалечено, без да преминават през удостоверяване, изпълнение на код в системата.

Изследователят, който е открил проблема, е подготвил работен прототип на експлойт, използващ комбинация от няколко уязвимости и позволяващ отдалечено изпълнение на код с правата на процеса за обработка на задания за печат CUPS (обикновено това е потребителят „lp“). Експлойтът позволява незабелязано замяна на параметрите на потребителския принтер или добавяне на нов принтер, свързан с активния атакуващ IPP сървър, който предоставя специално оформено PPD описание на принтера. Обработката на този PPD по време на стартиране на работа за печат води до изпълнение на кода на атакуващия (необходимо е жертвата да иницира печат на подменения или заменен от атакуващия принтер).

Атаката подлежи на системи с сървъра. печата CUPS и активен процес cups-browsed, който приема мрежови връзки на 631 порт (UDP). Атаката може да бъде извършена и от локална мрежа, в която се използват протоколи сървър за печат zeroconf, mDNS или DNS-SD. Уязвими са само конфигурации на cups-browsed, в които в файла /etc/cups/cups-browsed.conf в параметъра BrowseRemoteProtocols е зададена стойността „cups“. В дистрибуции с systemd проверката на употребата на услугата cups-browsed може да се извърши с командата „sudo systemctl status cups-browsed“.

Уязвимостта се проявява във всички печатни системи, базирани на CUPS, в които се използват уязвими версии на пакетите cups-filters, libcupsfilters, libppd и cups-browsed. Понастоящем корекциите са налични само под формата на пачове (1, 2, 3) — актуалните версии на cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 и cups-browsed 2.0.1 са податливи на уязвимости. В дистрибутивите проблемът остава нерешен, а актуализациите могат да бъдат проследени на следните страници: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Като обходен начин за защита, преди инсталацията на актуализацията, може да се затвори достъпът до UDP порта 631 за външни мрежи, да се деактивира услугата cups-browsed или да се зададе настройката BrowseRemoteProtocols на стойност „none“.

Установени уязвимости:

  • CVE-2024-47176 — уязвимост в процеса cups-browsed, който създава мрежов сокет, приемащ връзки на порт 631, свързан към всички налични в системата мрежови интерфейси и приемащ IPP запитвания „Get-Printer-Attributes“ от всякакви външни системи. Чрез манипулация с този сервиз може да се добави принтер в системата, контролиран от атакуващия, и да се експлоатира чрез предаване на PPD конфигурацията на уязвимостите в други компоненти на CUPS.
  • CVE-2024-47177 — уязвимост в обработката на foomatic-rip от пакета cups-filters, която позволява изпълнение на код чрез предаване на параметъра FoomaticRIPCommandLine в PPD файла, който атакуващият може да предаде благодарение на описаната по-горе уязвимост в cups-browsed. Указаните в параметъра FoomaticRIPCommandLine shell команди се изпълняват директно, без оглед на това, че параметърът може да бъде зададен от външен файл. Например, за запис в файл /tmp/VULNERABLE може да се зададе „FoomaticRIPCommandLine: „echo 1 > /tmp/VULNERABLE“.
  • CVE-2024-47175 — уязвимост в libppd, причинена от липсата на проверка на валидността на стойността ppdCreatePPDFromIPP2 при запис на IPP атрибутите в временен PPD файл. Проблемът позволява подмяна на произволни данни в резултантния PPD файл чрез прикрепяне на атрибути, използвайки символа за пренос на реда. Например, може да се заобиколи проверката и заедно с разрешените атрибути да се подмени атрибутът FoomaticRIPCommandLine за експлоатация на споменатата по-горе уязвимост в cups-filters.
  • CVE-2024-47076 — уязвимост в библиотеката libcupsfilters от пакета cups-filters, свързана с липсата на проверка на стойностите cfGetPrinterAttributes5, върнати от външен IPP-сервер, което дава на атакуващия възможността да организира обработката на произволни IPP-атрибути в други подсистеми на CUPS, например при генериране на PPD-файлове.

Сценарият на атаката срещу CUPS се състои в следните стъпки:

  • Разгръщане на собствен IPP-сервер от атакуващия.
  • Изпращане на UDP-пакет до жертвата с линк към принтера, свързан с активния IPP-сервер, управляван от атакуващия.
  • След получаване на този пакет, системата на жертвата се свързва с IPP-сервера на атакуващия и иска атрибутите на принтера.
  • В отговор на запитването на жертвата, IPP-сервера на атакуващия връща PPD-файл с атрибути, сред които е атрибутът FoomaticRIPCommandLine. Този атрибут се присъединява към един от допустимите атрибути, използвайки символа «\n» в една линия (например, «cupsPrivacyURI: «https://www.google.com/\n*FoomaticRIPCommandLine: «), което позволява да се заобиколи проверката и води до записа на FoomaticRIPCommandLine като отделен атрибут при запазване на получените данни във временен файл.
  • В резултат на обработката на предадените атрибути в системата на жертвата се създава PPD-файл: … *cupsSNMPSupplies: False *cupsLanguages: «en» *cupsPrivacyURI: «https://www.google.com/» *FoomaticRIPCommandLine: «echo 1 > /tmp/I_AM_VULNERABLE» *cupsFilter2 : «application/pdf application/vnd.cups-postscript 0 foomatic-rip» *cupsSingleFile: True *cupsFilter2: «application/vnd.cups-pdf application/pdf 0 -» …
  • При печат на подставения от атакуващия принтер в системата на жертвата ще бъде изпълнена командата «echo 1 > /tmp/I_AM_VULNERABLE»

Изследователят, открил уязвимостите, отбелязва, че му е отнело няколко дни, за да намери уязвимостта, но след това последвало продължителна кореспонденция от 22 дни с разработчиците на проекта OpenPrinting, опитвайки се да ги убеди в значимостта на проблема и необходимостта от подготовка на пачове. Дискусията е изпаднала в спорове дали изобщо да се поправят посочените проблеми, а ситуацията е успяла да се обърне само след повдигане на публичен шум за открития критичен проблем. Интересно е също появата на изтичане на информация, при което предадените в CERT конфиденциален отчет и експлойт са се появили на форума breachforums.st в открит достъп, въпреки наложеното ембарго върху разкритие на информация.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster