Simone Margaritelli, autore del firewall OpenSnitch e dell'analizzatore di rete bettercap, ha rivelato anticipatamente informazioni su vulnerabilità critiche precedentemente annunciate, che permettono di attaccare da remoto distribuzioni GNU/Linux, Solaris, FreeBSD e alcune altre sistemi BSD. La pubblicazione era inizialmente prevista per il 6 ottobre, ma a causa di una fuga di informazioni, è stata pubblicata in anticipo, prima che la maggior parte delle distribuzioni potesse preparare aggiornamenti dei pacchetti. Le vulnerabilità colpiscono il server di stampa CUPS e consentono l'esecuzione remota di codice nel sistema senza autenticazione.
Il ricercatore che ha individuato il problema ha preparato un prototipo funzionante di exploit, che utilizza una combinazione di diverse vulnerabilità per eseguire codice da remoto con i privilegi del processo che gestisce i lavori di stampa CUPS (di solito l'utente "lp"). L'exploit permette di sostituire silenziosamente i parametri della stampante dell'utente o di aggiungere una nuova stampante collegata a un server IPP controllato dall'attaccante, che restituisce una descrizione PPD appositamente formattata. L'elaborazione di questo PPD durante l'avvio della stampa porta all'esecuzione del codice dell'attaccante (è necessario che la vittima avvii la stampa sulla stampante sostituita o aggiunta dall'attaccante).
Sono vulnerabili i sistemi con server stampa CUPS e il processo cups-browsed in esecuzione, che accetta connessioni di rete sulla porta 631 (UDP). L'attacco può essere effettuato anche dalla rete locale, in cui vengono utilizzati protocolli come zeroconf, mDNS o DNS-SD per accedere alla stampa. Sono vulnerabili solo le configurazioni di cups-browsed in cui il file /etc/cups/cups-browsed.conf ha il parametro BrowseRemoteProtocols impostato a "cups". Nei distribuitivi con systemd, è possibile controllare l'uso del servizio cups-browsed con il comando "sudo systemctl status cups-browsed". server La vulnerabilità si manifesta in tutti i sistemi di stampa basati su CUPS, in cui vengono utilizzate versioni vulnerabili dei pacchetti cups-filters, libcupsfilters, libppd e cups-browsed. Le correzioni sono attualmente disponibili solo sotto forma di patch (1, 2, 3) — le versioni attuali cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 e cups-browsed 2.0.1 sono vulnerabili. Nei distribuitivi il problema rimane non risolto; è possibile monitorare l'uscita di aggiornamenti sulle seguenti pagine: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Come misura di protezione temporanea, fino all'installazione dell'aggiornamento, è possibile chiudere l'accesso alla porta UDP 631 per le reti esterne, disabilitare il servizio cups-browsed o impostare il parametro BrowseRemoteProtocols a "none".
CVE-2024-47176 — vulnerabilità nel processo cups-browsed, che crea un socket di rete che accetta connessioni sulla porta 631, collegandosi a tutte le interfacce di rete disponibili nel sistema e ricevendo richieste IPP "Get-Printer-Attributes" da qualsiasi sistema esterno. Attraverso la manipolazione di questo servizio, è possibile aggiungere al sistema una stampante controllata dall'attaccante e sfruttare la vulnerabilità attraverso la configurazione PPD in altri componenti di CUPS.
Vulnerabilità identificate:
- CVE-2024-47177 — vulnerabilità nel gestore foomatic-rip del pacchetto cups-filters, che permette l'esecuzione di codice mediante il passaggio del parametro FoomaticRIPCommandLine nel file PPD, che l'attaccante può inviare grazie alla vulnerabilità descritta in precedenza in cups-browsed. I comandi della shell indicati nel parametro FoomaticRIPCommandLine vengono eseguiti tal quali, senza considerare che il parametro possa essere impostato da una fonte esterna. Ad esempio, per scrivere nel file /tmp/VULNERABLE si può specificare "FoomaticRIPCommandLine: "echo 1 > /tmp/VULNERABLE".
- CVE-2024-47175 — vulnerabilità in libppd, causata dalla mancata verifica del valore ppdCreatePPDFromIPP2 durante la scrittura degli attributi IPP nel file PPD temporaneo. Il problema consente di inserire dati arbitrari nel file PPD risultante attraverso l'allegato di attributi utilizzando il carattere di nuova linea. Ad esempio, è possibile eludere il controllo e insieme agli attributi consentiti inserire l'attributo FoomaticRIPCommandLine per sfruttare la vulnerabilità precedentemente citata in cups-filters.
- CVE-2024-47076 — vulnerabilità nella libreria libcupsfilters del pacchetto cups-filters, relativa alla mancanza di verifica dei valori cfGetPrinterAttributes5 restituiti da un server IPP esterno, consentendo all'attaccante di trattare attributi IPP arbitrari in altri sottosistemi di CUPS, ad esempio durante la generazione di file PPD.
- Lo scenario di attacco a CUPS si riassume nei seguenti passaggi:
Distribuzione da parte dell'attaccante di un proprio server IPP.
- Invio alla vittima di un pacchetto UDP contenente un riferimento alla stampante collegata al server IPP attaccante.
- Dopo la ricezione di questo pacchetto, il sistema della vittima si collega al server IPP dell'attaccante e richiede gli attributi della stampante.
- Dopo aver ricevuto questo pacchetto, il sistema della vittima si connette al server IPP dell'attaccante e richiede gli attributi della stampante.
- In risposta alla richiesta della vittima, il server IPP dell'attaccante restituisce un file PPD con gli attributi, tra cui l'attributo FoomaticRIPCommandLine. Questo attributo viene allegato a uno degli attributi consentiti, utilizzando il carattere «\n» all'interno di una riga (ad esempio, «cupsPrivacyURI: «https://www.google.com/\n*FoomaticRIPCommandLine: «), il che consente di eludere il controllo e porta a registrare FoomaticRIPCommandLine come attributo separato quando si salvano i dati ricevuti in un file temporaneo.
- A seguito dell'elaborazione degli attributi trasmessi, nel sistema della vittima viene generato un file 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 -» …
- Quando si stampa su una stampante sostituita dall'attaccante, nel sistema della vittima verrà eseguito il comando «echo 1 > /tmp/I_AM_VULNERABLE»
Il ricercatore che ha identificato le vulnerabilità segnala che la ricerca della vulnerabilità ha richiesto qualche giorno, ma è seguita una corrispondenza di 22 giorni con gli sviluppatori del progetto OpenPrinting nel tentativo di convincerli dell'importanza del problema e della necessità di preparare patch. La discussione si è arenata in contenzioni su se fosse opportuno riparare i suddetti problemi, e la situazione è stata ribaltata solo alzando un pubblico clamore riguardo alla scoperta di un problema critico. È interessante anche l'emergere di una fuga di informazioni, durante la quale il rapporto riservato e l'exploit trasmessi al CERT sono apparsi sul forum breachforums.st, accessibili al pubblico, nonostante l'embargo sulla divulgazione delle informazioni.
Fonte: opennet.ru
