Pred pár dňami vyšla správa, že v štandardných knižniciach C uClibc a uClibc-ng, používané v mnohých vstavaných a prenosných zariadeniach, bola identifikovaná zraniteľnosť (s ešte neprideleným CVE), čo umožňuje nahradenie fiktívnych údajov vo vyrovnávacej pamäti DNS, ktoré možno použiť na sfalšovanie IP adresy ľubovoľnej domény vo vyrovnávacej pamäti a presmerovanie požiadaviek na doménu na server útočníka.
O probléme sa spomína, že toto ovplyvňuje rôzny firmvér Linuxu pre smerovače, prístupové body a zariadenia internetu vecí, ako aj vstavané distribúcie Linuxu ako OpenWRT a Embedded Gentoo.
O zraniteľnosti
Zraniteľnosť je spôsobené použitím predvídateľných identifikátorov transakcií v kóde na odosielanie dopytov DNS. ID dotazu DNS bolo zvolené jednoduchým zvýšením počítadla bez ďalšej náhodnosti čísel portov, ktoré umožnil otráviť vyrovnávaciu pamäť DNS preventívnym odosielaním UDP paketov s falošnými odpoveďami (odpoveď bude akceptovaná, ak príde pred odpoveďou zo skutočného servera a bude obsahovať správnu identifikáciu).
Na rozdiel od Kaminského metódy navrhnutej v roku 2008 nie je ani potrebné uhádnuť ID transakcie, pretože je spočiatku predvídateľné (na začiatku je nastavené na 1, ktorá sa zvyšuje s každou požiadavkou a nie je vyberané náhodne).
chrániť sa proti hádaniu ID, špecifikácia ďalej odporúča použitie náhodného rozdelenia čísel sieťových portov pôvodu, z ktorého sa odosielajú DNS dotazy, čo kompenzuje nedostatočnú veľkosť ID.
Keď je povolená náhodnosť portov, na vytvorenie fiktívnej odpovede je okrem výberu 16-bitového identifikátora potrebné vybrať aj číslo sieťového portu. V uClibc a uClibc-ng takáto randomizácia nebola explicitne povolená (pri volaní bind nebol špecifikovaný náhodný zdrojový UDP port) a jej implementácia závisela od konfigurácie operačného systému.
Keď je randomizácia portov zakázaná, určenie, ktoré ID požiadavky sa má zvýšiť, je označené ako triviálna úloha. Ale aj v prípade randomizácie útočníkovi stačí uhádnuť sieťový port z rozsahu 32768-60999, na čo môže využiť masívne simultánne posielanie fiktívnych odpovedí na rôzne sieťové porty.
Problém bol potvrdený vo všetkých aktuálnych verziách uClibc a uClibc-ng, vrátane najnovších verzií uClibc 0.9.33.2 a uClibc-ng 1.0.40.
„Je dôležité poznamenať, že zraniteľnosť ovplyvňujúca štandardnú knižnicu C môže byť dosť zložitá,“ napísal tím tento týždeň v blogovom príspevku.
"Nielenže by došlo k stovkám alebo tisíckam volaní zraniteľnej funkcie na viacerých miestach v jedinom programe, ale táto zraniteľnosť by ovplyvnila neurčitý počet iných programov od viacerých dodávateľov nakonfigurovaných na používanie tejto knižnice."
V septembri 2021 boli odoslané informácie o zraniteľnosti na CERT/CC na koordinovanú prípravu poľa. V januári 2022 problém bol zdieľaný s viac ako 200 výrobcami spojené s CERT/CC.
V marci došlo k pokusu samostatne kontaktovať správcu projektu uClibc-ng, ale ten odpovedal, že sám nedokáže odstrániť zraniteľnosť a odporučil verejné zverejnenie informácií o probléme v nádeji, že získa pomoc pri vývoji opravy. komunita. Od výrobcov spoločnosť NETGEAR oznámila vydanie aktualizácie s odstránením zraniteľnosti.
Je dôležité poznamenať, že zraniteľnosť ovplyvňujúca štandardnú knižnicu C môže byť pomerne zložitá. Nielenže by došlo k stovkám alebo tisíckam volaní zraniteľnej funkcie vo viacerých bodoch v jednom programe, ale táto zraniteľnosť by ovplyvnila neurčitý počet iných programov od viacerých dodávateľov nakonfigurovaných na používanie tejto knižnice.
Je potrebné poznamenať, že zraniteľnosť sa prejavuje v zariadeniach od mnohých výrobcov (napríklad uClibc sa používa vo firmvéri od spoločností Linksys, Netgear a Axis), ale keďže zraniteľnosť zostáva neopravená v uClibc a uClibc-ng, podrobné informácie o zariadeniach a konkrétnych výrobcov, v ktorých produktoch je problém, kým nebudú zverejnené.
Konečne ak máte záujem dozvedieť sa o tom viac, môžete skontrolovať podrobnosti Na nasledujúcom odkaze.