Becherüberlauf: Wenn Ihr Drucker mehr als Tinte verschüttet

Elastic Security Labs erörtert Erkennungs- und Minderungsstrategien für Schwachstellen im CUPS-Drucksystem, die es nicht authentifizierten Angreifern ermöglichen, das System über IPP und mDNS auszunutzen, was zu Remote-Code-Ausführung (RCE) auf UNIX-basierten Systemen wie Linux, macOS, BSDs, ChromeOS und Solaris führt.

Überlaufen: Wenn Ihr Drucker mehr als nur Tinte verschüttet

Update October 2, 2024

The following packages introduced out-of-the-box (OOTB) rules to detect the exploitation of these vulnerabilities. Please check your "Prebuilt Security Detection Rules" integration versions or visit the Downloadable rule updates site.

  • Stack Version 8.15 - Package Version 8.15.6+
  • Stack Version 8.14 - Package Version 8.14.12+
  • Stack Version 8.13 - Package Version 8.13.18+
  • Stack Version 8.12 - Package Version 8.12.23+

Wichtigste Erkenntnisse

  • On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) disclosed multiple vulnerabilities affecting the cups-browsed, libscupsfilters, and libppd components of the CUPS printing system, impacting versions <= 2.0.1.
  • Die Schwachstellen ermöglichen es einem nicht authentifizierten entfernten Angreifer, das Drucksystem über IPP (Internet Printing Protocol) und mDNS auszunutzen, um eine Remote-Code-Ausführung (RCE) auf betroffenen Systemen zu erreichen.
  • Der Angriff kann über das öffentliche Internet oder ein lokales Netzwerk gestartet werden und zielt auf den UDP-Port ab, der von cups-browsed ohne Authentifizierungsanforderungen offengelegt 631 .
  • Die Schwachstellenkette umfasst den foomatic-rip -Filter, der die Ausführung beliebiger Befehle über die Direktive FoomaticRIPCommandLine ermöglicht, ein bekanntes (CVE-2011-2697, CVE-2011-2964), aber seit 2011 nicht gepatchtes Problem.
  • Zu den betroffenen Systemen gehören die meisten GNU/Linux-Distributionen, BSDs, ChromeOS und Solaris, von denen viele den cups-browsed -Dienst standardmäßig aktiviert haben.
  • Mit dem Titel der Publikation, "Attacking UNIX Systems via CUPS, Part I", erwartet Margaritelli wahrscheinlich weitere Forschungsarbeiten zu diesem Thema.
  • Elastic hat Schutzmaßnahmen und Anleitungen bereitgestellt, um Unternehmen dabei zu helfen, potenzielle Ausnutzung dieser Schwachstellen zu erkennen und einzudämmen.

Der CUPS RCE im Überblick

On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) uncovered a chain of critical vulnerabilities in the CUPS (Common Unix Printing System) utilities, specifically in components like cups-browsed, libcupsfilters, and libppd. These vulnerabilities — identified as CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177 — affect widely adopted UNIX systems such as GNU/Linux, BSDs, ChromeOS, and Solaris, exposing them to remote code execution (RCE).

Der Kern des Problems ist die fehlende Eingabevalidierung in den CUPS-Komponenten, die es Angreifern ermöglicht, das Internet Printing Protocol (IPP) auszunutzen. Angreifer können bösartige Pakete über das Internet (WAN) an den UDP-Port des Ziels senden 631 oder DNS-SD/mDNS-Werbung innerhalb eines lokalen Netzwerks (LAN) fälschen, wodurch das anfällige System gezwungen wird, sich mit einem bösartigen IPP-Server zu verbinden.

