Ve standardních knihovnách C uClibc a uClibc-ng, které se používají v mnoha vestavných a přenosných zařízeních, byla zjištěna zranitelnost (CVE nebyl přidělen), která umožňuje vložení falešných dat do DNS cache, což může být použito k podvržení IP adresy libovolné domény do cache a přesměrování dotazů na doménu na server útočníka.
Problém se týká různých linuxových firmware pro směrovače, přístupové body a zařízení internetu věcí, stejně jako linuxových distribucí pro vestavěné systémy, jako jsou OpenWRT a Embedded Gentoo. Bylo zaznamenáno, že zranitelnost se projevuje v zařízeních mnoha výrobců (například uClibc se používá ve firmwaru Linksys, Netgear a Axis), ale protože zranitelnost v uClibc a uClibc-ng zůstává neopravená, dosud nejsou zveřejněny podrobné informace o konkrétních zařízeních a výrobcích, u jejichž produktů je tento problém přítomen.
Zranitelnost je způsobena použitím předvídatelných identifikátorů transakcí v kódu pro odesílání DNS dotazů. Identifikační číslo DNS dotazu bylo vybíráno prostým zvyšováním čítače bez použití dodatečné randomizace čísel portů, což umožnilo zneužití DNS cache prostřednictvím předběžného odeslání UDP paketů s falešnými odpověďmi (odpověď bude přijata, pokud dorazila dříve než odpověď skutečná a obsahuje správný ID). serveru Na rozdíl od metody Kaminského navržené v roce 2008, není identifikátor transakce třeba hádat, protože je od začátku předvídatelný (zpočátku je nastaveno hodnoty 1, které se při každém dotazu zvyšuje, a nevolí se náhodně).

Ve specifikaci pro ochranu proti odhadu identifikátoru se doporučuje navíc použít náhodné rozdělení čísel výchozích síťových portů, ze kterých se odesílají DNS dotazy, což kompenzuje příliš malou velikost identifikátoru. Při zapnutí randomizace portů pro generování falešné odpovědi je třeba kromě odhadu 16bitového identifikátoru odhadnout také číslo síťového portu. V uClibc a uClibc-ng taková randomizace nebyla zjevně povolena (při volání bind nebyl uveden náhodný výchozí UDP port) a její použití záviselo na nastavení operačního systému.
Při vypnutí randomizace potů je identifikace inkrementálního identifikátoru požadavku označena jako triviální úkol. Ale i v případě použití randomizace musí útočník pouze uhádnout síťový port z rozsahu 32768–60999, k čemuž může použít masivní simultánní odesílání falešných odpovědí na různé síťové porty.

Přítomnost problému byla potvrzena ve všech aktuálních vydáních uClibc a uClibc-ng, včetně nejnovějších verzí uClibc 0.9.33.2 a uClibc-ng 1.0.40. V září 2021 byly informace o zranitelnosti zaslány do CERT/CC k dohodě o přípravě oprav. V lednu 2022 byly údaje o problému předány více než 200 výrobcům, kteří spolupracují s CERT/CC. V březnu byla pokus o jednotlivé spojení s projektovým správcem uClibc-ng, ale ten odpověděl, že není schopen zranitelnost opravit sám a doporučil veřejně zveřejnit informace o problému, očekávající pomoc při vývoji opravy od komunity. Z výrobců byl vydán NETGEAR s oznámením o vydání aktualizace s odstraněním zranitelnosti.
Zdroj: opennet.ru
