Simone Margaritelli, OpenSnitchi tulemüür autor ja bettercap'i võrguanalüütik, avaldas enne aega teavet varakult kuulutatud kriitiliste haavatavuste kohta, mis võimaldavad kaugseadmest rünnata GNU/Linuxi, Solaris, FreeBSD ja teisi BSD-süsteeme. Algne avaldamine oli kavandatud 6. oktoobriks, kuid teabe lekkimise tõttu tuli andmed varakult avaldada, enne kui enamik levitusi jõuab pakettide uuendamiseks ette valmistada. Haavatavused puudutavad CUPS-i printiservert ja võimaldavad kaugseadmest autentimata koodi täitmist süsteemis.
Probleemi avastanud teadlase poolt on välja töötatud tööprototüüp, mis kasutab mitme haavatavuse kombinatsiooni ja võimaldab kaugel käivitada koodi, kasutades CUPS-i printimise protsessi õigusi (tavaliselt on see kasutaja „lp“). Eksploiter võimaldab märkamatult asendada kasutaja printeri seadistusi või lisada uue printeri, mis on seotud rünnataja IPP-serveriga, mis edastab spetsiaalselt vormindatud PPD-printeri kirjelduse. Antud PPD töötlemine printimise töö käivitamise ajal toob kaasa ründaja koodi täitmise (on vajalik, et ohver algataks printimise vale või ründaja asendatud printeril).
Rünnakutele on vastuvõtlikud süsteemid, millel on serveriga CUPS-i printimine ja töötav cups-browsed protsess, mis aktsepteerib võrguühendusi 631. pordil (UDP). Rünnakut saab teostada ka kohalikus võrgus, kus ligipääs on serverile prindimise protsessis kasutatakse protokolle zeroconf, mDNS või DNS-SD. Vain haavatav on konfigureeritud cups-browsed, kus failis /etc/cups/cups-browsed.conf parameetri BrowseRemoteProtocols väärtuseks on määratud "cups". Distroodes, kus on systemd, saab cups-browsed teenuse kasutuse kontrollida käsuga "sudo systemctl status cups-browsed".
Haavatavus esineb kõigis CUPS-i baasil printimissüsteemides, kus kasutatakse haavatavaid versioone pakettidest cups-filters, libcupsfilters, libppd ja cups-browsed. Parandused on praegu saadaval ainult patch-idena (1, 2, 3) — praegused versioonid cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 ja cups-browsed 2.0.1 on haavatavad. Distrodes jääb probleem lahendamata; uuenduste jälgimiseks saab külastada järgmisi lehti: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Ajutise kaitsesammuna enne uuenduste installimist saab UDP-port 631 välistele võrkudele suletud hoida, cups-browsed teenuse välja lülitada või määrata BrowseRemoteProtocols seadistuseks "none".
Tuvastatud haavatavused:
- CVE-2024-47176 — haavatavus cups-browsed protsessis, mis loob võrgu sokli, mis aktsepteerib ühendusi 631 pordil, seotuna kõikide süsteemis olemasolevate võrgu liidesetega ja aktsepteerib IPP-päringuid "Get-Printer-Attributes" mistahes välistest süsteemidest. Selle teenusega manipuleerimisega on võimalik lisada süsteemi ründaja kontrollitav printer ja ära kasutada PPD-konfiguratsiooni haavatavusi teistes CUPS-i komponentides.
- CVE-2024-47177 — haavatavus foomatic-rip töötlejas cups-filters komplektist, mis võimaldab koodi täitmist, edastades FoomaticRIPCommandLine parameetri PPD-failis, mille ründaja saab edastada eespool mainitud haavatavuse kaudu cups-browsed. FoomaticRIPCommandLine parameetris määratud shell-käsklused täidetakse sellisena, arvestamata, et parameetri võib määrata kolmas isik. Näiteks failisse /tmp/VULNERABLE kirjutamiseks võib määrata "FoomaticRIPCommandLine: "echo 1 > /tmp/VULNERABLE".
- CVE-2024-47175 — haavatavus libppd, mis tuleneb ppdCreatePPDFromIPP2 väärtuse kontrollimise puudumisest IPP attribuutide kirjutamisel ajutisse PPD faili. Probleem võimaldab sisestada suvalisi andmeid lõpp-PPD faili, lisades atribuute, kasutades reavahetussümbolit. Näiteks saab kontrolli mööda minna ja koos lubatud atribuutidega sisestada atribuudid FoomaticRIPCommandLine, et ära kasutada eespool mainitud haavatavust cups-filters.
- CVE-2024-47076 — haavatavus libcupsfilters teegis, mis kuulub paketti cups-filters, seostatuna cfGetPrinterAttributes5 väärtuste kontrollimise puudumisega, mida tagastab väline IPP-server, mis annab ründajale võimaluse organiseerida suvaliste IPP-atribuutide töötlemist CUPS-i muudes alamsüsteemides, näiteks PPD-failide genereerimisel.
Rünnaku stsenaarium CUPS-i suunatakse järgmistele sammudele:
- Ründaja seab üles oma IPP-serveri.
- Ohvrile saadetakse UDP-pakett, mis sisaldab viidet printerile, mis on seotud käivitatud ründaja IPP-serveriga.
- Pärast selle paketi vastuvõtmist ühendab ohvri süsteem end ründaja IPP-serveriga ja küsib printeri atribuutide kohta.
- Rünnaku IPP-server vastab ohvri päringule PPD-failiga, milles on märgitud mitu atribuudid, sealhulgas FoomaticRIPCommandLine atribuut. See atribuut kinnitatakse ühele lubatud atribuudist, kasutades sümbolit "\n" ühel real (näiteks "cupsPrivacyURI: "https://www.google.com/\n*FoomaticRIPCommandLine: "), mis võimaldab kontrolli mööda minna ja viib FoomaticRIPCommandLine eraldiseisva atribuudina salvestatud andmete kirjutamiseni ajutisse faili.
- Käideldud atribuudid süsteemis loovad ohvri jaoks PPD-faili: … *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 -" …
- Kui printimine toimub ründaja esitatud printeri abil, täidetakse ohvri süsteemis käsk "echo 1 > /tmp/I_AM_VULNERABLE".
Vigu leidnud uurija märgib, et haavatavuste leidmine võttis tal paar päeva, kuid seejärel järgnes 22 päeva kestnud kirjavahetus OpenPrinting projekti arendajatega, püüdes veenda neid probleemi olulisuses ja vajalikus plaastrite ettevalmistamises. Arutelu takerdus vaidlustesse selle üle, kas neid probleeme üldse tuleks parandada, ja olukorra õnnestus muuta alles public hype tõstmise kaudu, et tuua esile kriitiline probleem. Huvitav on ka teabe lekkimine, mille käigus esitatud CERT-ile konfidentsiaalne aruanne ja eksploit jõudsid avalikult www.breachforums.st foorumisse, hoolimata teabe avalikustamise embargo olemasolust.
Allikas: opennet.ru