Zum Vergleich: Das IPP ist ein Protokoll auf Anwendungsschicht, das zum Senden und Empfangen von Druckaufträgen über das Netzwerk verwendet wird. Zu diesen Mitteilungen gehören das Senden von Informationen über den Zustand des Druckers (Papierstaus, wenig Tinte usw.) und den Status von Aufträgen. IPP wird auf allen gängigen Betriebssystemen unterstützt, einschließlich Windows, macOS und Linux. Wenn ein Drucker verfügbar ist, sendet der Drucker (über DNS) eine Nachricht, die besagt, dass der Drucker bereit ist, einschließlich seines Uniform Resource Identifier (URI). Wenn Linux-Arbeitsstationen diese Meldung erhalten, wird der Drucker bei vielen Linux-Standardkonfigurationen automatisch für die Verwendung im Betriebssystem hinzugefügt und registriert. Daher wird der bösartige Drucker in diesem Fall automatisch registriert und für Druckaufträge zur Verfügung gestellt.

Beim Herstellen einer Verbindung gibt der böswillige Server präparierte IPP-Attribute zurück, die in PPD-Dateien (PostScript Printer Description) eingefügt werden, die von CUPS zur Beschreibung von Druckereigenschaften verwendet werden. Diese manipulierten PPD-Dateien ermöglichen es dem Angreifer, beliebige Befehle auszuführen, wenn ein Druckauftrag ausgelöst wird.

Eine der größten Schwachstellen in dieser Kette ist der foomatic-rip Filter, von dem bekannt ist, dass er die Ausführung beliebiger Befehle über die Direktive FoomaticRIPCommandLine ermöglicht. Obwohl es seit über einem Jahrzehnt anfällig ist, bleibt es in vielen modernen CUPS-Implementierungen ungepatcht, was das Risiko weiter verschärft.

Obwohl diese Schwachstellen mit einem CVSS-Score von bis zu 9.9 sehr kritisch sind, können sie durch die Deaktivierung von cups-browsing, das Blockieren des UDP-Ports 631 und das Aktualisieren von CUPS auf eine gepatchte Version gemildert werden. Auf vielen UNIX-Systemen ist dieser Dienst standardmäßig aktiviert, was dies zu einem dringenden Problem für betroffene Organisationen macht.

Die POC-Analyse von Elastic

Die Threat Research Engineers von Elastic fanden zunächst den von @evilsocket verfassten Original-Proof-of-Concept, der durchgesickert war. Wir haben uns jedoch für den cupshax Proof of Concept (PoC) entschieden, da er lokal ausgeführt werden kann.

Zu Beginn verwendete der PoC eine benutzerdefinierte Python-Klasse, die für die Erstellung und Registrierung des gefälschten Druckerdienstes im Netzwerk mithilfe von mDNS/ZeroConf verantwortlich war. Dies wird hauptsächlich dadurch erreicht, dass ein ZeroConf-Diensteintrag für den gefälschten Internet Printing Protocol (IPP)-Drucker erstellt wird.

Bei der Ausführung sendet der PoC eine gefälschte Druckerwerbung und lauscht auf IPP-Anfragen. Wenn ein verwundbares System den Broadcast sieht, fordert das Opfer automatisch die Attribute des Druckers von einer URL an, die in der Broadcast-Nachricht angegeben ist. Der PoC antwortet mit IPP-Attributen, einschließlich des FoomaticRIPCommandLine-Parameters, der für seine CVE-Historie bekannt ist. Das Opfer generiert und speichert eine PostScript-Druckerbeschreibungsdatei (PPD) aus diesen IPP-Attributen.

Zu diesem Zeitpunkt erfordert die fortgesetzte Ausführung eine Benutzerinteraktion, um einen Druckauftrag zu starten und ihn an den gefälschten Drucker zu senden. Sobald ein Druckauftrag gesendet wurde, teilt die PPD-Datei CUPS mit, wie der Druckauftrag gehandhabt werden soll. Die enthaltene FoomaticRIPCommandLine-Direktive ermöglicht die Ausführung beliebiger Befehle auf dem Opferrechner.

Während unserer Überprüfung und des Tests der Exploits mit dem Cupshax PoC haben wir mehrere bemerkenswerte Hürden und wichtige Details zu diesen anfälligen Endpunkten und Ausführungsprozessen identifiziert.

