Luka w uClibc i uClibc-ng, umożliwiająca fałszowanie danych w pamięci podręcznej DNS

W standardowych bibliotekach C uClibc i uClibc-ng, stosowanych w wielu urządzeniach wbudowanych i przenośnych, wykryto lukę (CVE nie przypisano), która umożliwia wprowadzenie fałszywych danych do pamięci podręcznej DNS, co może być wykorzystane do podmiany IP dowolnej domeny w pamięci podręcznej i przekierowania zapytań do domeny na serwer napastnika.

Problem dotyczy różnych firmware'ów Linuksa dla routerów, punktów dostępu i urządzeń Internetu rzeczy, a także dystrybucji Linuksa dla systemów wbudowanych, takich jak OpenWRT i Embedded Gentoo. Zauważono, że luka występuje w urządzeniach wielu producentów (na przykład, uClibc jest używany w firmware'ach Linksys, Netgear i Axis), ale ponieważ w uClibc i uClibc-ng luka pozostaje nieusunięta, szczegółowe informacje na temat konkretnych urządzeń i producentów, w których produktach występuje problem, nie są na razie ujawniane.

Luka jest spowodowana używaniem w kodzie wysyłania zapytań DNS przewidywalnych identyfikatorów transakcji. Identyfikator zapytania DNS wybierany był poprzez proste zwiększanie licznika bez dodatkowej randomizacji numerów portów, co umożliwiało wadliwe wypełnienie pamięci podręcznej DNS poprzez prewencyjne wysyłanie pakietów UDP z fałszywymi odpowiedziami (odpowiedź zostanie zaakceptowana, jeśli dotarła wcześniej niż odpowiedź prawdziwa i obejmuje poprawny ID). serwera W przeciwieństwie do metody Kamińskiego zaproponowanej w 2008 roku, identyfikatora transakcji nie trzeba nawet zgadywać, ponieważ jest on od początku przewidywalny (na początku jest ustawiana wartość 1, która przy każdym zapytaniu wzrasta, a nie jest wybierana losowo).

Luka w uClibc i uClibc-ng, umożliwiająca fałszowanie danych w pamięci podręcznej DNS

W specyfikacji ochrony przed przewidywaniem identyfikatora zaleca się dodatkowe stosowanie losowego rozkładu numerów portów sieciowych, z których wysyłane są zapytania DNS, co kompensuje zbyt mały rozmiar identyfikatora. Przy włączeniu randomizacji portów do tworzenia fałszywej odpowiedzi, oprócz przewidywania 16-bitowego identyfikatora, należy również ustalić numer portu sieciowego. W uClibc i uClibc-ng podobna randomizacja nie była jawnie włączana (przy wywołaniu bind nie wskazywano losowego portu UDP) i jej stosowanie zależało od ustawień systemu operacyjnego.

Wyłączenie randomizacji potów sprawia, że określenie inkrementowanego identyfikatora żądania staje się trywialne. Jednak nawet w przypadku zastosowania randomizacji, atakującemu wystarczy tylko zgadnąć port sieciowy z zakresu 32768–60999, co można osiągnąć poprzez masowe jednoczesne wysyłanie fałszywych odpowiedzi do różnych portów sieciowych.

Luka w uClibc i uClibc-ng, umożliwiająca fałszowanie danych w pamięci podręcznej DNS

Problem został potwierdzony we wszystkich aktualnych wersjach uClibc i uClibc-ng, w tym w najnowszych wersjach uClibc 0.9.33.2 i uClibc-ng 1.0.40. W wrześniu 2021 roku informacje o podatności zostały przesłane do CERT/CC w celu skoordynowanego przygotowania poprawek. W styczniu 2022 roku dane dotyczące problemu zostały przekazane do ponad 200 producentów współpracujących z CERT/CC. W marcu podjęto próbę kontaktu z osobą odpowiedzialną za projekt uClibc-ng, ale odpowiedziała, że nie jest w stanie samodzielnie naprawić podatności i zaleciła publiczne ujawnienie informacji o problemie, licząc na pomoc społeczności w opracowaniu poprawki. NETGEAR poinformował o wydaniu aktualizacji eliminującej podatność.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster