Navigácia
Kyberbezpečnosť

Zraniteľnosť CUPS (CVE-2024-47176): Bash audit a mitigácia pre zabudnuté Linux servery

31 októbra, 2026 techy.sk

Koncom septembra 2024 odhalili reťaz zraniteľností v tlačovom systéme CUPS, ktorá umožňovala spustiť kód na diaľku. Opravy a zmierňujúce opatrenia vyšli už vtedy, no staré, neaktualizované a zabudnuté stroje stále existujú. Tento návod ukazuje, čo reťaz zraniteľností znamenala, ako overiť, či si zraniteľný, a ako sa zabezpečiť. Panika nie je na mieste, ale kontrola áno.

O čo išlo

Bezpečnostný výskumník Simone Margaritelli (známy ako evilsocket) zverejnil 26. septembra 2024 analýzu viacerých chýb v komponentoch tlačového systému. Najdôležitejšie boli tieto:

  • CVE-2024-47176 (cups-browsed): služba počúvala na UDP porte 631 na všetkých rozhraniach a dôverovala každému paketu z ľubovoľného zdroja. Na jeho základe vykonala požiadavku IPP na adresu, ktorú zvolil útočník.
  • CVE-2024-47076 (libcupsfilters): údaje vrátené „tlačiarňou“ sa nesanitizovali.
  • CVE-2024-47175 (libppd): hodnoty zo súboru PPD sa dali zneužiť na vloženie príkazov.
  • CVE-2024-47177 (cups-filters): filter foomatic-rip umožňoval vykonať ľubovoľný príkaz cez parameter FoomaticRIPCommandLine v PPD.

Princíp útoku bol takýto: útočník prinútil zraniteľný stroj zaregistrovať falošnú tlačiareň, ktorej popis obsahoval škodlivé hodnoty. Keď sa potom na tlačiareň vytlačilo, vykonal sa príkaz. Podľa dostupných analýz teda nešlo o čisto bezpodmienečné ovládnutie stroja. Bolo potrebné, aby niekto na takúto tlačiareň tlačil. To bolo aj dôvodom, prečo sa počiatočné hodnotenie „kritické“ a titulky o miliónoch ohrozených systémov ukázali ako prehnané.

Koho sa to týka

Tvrdenie, že CUPS je predinštalovaný v takmer každej distribúcii, je zjednodušené. CUPS sa často nachádza na desktopových systémoch. Zraniteľná súčasť cups-browsed však nie je na každom stroji a na väčšine serverov nie je potrebná. Zraniteľný mohol byť stroj, ktorý mal cups-browsed v zraniteľnej verzii (do 2.0.1) spustený a dostupný cez UDP 631.

Stav opráv

  • Distribúcie rýchlo vydali aktualizácie, ktoré opravujú alebo obchádzajú CVE-2024-47176, 47076 a 47175.
  • CVE-2024-47177 sa riešilo najmä zmierňujúco. Zmena správania v ostatných opravených komponentoch ho robí ťažšie využiteľným a niektoré distribúcie ho označili za odložené do prepracovania riešenia.
  • Samotné vypnutie cups-browsed bolo označované za nedostatočné riešenie. Zostávali ďalšie cesty cez IPP, ak sa na stroji niekto pripojil k škodlivej tlačiarni. Preto je potrebné aj aktualizovať.

Krok 1: Audit (iba čítanie)

Skript nič nemení. Zistí, či služby bežia, či sú zapnuté a kto počúva na porte 631.

#!/usr/bin/env bash
# Audit CUPS a cups-browsed. Skript nič nemení.
set -u

echo "== Služby =="
for s in cups cups.socket cups.path cups-browsed; do
  printf '%-14s aktívna: %-10s zapnutá: %sn' "$s" 
    "$(systemctl is-active "$s" 2>/dev/null)" 
    "$(systemctl is-enabled "$s" 2>/dev/null)"
done

echo
echo "== Sockety na porte 631 =="
ss -tulnp 2>/dev/null | awk 'NR==1 || /:631[[:space:]]/'

echo
echo "== Verzie balíkov =="
if command -v dpkg >/dev/null 2>&1; then
  dpkg -l 2>/dev/null | awk '/^ii/ && /cups-browsed|cups-filters|libcupsfilters|libppd|cups-daemon/ {print $2, $3}'
fi
if command -v rpm >/dev/null 2>&1; then
  rpm -qa 2>/dev/null | grep -Ei 'cups-browsed|cups-filters|libcupsfilters|libppd' || true
fi

Ako výsledok čítaj nasledovne. Ak cups-browsed nie je aktívny ani nainštalovaný, tvoj stroj nie je touto cestou vystavený. Ak počúva na UDP 631 na všetkých adresách (0.0.0.0 alebo [::]), je to varovanie. Verziu porovnaj s opravenou verziou v bezpečnostnom oznámení tvojej distribúcie, nie s číslom z tohto článku, lebo distribúcie často opravy vydávajú pod rovnakým číslom verzie.

Krok 2: Oprava a zmiernenie

  1. Aktualizuj balíky bežným správcom balíkov a reštartuj dotknuté služby.
  2. Odstráň to, čo nepotrebuješ. Na serveri bez tlače nemá cups-browsed čo robiť. Vypni ho: sudo systemctl disable --now cups-browsed. Ak nepotrebuješ ani CUPS, odinštaluj aj ten.
  3. Pridaj firewall ako ďalšiu vrstvu. Nepovažuj ho za náhradu aktualizácie.

UFW (Ubuntu, Debian)

sudo ufw insert 1 deny in proto udp to any port 631
sudo ufw status numbered

Ak potrebuješ povoliť dôveryhodnú sieť, pridaj pred toto pravidlo pravidlo allow s adresou tvojej siete.

firewalld (RHEL, CentOS, Fedora)

sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="631" protocol="udp" drop'
sudo firewall-cmd --reload

V predvolených zónach firewalld port 631 zvyčajne nie je otvorený. Pozri si výstup príkazu --list-all, či v zóne nie je povolená služba ipp alebo ipp-client.

Čo firewall nevyrieši

  • Útočník v tej istej lokálnej sieti sa mohol dostať k službe aj inými cestami než priamym paketom na UDP 631, napríklad cez objavovanie tlačiarní (mDNS/DNS-SD). Blokovanie jedného portu preto nestačí.
  • Pravidlo, ktoré blokuje len vstup, nechráni stroj, ktorý sa sám pripojí na škodlivú tlačiareň.
  • Stroje mimo tvojej správy, napríklad notebooky či virtuálne stroje, treba skontrolovať osobitne.

Čo si z toho odniesť

Táto zraniteľnosť je dobrým príkladom, ako zabudnutá služba rozširuje útočnú plochu. Najlepšia ochrana je stará a nudná: aktualizovať a vypnúť všetko, čo stroj nepotrebuje. Audit zo skriptu nad týmto textom zaberie minútu na stroj a pri flotile serverov sa dá spustiť cez nástroj na správu konfigurácií.

Zdieľať článok

Mohlo by vás zaujímať