Beim Ausführen beliebiger Befehle zum Erstellen von Dateien ist uns aufgefallen, dass lp der Benutzer und die Gruppe ist, die für die Ausführung beliebiger Befehle gemeldet werden, die Standarddruckgruppe auf Linux-Systemen, die CUPS-Dienstprogramme verwenden. Daher erfordert der Cupshax PoC/Exploit, dass sowohl die CUPS-Schwachstellen als auch der lp Benutzer über ausreichende Berechtigungen zum Abrufen und Ausführen einer bösartigen Nutzlast verfügen. Standardmäßig verfügt der lp Benutzer auf vielen Systemen über diese Berechtigungen zum Ausführen effektiver Nutzlasten, z. B. Reverse Shells. Eine alternative Abhilfemaßnahme besteht jedoch darin, lp so einzuschränken, dass diese Nutzlasten durch native Steuerelemente, die in Linux verfügbar sind, wie z. B. AppArmor- oder SELinux-Richtlinien, neben Firewall- oder IPtables-Durchsetzungsrichtlinien unwirksam sind.

In vielen Standardkonfigurationen hat der lp Benutzer Zugriff auf Befehle, die für den Druckservice nicht erforderlich sind, z.B. telnet. Um die Angriffsfläche zu verringern, empfehlen wir, unnötige Dienste zu entfernen und ihnen bei Bedarf Einschränkungen hinzuzufügen, um zu verhindern, dass der lp Benutzer sie verwendet.

Wir haben auch zur Kenntnis genommen, dass interaktive Reverse-Shells durch diese Technik nicht sofort unterstützt werden, da der lp Benutzer keine Login-Shell hat. Mit einigen kreativen Taktiken konnten wir dies jedoch dennoch mit dem PoC erreichen. Typische PoCs testen den Exploit, indem sie eine Datei in /tmp/schreiben, was in den meisten Fällen trivial zu erkennen ist. Beachten Sie, dass der Benutzer, der diese Datei schreibt, lp wird, so dass ein ähnliches Verhalten für Angreifer auftritt, die eine Nutzlast herunterladen und auf der Festplatte speichern.

Neben diesen Beobachtungen wurde in unserer Telemetrie beobachtet, dass der übergeordnete Prozess, foomatic-rip , eine Shell ausführt, was sehr ungewöhnlich ist

Ausführen des 'Cupshax'-POC

Um die Auswirkungen dieser Schwachstellen zu veranschaulichen, haben wir versucht, zwei verschiedene Szenarien zu realisieren: die Verwendung einer Nutzlast für eine Reverse-Shell, die Verwendung von "Living off the Land"-Techniken und das Abrufen und Ausführen einer Remote-Nutzlast. Diese Maßnahmen sind oft üblich, wenn gegnerische Gruppen versuchen, sie zu nutzen, sobald ein verwundbares System identifiziert wird. Obwohl sie noch in den Kinderschuhen steckt, wurde eine weit verbreitete Ausnutzung nicht beobachtet, wird aber wahrscheinlich einige der unten dargestellten Szenarien replizieren.

Unsere ersten Versuche, den Cupshax-PoC auszuführen, stießen auf eine Reihe kleinerer Hindernisse, da dem lp Benutzer Standardbenutzergruppen zugewiesen wurden – nämlich Einschränkungen bei der interaktiven Anmeldung, ein Attribut, das für Benutzer üblich ist, die Remotezugriff auf Systeme benötigen. Dies hatte jedoch keine Auswirkungen auf unsere Fähigkeit, eine Remote-Nutzlast herunterzuladen, zu kompilieren und auf dem betroffenen Hostsystem auszuführen:

Es wurden fortlaufende Tests rund um den Reverse-Shell-Aufruf durchgeführt, der unten erfolgreich demonstriert wird:

