Uff, už jsem podle skóre trochu bál, že to bude fakt 0-click na něco, co běží úplně všude. Sice asi trochu divadla okolo, nedokážu posoudit nutnost, ale možná to bylo fakt oprávněné, aby se pohnuly ledy.
Sice to sám nikde naštěstí nepoužívám, ale nechci to úplně zlehčovat. Už to, že mu odpovídaly stovky tisíc zařízení na nějaký scan ze Shodanu je peklo. I když tohle si ale říkám v podstatě pokaždé - WTF?, kdo tyhle služby nechá poslouchat na veřejné adrese (a je jedno jestli se bavíme o síť. browseru na tiskárny nebo nějakém otevřeném administračním rozhraní od router, switche atp.), zvlášť pokud je to posledních 10-15 let všechno většinou opt-in a musí se to někde explicitně povolit, pronatovat u IPv4 atd.
Předesílám, že s CUPS mám minimum zkušeností, všude jsem to vždycky vypínal, nebo odinstaloval, když to opravdu nebylo třeba a nikdy to vlastně moc nezkoumal. Ale zarazilo mě, když jsem si to četl, co tam je z dnešního pohledu za hrůzy. Teď nemyslím ty samotné validace na úrovni paketů, IPP atd., i když to vypadá taky pěkně. Ale vůbec celý ten koncept, že tam jsou stovky ovladačů od legacy tiskáren, které prostě pro ripování můžou volat nějaký systémový příkaz s takhle vysokými právy. Plus se tam ještě dají dynamicky poslat úplně nové (neověřené) pomocí PPD z random tiskárny zvenku. To mi přijde jako velká potenciální díra.
Jako chápu, že na některé své činnosti CUPS potřebuje vyšší práva - jako otevření socketů s privilegovanými porty, posílání do určitých lokálních rozhraní, ale jestli takhle běží rovnou všechno.. bez privilege separation. To zní pekelně. Byť asi RH based distribuce s povolenými SELinux pravidly by na tom mohly být líp.
I když fixnou ty konkrétní CVE, tak je to podle mě k zamyšlení, co s tím dál. Minimálně všechny ty legacy tiskárny, co tohle potřebují, by-default vypnout. Důrazně varovat, že přidávaná IPP tiskárna používá PPD s foo-rip deklarací a vyžadovat explicitní povolení.. atd.
CUPS je pod kapotou dost silenej. Viz "Can not print on Tuesday bug".
https://www.youtube.com/watch?v=-6fPfwixNLk
Pod kapotou se skryva divoka zmet scriptu, ktere se snazi "uhadnout" co a jak zpracovat.
Ono to je totiž dědictví divoké minulosti... Kdo si vzpomene, jak náročné bylo zprovoznit tisk 15 až 20 roků zpět? To se tisk obecně skládal z rovnáků no vohejbáky, aby to vůbec něco možná tisklo... Dneska je to už brnkačka o ničem, ale to dědictví si stále CUPS nese.
Asi by stálo za to zamyslet se nad situací a vytvořit CUPS-ng bez této historické zátěže. Sice by spousta majitelů historických tiskáren křičela, ale ti by mohli zůstat u současného CUPS.
To tedy je. Tuesday bug super!
Já chápu, že to v nějaké fázi bylo asi rychlejší takhle nahackovat, volat si externě file, perl.. Ale že nebyla nějaká tendence ty úkony, co tím dělají (nahrazování řetězců, identifikaci souborů atp.) třeba postupně u všech ovladačů převést na nějakou speciální interní knihovnu. Nebo budiž, pokud vyloženě potřebují interpretr, tak tam udělat třeba interní LUA skriptování, které bude mít přesně vydefinované omezení na to kam může přisupovat, kolik si vezme paměti atd.
Ale jestli tohle, stejně jako celý cupsd, běží pod právy roota, tak je to úplně šílené, přesně jak říkáte. (Tam ani nemusí být škodlivý kód, nebo podvržené PPD, stačí jedna blbá chyba v ošetření cyklu nebo změna chování externích utilit a může to třeba při RIPování nebo preprocessingu klidně zaplnit celý disk, partition)
Ale samozřejmě tady kecám od stolu, druhý největší problém po celé téhle "architektuře" bude v tom, že i kdyby to někdo zkoušel přepsat, tak nebude mít hardware, aby to ozkoušel.
Minimálně by podle mě měli vývojáři ty největší hrůzy identifikovat a udělat aspoň nějaké doporučení na "hardened" nastavení, případně to utáhnout a doplnit nějaké konfigurační direktivy. Chápu, že pro spousty lidí teď nebude řešením vypnout CUPS. A do budoucna to začít čistit a minimálně nějak dělit části, aby to běželo s různými oprávněními. Celé mi to tak trochu připomíná první monolitické mail servery, co si mohly volat různé ext. procesory, cca 20 let zpátky.
Uvidíme, co vyplave v druhém díle s Bonjour (dns-sd).
"kdo tyhle služby nechá poslouchat na veřejné adrese"
To mas easy. BFU si koupi krabku, nejak ji nekam zapoji kabely, a ono to nejak funguje. Proc by jako mel zkoumat proc a jak? Mno a typicka krabka ma proste vsude povoleno vsechno, protoze proc se pak s tim BFUckem dohadovat, ze si cosi koupil a ono mu to nefunguje, protoze nekde neco nezap.
Pus ti nmap a nech ho scanovat ... uvidis sam. Staci kdyz projedes svy okoli a uvidis veci ...
A uvidis to i u firem, sam se rozlidni po zdejsich diskusich, kde se henti "administratori" chodi ptat na uplny zaklady. Takze co bys od nich jako cekal?
Právě, že tohle mi to nejde moc do hlavy.
Podobně jako u těch routerů.
Za posledních řekněme 15 let jsem viděl hodně routerů a modemů různých druhů. Od profi, přes střední kategorii, něco od operátorů, až po různé nejlevnější Tendy atp. Pokaždé byla ta web administrace ve výchozím stavu vypnutá z WAN sítě. Totéž packet filtr, stavový fw, zavřená všechna spojení navazovaná zvenku. Pokud si explicitně neuděláš port forward.
Dobře je tam ještě dynamické otevírání např. přes UPnP, nebo STUN, ale to jsou typicky specifické druhy aplikací, které to opravdu potřebují ke své funkci a je to aktivní, jen když ta aplikace běží.
Ale pak tu často narazím na nějaké zprávičky, kdy je CVE pro chybu routeru (nevím ASUS, DLink..) v jeho web. administraci a k tomu se pojí info, že jsou jich stovky tisíc on-line s veřejným přístupem po nějakém scanu. K tomu právě směřuje to WTF? To jsou nějaké hloupé návody, úplný laik se tam většinou ani nedokliká, aby tohle nastavil.
Podobně u tohohle problému s CUPSem, kdo si úmyslně pronatuje port 631 TCP/UDP na konkrétní IP dovnitř (ještě na stroj s Linuxem nebo řekněme OS X, kde běží cups-browser). To se nestane samo a nic tím nezískáš.
Jediné vysvětlení, co mě napadá, že to byly většinově IPv6 hosty (ve statistice nezveřejňuje). Viděl jsem ještě pár let zpátky výchozí packet filtry opravdu nastavené jen pro IPv4, takže cokoliv co IPv6 dostalo adresu přes PD, bylo rovnou dostupné z internetu. Například jedna řada ASUS modemů to neuměla nastavit vůbec (teda z GUI, ssh/telnetem to samozřejmě šlo ručně, ale jen do restartu). Ale i to už se výrazně zlepšilo u novějších zařízení, co jsem viděl.
Nezapomeňte na routery, které samy mají instalované cups - a pak opravdu stačí málo (třeba jedno kliknutí na Povolit administraci z WAN
- protože nepochopíte, že WAN není WLAN ), a nesštěstí je hotovo.
Je pravda, že takovou věc jsem už pěkných pár let nepotkal, ale taky obvykle rychle vyměním firmware za OpenWRT nebo tak něco...