V pozadí procesu slaacd, který v OpenBSD zajišťuje automatickou konfiguraci adres IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), byla odhalena zranitelnost vedoucí k přetečení vyrovnávací paměti při příjmu speciálně upraveného oznámení směrovače IPv6 (RA, Router Advertisement).
Původně byla funkce automatického nastavení adres IPv6 implementována na úrovni kernelu, ale od OpenBSD 6.2 byla přesunuta do samostatného nepriviligovaného procesu slaacd. Tento proces se stará o odesílání zpráv RS (Router Solicitation) a analýzu odpovědí RA (Router Advertisement) obsahujících informace o směrovači a parametrech síťového připojení.
V únoru byla v slaacd opravena chyba, která vedla k havarijnímu ukončení v případě uvedení 7 servery ve výčtu RDNSS (Recursive DNS Servers). Tato chyba přitáhla pozornost nezávislých výzkumníků, kteří se pokusili prozkoumat kód slaacd za účelem nalezení dalších chyb vznikajících při analýze polí ve zprávách RA. Analýza ukázala, že v kódu existuje ještě jeden problém, který se projevuje při zpracování pole DNSSL (DNS Search List), obsahujícího seznamy doménových jmen a vzory hostitelů pro DNS.
Každé jméno v seznamu DNSSL je kódováno pomocí oddělovače s nulovým kódem a mezilehlých jedno-bajtových značek, které určují velikost následujících dat. Zranitelnost je způsobena tím, že v kódu pro analýzu seznamu je pole s velikostí kopírováno do proměnné se znaménkovým celočíselným typem ("len = data[pos]"). V případě, že je v poli uvedena hodnota se zapnutým nejvyšším bitem, bude tato hodnota v podmínkovém operátoru interpretována jako záporné číslo a kontrola maximální povolené velikosti ("if (len > 63 || len + pos + 1 > datalen) {") bude selhávat, což povede k volání memcpy s parametrem, jehož velikost kopírovaných dat překračuje velikost vyrovnávací paměti.


Zdroj: opennet.ru