Bewertung der Auswirkungen

  • Strenge: Diese Schwachstellen erhalten umstrittene CVSS-Werte von bis zu 9,9, was auf einen kritischen Schweregrad hinweist. Die weit verbreitete Verwendung von CUPS und die Möglichkeit, diese Schwachstellen aus der Ferne auszunutzen, machen dies zu einem hochriskanten Problem.
  • Wer ist betroffen?: Die Schwachstelle betrifft die meisten UNIX-basierten Systeme, einschließlich der wichtigsten GNU/Linux-Distributionen und anderer Betriebssysteme wie ChromeOS und BSDs, auf denen die betroffenen CUPS-Komponenten ausgeführt werden. Besonders gefährdet sind öffentlich zugängliche oder netzwerkexponierte Systeme. Weitere Anleitungen und Benachrichtigungen werden wahrscheinlich von den Anbietern bereitgestellt, sobald Patches verfügbar sind, zusammen mit weiteren Abhilfemaßnahmen. Obwohl CUPS normalerweise auf localhost lauscht, hebt der Shodan-Bericht hervor , dass über 75.000 CUPS-Dienste im Internet verfügbar sind.
  • Möglicher Schaden: Einmal ausgenutzt, können Angreifer die Kontrolle über das System erlangen, um beliebige Befehle auszuführen. Je nach Umgebung kann dies zu Datenexfiltration, Ransomware-Installation oder anderen böswilligen Aktionen führen. Systeme, die über WAN mit Druckern verbunden sind, sind besonders gefährdet, da Angreifer dies ausnutzen können, ohne einen internen Netzwerkzugriff zu benötigen.

Korrekturen

Wie in @evilsocket hervorgehoben , gibt es mehrere Empfehlungen zur Behebung.

  • Deaktivieren und deinstallieren Sie den cups-browsed -Dienst. Weitere Informationen finden Sie z. B. in den Empfehlungen von Red Hat und Ubuntu.
  • Stellen Sie sicher, dass Ihre CUPS-Pakete auf die neuesten Versionen aktualisiert werden, die für Ihre Verteilung verfügbar sind.
  • Wenn eine Aktualisierung nicht möglich ist, blockieren Sie UDP-Port- 631 - und DNS-SD-Datenverkehr von potenziell betroffenen Hosts, und untersuchen Sie die oben genannten Empfehlungen, um die lp Benutzer- und Gruppenkonfiguration auf dem Host weiter zu härten.

Elastischer Schutz

In diesem Abschnitt befassen wir uns mit Erkennungs- und Hunting-Abfragen, mit denen verdächtige Aktivitäten im Zusammenhang mit den aktuell veröffentlichten Schwachstellen aufgedeckt werden sollen. Durch die Fokussierung auf Prozessverhalten und Befehlsausführungsmuster helfen diese Abfragen, potenzielle Ausnutzungsversuche zu identifizieren, bevor sie zu ausgewachsenen Angriffen eskalieren.

CUPSD- oder FOOMATIC-RIP-Shell-Ausführung

Die erste Erkennungsregel zielt auf Prozesse auf Linux-Systemen ab, die von foomatic-rip erzeugt werden und sofort eine Shell starten. Dies ist effektiv, da legitime Druckaufträge selten eine Shell-Ausführung erfordern, was dieses Verhalten zu einem starken Indikator für bösartige Aktivitäten macht. Hinweis: Eine Shell ist nicht immer das Ziel eines Angreifers, wenn die Ausführung beliebiger Befehle möglich ist.

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and process.parent.name == "foomatic-rip" and
 process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") 
 and not process.command_line like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

Diese Abfrage hat es geschafft, alle PoC-Versuche zu erkennen, 33 wir durchgeführt haben:

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_shell_execution.toml

Ausführung der Shell-Shell des Druckerbenutzers (lp)

