U pozadinskom procesu slaacd, koji je zadužen za automatsku konfiguraciju IPv6 adresa u OpenBSD-u (IPv6 Stateless Address Autoconfiguration, RFC 4862), otkrivena je ranjivost koja dovodi do prelivanja bafera prilikom primanja posebno oblikovanog IPv6 obaveštenja rutera (RA, Router Advertisement).
Izvorno je funkcionalnost automatske konfiguracije IPv6 adresa bila implementirana na nivou jezgra, ali od OpenBSD 6.2 prebačena je u zaseban privilegirani proces slaacd. Taj proces je zadužen za slanje poruka RS (Router Solicitation) i analizu odgovora RA (Router Advertisement) sa informacijama o ruteru i parametrima mrežne veze.
U februaru je u slaacd ispravljena greška koja dovodi do pada sistema u slučaju kada se navedu 7 poslužitelja u списку RDNSS (Recursive DNS Servers). Ova propust privukao je pažnju nezavisnih istraživača koji su pokušali da analiziraju kod slaacd u potrazi za drugim greškama koje se javljaju prilikom analize polja u RA porukama. Analiza je pokazala da kod sadrži još jedan problem koji se manifestuje prilikom obrade polja DNSSL (DNS Search List), uključujući liste domenaskih imena i šablone hostova za DNS.
Svako ime u DNSSL listi kodira se korišćenjem separatora sa nultim kodom i međupodataka o jednoj bajtu koji definišu veličinu narednih podataka. Ranjivost je uzrokovana tim što se u kodu za analizu liste polje sa veličinom kopira u promenljivu sa potpisanim integer tipom ("len = data[pos]"). Dakle, u slučaju kada je u polju navedena vrednost sa postavljenim najvišim bitom, ta vrednost će biti tretirana u uslovnom operatoru kao negativni broj, a provera na maksimalnu dozvoljenu veličinu ("if (len > 63 || len + pos + 1 > datalen) {") neće funkcionisati, što će dovesti do poziva memcpy sa parametrom, gde veličina kopiranih podataka premašuje veličinu bafera.


Izvor: opennet.ru
