В стандартните C библиотеки uClibc и uClibc-ng, използвани в много вградени и преносими устройства, е открита уязвимост (CVE не е присвоен), която позволява подмяна на фалшиви данни в кеша на DNS, което може да се използва за подмяна на IP адреса на произволен домейн и пренасочване на заявки към домейна на сървър на злонамеренец.
Проблемът засяга различни Linux фърмуери за рутери, точки за достъп и устройства на интернет на нещата, както и Linux дистрибуции за вградени системи, като OpenWRT и Embedded Gentoo. Отбелязва се, че уязвимостта се проявява в устройства на много производители (например, uClibc се използва в фърмуерите на Linksys, Netgear и Axis), но тъй като в uClibc и uClibc-ng уязвимостта остава неизправена, детайлните данни за конкретни устройства и производители, в продуктите на които присъства проблемът, не се разкриват.
Уязвимостта е предизвикана от използването на предсказуеми идентификатори за транзакции в кода за изпращане на DNS заявки. Идентификационният номер на DNS заявката се избира чрез просто увеличаване на брояча без прилагане на допълнителна рандомизация на портовите номера, което позволява да се постигне отравяне на кеша на DNS чрез предизвикателно изпращане на UDP пакети с фалшиви отговори (отговорът ще бъде приет, ако е получен преди реалния отговор и включва коректен ID). сървър В контекста на предложената през 2008 година методология на Камински, идентификаторът на транзакцията дори не трябва да се предполага, тъй като той е съвсем предсказуем (в началото стойността е зададена на 1, която при всяка заявка се увеличава, а не се избира случайно).

В спецификациите за защита от подбиране на идентификатори се препоръчва допълнително да се прилага случайно разпределение на номерата на изходните мрежови портове, от които се изпращат DNS заявки, което компенсира недостатъчно голямата стойност на идентификатора. При включване на рандомизация на портовете за генериране на фалшив отговор, освен подбиране на 16-битовия идентификатор, трябва да се подбере и номер на мрежовия порт. В uClibc и uClibc-ng подобна рандомизация не е включена явно (при повикване на bind не се указва случайният изходен UDP порт) и нейното прилагане зависи от настройките на операционната система.
Когато се деактивира произволността на потока, определянето на инкрементален идентификатор на запитването е тривиална задача. Но дори при използване на произволност, атакуващият трябва само да познае мрежовия порт от диапазона 32768–60999, за което може да използва масирана едновременна изпращане на фиктивни отговори по различни мрежови портове.

Проблемът е потвърден във всички актуални версии на uClibc и uClibc-ng, включително най-новите версии на uClibc 0.9.33.2 и uClibc-ng 1.0.40. През септември 2021 г. информацията за уязвимостта беше изпратена до CERT/CC за координирана подготовка на корекции. През януари 2022 г. данните за проблема бяха предадени на повече от 200 производители, сътрудничещи с CERT/CC. През март беше направен опит за отделно свързване с проекта uClibc-ng, но той отговори, че не е в състояние сам да коригира уязвимостта и препоръча публично разкриване на информацията за проблема, с надежда да получи помощ от общността за разработка на корекция. От производителите, които обявиха актуализация с корекция на уязвимостта, е NETGEAR.
Източник: opennet.ru
