Vzdálená zranitelnost v OpenBSD IPv6 stack

V procesu slaacd na pozadí, který je zodpovědný za automatickou konfiguraci IPv6 adres (IPv6 Stateless Address Autoconfiguration, RFC 4862) v OpenBSD, byla identifikována zranitelnost, která vede k přetečení vyrovnávací paměti při příjmu speciálně navržené reklamy na router IPv6 (RA, Router Advertisement) .

Zpočátku byla funkce autokonfigurace IPv6 adres implementována na úrovni jádra, ale počínaje OpenBSD 6.2 byla přesunuta do samostatného neprivilegovaného procesu slaacd. Tento proces je zodpovědný za odesílání zpráv RS (Router Solicitation) a analýzu odpovědí RA (Router Advertisement) s informacemi o routeru a parametrech síťového připojení.

V únoru slaacd opravil chybu, která způsobila jeho zhroucení, pokud bylo v seznamu RDNSS (Rekurzivní DNS servery) uvedeno 7 serverů. Toto přehlédnutí přitáhlo pozornost nezávislých výzkumníků, kteří se pokusili prozkoumat slaacd kód na další chyby, které se vyskytují při analýze polí ve zprávách RA. Analýza ukázala, že v kódu je ještě jeden problém, který se projevuje při zpracování pole DNSSL (DNS Search List), které obsahuje seznamy doménových jmen a šablony hostitelů pro DNS.

Každý název v seznamu DNSSL je zakódován pomocí oddělovače null a mezilehlých jednobajtových značek, které určují velikost následujících dat. Chyba zabezpečení je způsobena tím, že v kódu analýzy seznamu je pole s velikostí zkopírováno do proměnné s typem celého čísla se znaménkem („len = data[pos]“). Pokud je tedy v poli s nastaveným nejvýznamnějším bitem uvedena hodnota, bude tato hodnota v podmíněném operátoru vnímána jako záporné číslo a kontrola maximální povolené velikosti („if (len > 63 || len + pos + 1 > datalen) {“) nebude fungovat, což povede k volání memcpy s parametrem, jehož velikost kopírovaných dat přesahuje velikost vyrovnávací paměti.

Vzdálená zranitelnost v OpenBSD IPv6 stack
Vzdálená zranitelnost v OpenBSD IPv6 stack


Zdroj: opennet.ru

Přidat komentář