Vulnerabilități exploatabile de la distanță în serverul de imprimare CUPS

Simone Margaritelli, autorul firewall-ului OpenSnitch și al analizadorului de rețea bettercap, a dezvăluit prematur informații despre vulnerabilitățile critice anunțate anterior, care permit atacuri la distanță asupra distribuțiilor GNU/Linux, Solaris, FreeBSD și anumitor alte sisteme BSD. Publicarea inițială a fost planificată pentru 6 octombrie, dar din cauza scurgerii de informații, datele au fost publicate anticipat, înainte ca majoritatea distribuțiilor să aibă timp să pregătească actualizările pachetelor. Vulnerabilitățile vizează serverul de imprimare CUPS și permit executarea de cod în sistem la distanță fără a necesita autentificare.

Cercetătorul care a identificat problema a pregătit un prototip funcțional al unui exploit, care folosește o combinație de mai multe vulnerabilități și permite executarea de cod la distanță cu drepturile procesului de gestionare a sarcinilor de imprimare CUPS (de obicei, acesta este utilizatorul «lp»). Exploit-ul permite înlocuirea silențioasă a parametrilor imprimantei utilizatorului sau adăugarea unei noi imprimante, legată de serverul IPP al atacatorului, care furnizează o descriere PPD special concepută. Procesarea acestui PPD în timpul inițierii lucrării de imprimare duce la executarea codului atacatorului (este necesar ca victima să inițieze imprimarea pe imprimanta înlocuită sau substituită de atacator).

Sistemele cu serverul imprimarea CUPS și cu procesul cups-browsed activat, care acceptă conexiuni de rețea pe portul 631 (UDP) sunt vulnerabile. Atacul poate fi, de asemenea, efectuat din rețeaua locală, în care se utilizează protocoale pentru imprimare, cum ar fi zeroconf, mDNS sau DNS-SD. Sunt vulnerabile doar configurațiile cups-browsed în care în fișierul /etc/cups/cups-browsed.conf, parametrul BrowseRemoteProtocols are valoarea «cups». În distribuțiile cu systemd, se poate verifica utilizarea serviciului cups-browsed cu comanda «sudo systemctl status cups-browsed». server печати используются протоколы zeroconf, mDNS или DNS-SD. Уязвимы только конфигурации cups-browsed в которых в файле /etc/cups/cups-browsed.conf в параметре BrowseRemoteProtocols указано значение «cups». В дистрибутивах с systemd проверить использование сервиса cups-browsed можно командой «sudo systemctl status cups-browsed».

Vulnerabilitatea se manifestă în toate sistemele de imprimare bazate pe CUPS, în care sunt utilizate versiuni vulnerabile ale pachetelor cups-filters, libcupsfilters, libppd și cups-browsed. Corecțiile sunt disponibile momentan doar sub formă de patch-uri (1, 2, 3) — versiunile actuale cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 și cups-browsed 2.0.1 sunt vulnerabile. În distribuțiile problema rămâne nerezolvată, iar urmărirea apariției actualizărilor se poate face pe următoarele pagini: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Ca o soluție temporară de protecție până la instalarea actualizării, se poate restricționa accesul la portul UDP 631 pentru rețelele externe, dezactiva serviciul cups-browsed sau seta configurația BrowseRemoteProtocols la valoarea „none”.

Vulnerabilitățile identificate:

  • CVE-2024-47176 — vulnerabilitate în procesul cups-browsed, care creează un socket de rețea ce acceptă conexiuni pe portul 631, fiind atașat la toate interfețele de rețea existente în sistem și acceptând cereri IPP „Get-Printer-Attributes” din orice sistem extern. Prin manipularea acestui serviciu se poate obține adăugarea în sistem a unei imprimante controlate de atacator, exploatând prin transmiterea configurației PPD vulnerabilităților din alte componente CUPS.
  • CVE-2024-47177 — vulnerabilitate în handler-ul foomatic-rip din setul cups-filters, care permite executarea de cod prin transmiterea parametrului FoomaticRIPCommandLine în fișierul PPD, pe care atacatorul îl poate transmite datorită vulnerabilității anterioare în cups-browsed. Comenzile shell specificate în parametrul FoomaticRIPCommandLine sunt executate ca atare, fără a ține cont că parametrul poate fi setat de o terță parte. De exemplu, pentru a scrie în fișierul /tmp/VULNERABLE se poate specifica „FoomaticRIPCommandLine: „echo 1 > /tmp/VULNERABLE”.
  • CVE-2024-47175 — vulnerabilitate în libppd, cauzată de absența verificării corectitudinii valorii ppdCreatePPDFromIPP2 la scrierea atributelor IPP într-un fișier temporar PPD. Problema permite substituirea unor date arbitrare în fișierul PPD rezultat prin atașarea atributelor folosind simbolul de linie nouă. De exemplu, se poate ocoli verificarea și, împreună cu atributele permise, se poate atașa atributul FoomaticRIPCommandLine pentru a exploata vulnerabilitatea menționată anterior în cups-filters.
  • CVE-2024-47076 — o vulnerabilitate în biblioteca libcupsfilters din pachetul cups-filters, legată de lipsa verificării valorilor cfGetPrinterAttributes5 returnate de un server IPP extern, ceea ce permite atacatorului să organizeze procesarea atributelor IPP arbitrare în alte subsisteme CUPS, de exemplu, la generarea fișierelor PPD.

Scenariul atacului pe CUPS se rezumă la următorii pași:

  • Dezvoltarea de către atacator a propriului server IPP.
  • Trimiterea victimei a unui pachet UDP cu un link către imprimanta asociată serverului IPP rulat de atacator.
  • După primirea acestui pachet, sistemul victimei se conectează la serverul IPP al atacatorului și solicită atributele imprimantei.
  • Ca răspuns la solicitarea victimei, serverul IPP al atacatorului returnează un fișier PPD cu atribute, printre care se menționează atributul FoomaticRIPCommandLine. Acest atribut este atașat la unul dintre atributele permise, folosind simbolul «\n» într-o singură linie (de exemplu, «cupsPrivacyURI: «https://www.google.com/\n*FoomaticRIPCommandLine: «), ceea ce permite ocolirea verificării și duce la scrierea FoomaticRIPCommandLine ca atribut separat la salvarea datelor primite într-un fișier temporar.
  • Ca urmare a procesării atributelor transmise în sistemul victimei se creează un fișier 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 -» …
  • La imprimarea pe imprimanta substituită de atacator în sistemul victimei va fi executată comanda «echo 1 > /tmp/I_AM_VULNERABLE»

Cercetătorul care a identificat vulnerabilitățile menționează că i-a luat câteva zile pentru a găsi vulnerabilitatea, dar apoi a urmat o corespondență prelungită de 22 de zile cu dezvoltatorii proiectului OpenPrinting, încercând să-i convingă de importanța problemei și necesitatea pregătirii unor patch-uri. Discuția s-a împotmolit în dispute despre dacă ar trebui să corecteze aceste probleme, iar situația a putut fi întoarsă doar prin ridicarea unui hype public legat de descoperirea problemei critice. Este interesant și faptul că a avut loc o scurgere de informații, în timpul căreia raportul confidențial și exploatul trimise la CERT au apărut pe forumul breachforums.st, fiind accesibile public, în ciuda embargoului impus asupra divulgării informațiilor.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster