Fernbedienbare Schwachstellen im Druckserver CUPS

Simone Margaritelli, der Autor der OpenSnitch-Firewall und des Netzwerk-Analysetools bettercap, hat vorzeitig Informationen über zuvor angekündigte kritische Schwachstellen veröffentlicht, die es ermöglichen, Distributionen von GNU/Linux, Solaris, FreeBSD und einigen anderen BSD-Systemen aus der Ferne anzugreifen. Ursprünglich war die Veröffentlichung für den 6. Oktober geplant, jedoch musste die Bekanntmachung aufgrund eines Informationslecks vorzeitig erfolgen, bevor die meisten Distributionen ein Update der Pakete vorbereiten konnten. Die Schwachstellen betreffen den CUPS-Druckserver und ermöglichen es, aus der Ferne ohne Authentifizierung Code im System auszuführen.

Der Forscher, der das Problem aufgedeckt hat, hat einen funktionalen Exploit-Prototypen vorbereitet, der eine Kombination mehrerer Schwachstellen nutzt und es ermöglicht, aus der Ferne Code mit den Rechten des CUPS-Druckauftragsprozessors auszuführen (in der Regel handelt es sich um den Benutzer „lp“). Der Exploit erlaubt es, die Druckerparameter des Benutzers unbemerkt zu ändern oder einen neuen Drucker hinzuzufügen, der mit dem vom Angreifer gestarteten IPP-Server verbunden ist, der eine speziell formatierte PPD-Druckerbeschreibung liefert. Die Verarbeitung dieser PPD während der Verarbeitung eines Druckauftrags führt zur Ausführung des Angreifercodes (es ist erforderlich, dass das Opfer den Druckauftrag auf den eingesetzten oder durch den Angreifer ersetzten Drucker initiiert).

Angreifbar sind Systeme mit Server CUPS-Druck und einem laufenden Prozess cups-browsed, der Netzwerkverbindungen am Port 631 (UDP) akzeptiert. Der Angriff kann auch aus einem lokalen Netzwerk erfolgen, in dem für den Zugriff auf zu einem Server Druck die Protokolle zeroconf, mDNS oder DNS-SD verwendet werden. Es sind nur Konfigurationen von cups-browsed betroffen, in denen in der Datei /etc/cups/cups-browsed.conf im Parameter BrowseRemoteProtocols der Wert „cups“ angegeben ist. In Distributionen mit systemd kann die Verwendung des Dienstes cups-browsed mit dem Befehl „sudo systemctl status cups-browsed“ überprüft werden.

Die Schwachstelle zeigt sich in allen Drucksystemen basierend auf CUPS, die anfällige Versionen der Pakete cups-filters, libcupsfilters, libppd und cups-browsed verwenden. Die Korrekturen sind bisher nur als Patches (1, 2, 3) verfügbar – die aktuellen Versionen cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 und cups-browsed 2.0.1 sind anfällig. In den Distributionen bleibt das Problem ungeklärt; Informationen über die Veröffentlichung von Updates finden Sie auf den folgenden Seiten: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Als vorübergehende Schutzmaßnahme kann der Zugang zu UDP-Port 631 für externe Netzwerke gesperrt werden, der Service cups-browsed kann deaktiviert oder die Einstellung BrowseRemoteProtocols auf „none“ gesetzt werden.