Bei dieser Erkennungsregel wird davon ausgegangen, dass der Standarddruckerbenutzer (lp) die Druckvorgänge ausführt. Durch die Angabe dieses Benutzers können wir den Bereich einschränken und gleichzeitig die Liste der übergeordneten Prozesse um cupsderweitern. Obwohl es derzeit keinen Hinweis darauf gibt, dass RCE über cupsdausgenutzt werden kann, können wir die Möglichkeit nicht ausschließen.

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and user.name == "lp" and
 process.parent.name in ("cupsd", "foomatic-rip", "bash", "dash", "sh", 
 "tcsh", "csh", "zsh", "ksh", "fish") and process.name in ("bash", "dash", 
 "sh", "tcsh", "csh", "zsh", "ksh", "fish") and not process.command_line 
 like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

Indem wir uns auf den Benutzernamen lpkonzentrierten, erweiterten wir den Anwendungsbereich und erkannten, wie zuvor, alle 33 PoC-Ausführungen:

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_lp_user_execution.toml

Netzwerkverbindung durch CUPS foomatic-rip Kind

Diese Regel identifiziert Netzwerkverbindungen, die von untergeordneten Prozessen von foomatic-ripinitiiert werden, was ein Verhalten ist, das Verdacht erregt. Da bei legitimen Vorgängen in der Regel keine ausgehenden Verbindungen durch diese Prozesse hergestellt werden, sollten alle erkannten Aktivitäten genau untersucht werden. Wenn eine solche Kommunikation in Ihrer Umgebung erwartet wird, stellen Sie sicher, dass die Ziel-IP-Adressen ordnungsgemäß ausgeschlossen sind, um unnötige Warnungen zu vermeiden.

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" 
   and event.action == "exec" and
   process.parent.name == "foomatic-rip" and
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] 
   by process.entity_id
  [network where host.os.type == "linux" and event.type == "start" and 
   event.action == "connection_attempted"] by process.parent.entity_id

Durch die Erfassung der Beziehung zwischen über- und untergeordneten Elementen stellen wir sicher, dass die Netzwerkverbindungen von der potenziell kompromittierten Anwendung stammen.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/command_and_control_cupsd_foomatic_rip_netcon.toml

Dateierstellung durch CUPS foomatic-rip child

Diese Regel erkennt verdächtige Dateierstellungsereignisse, die von untergeordneten Prozessen von foomatic-rip initiiert werden. Da alle aktuellen Proof-of-Concepts eine standardmäßige Testnutzlast haben, die darin besteht, in eine Datei in /tmp/zu schreiben, würde diese Regel dies abfangen. Darüber hinaus kann es Szenarien erkennen, in denen ein Angreifer eine bösartige Nutzlast herunterlädt und anschließend eine Datei erstellt.

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" and 
   event.action == "exec" and process.parent.name == "foomatic-rip" and 
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] by process.entity_id
  [file where host.os.type == "linux" and event.type != "deletion" and
   not (process.name == "gs" and file.path like "/tmp/gs_*")] by process.parent.entity_id

Die Regel schließt /tmp/gs_* aus, um das standardmäßige cupsd Verhalten zu berücksichtigen, aber um die Sicherheit zu erhöhen, können Sie diesen Ausschluss entfernen, wobei Sie bedenken sollten, dass er möglicherweise mehr Rauschen in Warnungen erzeugt.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_file_creation.toml

Verdächtige Hinrichtung durch foomatic-rip oder cupsd Elternteil

Diese Regel erkennt verdächtige Befehlszeilen, die von untergeordneten Prozessen foomatic-rip und cupsdausgeführt werden. Es konzentriert sich auf die Identifizierung potenziell bösartiger Aktivitäten, einschließlich Persistenzmechanismen, Dateidownloads, Codierungs-/Decodierungsvorgänge, Reverse-Shells und Laden freigegebener Objekte über go awayBins.

