I bakgrundsprocessen slaacd, som ansvarar för automatisk konfiguration av IPv6-adresser (IPv6 Stateless Address Autoconfiguration, RFC 4862) i OpenBSD, har en sÄrbarhet upptÀckts som leder till buffertöverskridning vid mottagande av en sÀrskilt utformad IPv6-routerannonsering (RA, Router Advertisement).
Den ursprungliga funktionen för automatisk konfiguration av IPv6-adresser implementerades pÄ kÀrnnivÄ, men frÄn och med OpenBSD 6.2 har den flyttats till en separat icke-privilegierad process, slaacd. Denna process ansvarar för att skicka RS-meddelanden (Router Solicitation) och tolka RA-svar (Router Advertisement) med information om routern och nÀtverksanslutningsparametrar.
I februari ÄtgÀrdades en bugg i slaacd som ledde till krascher nÀr 7 angavs. servrar i listan över RDNSS (Recursive DNS Servers). Denna brist fÄngade uppmÀrksamheten hos oberoende forskare, som försökte undersöka koden i slaacd för att hitta andra fel som uppstÄr vid tolkning av fÀlt i RA-meddelanden. Analysen visade att koden innehÄller ett ytterligare problem som uppstÄr vid hantering av fÀltet DNSSL (DNS Search List), som omfattar listor domÀnnamn och mönster av vÀrdar för DNS.
Varje namn i DNSSL-listan kodas med hjÀlp av en null-teckenavskiljare och mellanliggande enbytesetiketter som definierar storleken pÄ de efterföljande data. SÄrbarheten uppstÄr eftersom storleksfÀltet i tolkningen kopieras till en variabel av den teckensatta typen integer ("len = data[pos]"). Om ett vÀrde med det mest signifikanta biten angivs i fÀltet, uppfattas detta vÀrde i if-satsen som ett negativt tal och kontrollen för den maximalt tillÄtna storleken ("if (len > 63 || len + pos + 1 > datalen) {") misslyckas, vilket leder till att memcpy-anropet utförs med en parameter vars storlek överskrider buffertens storlek.


KĂ€lla: opennet.ru
