W tle procesu slaacd, odpowiadającego w OpenBSD za autokonfigurację adresów IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), wykryto lukę, prowadzącą do przepełnienia bufora w przypadku otrzymania specjalnie sformułowanej reklamy routera IPv6 (RA, Router Advertisement).
Początkowo funkcjonalność automatycznej konfiguracji adresów IPv6 była realizowana na poziomie jądra, ale od wersji OpenBSD 6.2 została przeniesiona do osobnego nieuprzywilejowanego procesu slaacd. Wskazany proces odpowiada za wysyłanie wiadomości RS (Router Solicitation) i analizę odpowiedzi RA (Router Advertisement) zawierających informacje o routerze i parametrach połączenia sieciowego.
W lutym w slaacd naprawiono błąd prowadzący do awaryjnego zakończenia w przypadku wskazania 7 serwerów na liście RDNSS (Recursive DNS Servers). Tego rodzaju potknięcie zwróciło uwagę niezależnych badaczy, którzy próbowali zbadać kod slaacd pod kątem innych błędów występujących podczas analizy pól w wiadomościach RA. Analiza wykazała, że w kodzie istnieje jeszcze jeden problem, objawiający się podczas przetwarzania pola DNSSL (DNS Search List), obejmującego listy nazw domen i wzorców hostów dla DNS.
Każda nazwa w liście DNSSL jest kodowana za pomocą separatora z zerowym kodem oraz pośrednich jednobajtowych znaczników określających rozmiar następujących danych. Luka jest spowodowana tym, że w kodzie analizy listy pole z rozmiarem jest kopiowane do zmiennej typu całkowitego ze znakiem ("len = data[pos]"). W związku z tym, w przypadku podania w polu wartości z ustawionym najwyższym bitem, wartość ta zostanie przyjęta w operatorze warunkowym jako liczba ujemna, a sprawdzenie maksymalnego dozwolonego rozmiaru ("if (len > 63 || len + pos + 1 > datalen) {") nie zadziała, co doprowadzi do wywołania memcpy z parametrem, gdzie rozmiar kopiowanych danych przekracza rozmiar bufora.


Źródło: opennet.ru