process where host.os.type == "linux" and event.type == "start" and 
 event.action == "exec" and process.parent.name in 
 ("foomatic-rip", "cupsd") and process.command_line like (
  // persistence
  "*cron*", "*/etc/rc.local*", "*/dev/tcp/*", "*/etc/init.d*", 
  "*/etc/update-motd.d*", "*/etc/sudoers*",
  "*/etc/profile*", "*autostart*", "*/etc/ssh*", "*/home/*/.ssh/*", 
  "*/root/.ssh*", "*~/.ssh/*", "*udev*", "*/etc/shadow*", "*/etc/passwd*",
    // Downloads
  "*curl*", "*wget*",

  // encoding and decoding
  "*base64 *", "*base32 *", "*xxd *", "*openssl*",

  // reverse connections
  "*GS_ARGS=*", "*/dev/tcp*", "*/dev/udp/*", "*import*pty*spawn*", "*import*subprocess*call*", "*TCPSocket.new*",
  "*TCPSocket.open*", "*io.popen*", "*os.execute*", "*fsockopen*", "*disown*", "*nohup*",

  // SO loads
  "*openssl*-engine*.so*", "*cdll.LoadLibrary*.so*", "*ruby*-e**Fiddle.dlopen*.so*", "*Fiddle.dlopen*.so*",
  "*cdll.LoadLibrary*.so*",

  // misc. suspicious command lines
   "*/etc/ld.so*", "*/dev/shm/*", "*/var/tmp*", "*echo*", "*>>*", "*|*"
)

Indem wir eine Ausnahme für die Befehlszeilen machen, wie wir es in der obigen Regel getan haben, können wir den Bereich erweitern, um auch das cupsd übergeordnete Element zu erkennen, ohne dass Fehlalarme befürchtet werden müssen.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_suspicious_child_execution.toml

Die Angriffserkennung von Elastic

Zusätzlich zu den vorgefertigten veröffentlichten Inhalten kann die Attack Discovery von Elastic Kontext und Einblicke liefern, indem sie Warnungen in Ihrer Umgebung analysiert und Bedrohungen durch die Nutzung von Large Language Models (LLMs) identifiziert. Im folgenden Beispiel stellt die Angriffsermittlung eine kurze Zusammenfassung und eine Zeitachse der Aktivität bereit. Die Verhaltensweisen werden dann einer Angriffskette zugeordnet, um betroffene Phasen hervorzuheben und die Sichtung der Warnungen zu erleichtern.

Fazit

Die jüngste Offenlegung der CUPS-Schwachstelle unterstreicht die sich entwickelnde Bedrohungslandschaft und unterstreicht, wie wichtig es ist, Dienste wie das Drucken zu sichern. Bei einem hohen CVSS-Score erfordert dieses Problem sofortiges Handeln, insbesondere angesichts der Tatsache, dass diese Fehler aus der Ferne ausgenutzt werden können. Obwohl der Dienst standardmäßig auf einigen UNIX-Betriebssystemen installiert ist (basierend auf der Lieferkette), ist eine manuelle Benutzerinteraktion erforderlich, um den Druckerauftrag auszulösen. Wir empfehlen den Nutzern, wachsam zu bleiben, weiter zu jagen und das Risiko nicht zu unterschätzen. Die Bedrohung erfordert zwar eine Benutzerinteraktion, aber wenn sie mit einem Spear-Phishing-Dokument gekoppelt ist, kann sie die Opfer dazu zwingen, mit dem nicht autorisierten Drucker zu drucken. Oder noch schlimmer, vorhandene Drucker stillschweigend auszutauschen oder neue zu installieren, wie von @evilsocket angegeben .

Wir gehen davon aus, dass mehr enthüllt wird, da die ursprüngliche Enthüllung als Teil 1 bezeichnet wurde. Letztendlich stehen Transparenz und Erkennungsfunktionen weiterhin im Vordergrund der Verteidigungsstrategien für diese Systeme, um sicherzustellen, dass Angreifer übersehene Schwachstellen nicht ausnutzen können.

Wichtige Referenzen

Die Entscheidung über die Veröffentlichung der in diesem Blogeintrag beschriebenen Leistungsmerkmale und Features sowie deren Zeitpunkt liegt allein bei Elastic. Es ist möglich, dass noch nicht verfügbare Leistungsmerkmale oder Features nicht rechtzeitig oder überhaupt nicht veröffentlicht werden.