Festgestellte Schwachstellen:

  • CVE-2024-47176 – eine Schwachstelle im Prozess cups-browsed, der einen Netzwerk-Socket erstellt, der Verbindungen auf Port 631 akzeptiert und mit allen vorhandenen Netzwerk-Schnittstellen im System verbunden ist. Er nimmt IPP-Anfragen „Get-Printer-Attributes“ von externen Systemen entgegen. Durch Manipulation mit diesem Dienst kann ein Angreifer einen Drucker in das System einfügen und über die Übertragung der PPD-Konfiguration Schwachstellen in anderen CUPS-Komponenten ausnutzen.
  • CVE-2024-47177 – eine Schwachstelle im Foomatic-RIP-Handler aus dem Paket cups-filters, die das Ausführen von Code durch Übertragung des Parameters FoomaticRIPCommandLine in einer PPD-Datei ermöglicht, die der Angreifer aufgrund der oben genannten Schwachstelle in cups-browsed übermitteln kann. Die im Parameter FoomaticRIPCommandLine angegebenen Shell-Befehle werden unverändert ausgeführt, ohne zu berücksichtigen, dass der Parameter von Dritten festgelegt werden könnte. Zum Beispiel kann man zum Schreiben in die Datei /tmp/VULNERABLE „FoomaticRIPCommandLine: „echo 1 > /tmp/VULNERABLE“ angeben.
  • CVE-2024-47175 – eine Schwachstelle in libppd, die durch das Fehlen einer Validierungsprüfung des Wertes ppdCreatePPDFromIPP2 beim Schreiben von IPP-Attributen in eine temporäre PPD-Datei verursacht wird. Das Problem ermöglicht es, beliebige Daten in die resultierende PPD-Datei einzuschleusen, indem Attribute angehängt werden, wobei das Zeilenumbruchzeichen verwendet wird. Zum Beispiel kann die Überprüfung umgangen werden, und zusammen mit den erlaubten Attributen kann das Attribut FoomaticRIPCommandLine eingefügt werden, um die oben genannte Schwachstelle in cups-filters auszunutzen.
  • CVE-2024-47076 — eine Schwachstelle in der Bibliothek libcupsfilters aus dem Paket cups-filters, die mit dem Fehlen einer Überprüfung der von externen IPP-Servern zurückgegebenen Werte cfGetPrinterAttributes5 verbunden ist, was es einem Angreifer ermöglicht, die Verarbeitung beliebiger IPP-Attribute in anderen CUPS-Subsystemen zu organisieren, beispielsweise bei der Generierung von PPD-Dateien.

Das Angriffsszenario auf CUPS besteht aus den folgenden Schritten:

  • Der Angreifer richtet einen eigenen IPP-Server ein.
  • Der Angreifer sendet ein UDP-Paket an das Opfer mit einem Verweis auf den Drucker, der mit dem gestarteten IPP-Server des Angreifers verbunden ist.
  • Nach dem Empfang dieses Pakets verbindet sich das System des Opfers mit dem IPP-Server des Angreifers und fragt die Druckattribute an.
  • Als Antwort auf die Anfrage des Opfers gibt der IPP-Server des Angreifers eine PPD-Datei mit Attributen zurück, darunter das Attribut FoomaticRIPCommandLine. Dieses Attribut wird an ein zulässiges Attribut angehängt, wobei das Zeichen „\n“ in einer Zeile verwendet wird (zum Beispiel „cupsPrivacyURI: „https://www.google.com/\n*FoomaticRIPCommandLine: „), was die Überprüfung umgeht und dazu führt, dass FoomaticRIPCommandLine als separates Attribut gespeichert wird, während die erhaltenen Daten in einer temporären Datei gesichert werden.
  • Durch die Verarbeitung der übertragenen Attribute wird im System des Opfers eine PPD-Datei erstellt: … *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 -“ …
  • Beim Drucken auf den vom Angreifer eingeschleusten Drucker wird im System des Opfers der Befehl „echo 1 > /tmp/I_AM_VULNERABLE“ ausgeführt.

Ein Forscher, der die Schwachstelle entdeckt hat, berichtet, dass er ein paar Tage mit der Suche nach der Schwachstelle verbracht hat, aber anschließend folgte ein langwieriger Austausch von 22 Tagen mit den Entwicklern des OpenPrinting-Projekts, um sie von der Wichtigkeit des Problems und der Notwendigkeit der Erstellung von Patches zu überzeugen. Die Diskussion war von Streitigkeiten darüber geprägt, ob die angegebenen Probleme überhaupt behoben werden sollten, und die Situation konnte nur durch die Schaffung öffentlicher Aufmerksamkeit für das Aufdecken des kritischen Problems geändert werden. Interessant ist auch das Auftreten eines Datenlecks, bei dem ein vertraulicher Bericht und ein Exploit, die an CERT übermittelt wurden, auf dem Forum breachforums.st öffentlich zugänglich gemacht wurden, trotz des verhängten Embargos auf die Offenlegung von Informationen.

Quelle: opennet.ru

60GB SSD 8Gb DDR4