V ozadju procesa slaacd, ki v OpenBSD odgovarja za samodejno konfiguracijo naslovov IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), je bila ugotovljena ranljivost, ki vodi do prelivanja pomnilnika ob prejemu posebej oblikovanega obvestila o usmerjevalniku IPv6 (RA, Router Advertisement).
Sprva je bila funkcionalnost samodejne nastavitve naslovov IPv6 izvedena na ravni jedra, vendar je bila od različice OpenBSD 6.2 prenesena v ločen postopek brez privilegijev, slaacd. Ta postopek je odgovoren za pošiljanje sporočil RS (Router Solicitation) in obravnavo odgovorov RA (Router Advertisement) z informacijami o usmerjevalniku in parametrih omrežne povezave.
Februarja je bila v slaacd odpravljena napaka, ki je povzročala zrušitev v primeru navedbe 7 strežnikov na seznamu RDNSS (Recursive DNS Servers). Takšna napaka je pritegnila pozornost neodvisnih raziskovalcev, ki so želeli preučiti kodo slaacd zaradi drugih napak, ki se pojavijo pri obravnavi polj v sporočilih RA. Analiza je pokazala, da v kodi obstaja še ena težava, ki se kaže pri obdelavi polja DNSSL (DNS Search List), ki vključuje sezname domena in vzorce gostiteljev za DNS.
Vsako ime v seznamu DNSSL je kodirano z uporabo ločila z ničelnim kodom in vmesnimi enobitnimi oznakami, ki določajo velikost naslednjih podatkov. Ranljivost je povzročena z dejstvom, da se v kodi za obravnavo seznama polje z velikostjo kopira v spremenljivko z znakovnim tipom integer ("len = data[pos]"). Tako bo v primeru, da je v polju navedena vrednost z nastavljeno višjo bitno, bila ta vrednost v pogojnem operatorju obravnavana kot negativno število, kar pomeni, da preverjanje za največjo dovoljeno velikost ("if (len > 63 || len + pos + 1 > datalen) {") ne bo delovalo, kar bo privedlo do klica memcpy s parametrom, katerega velikost kopiranih podatkov presega velikost pomnilnika.


Izvor: opennet.ru
