Fjernsårbarhed i OpenBSD IPv6-stak

I baggrundsprocessen slaacd, som er ansvarlig for IPv6-adresseautokonfiguration (IPv6 Stateless Address Autoconfiguration, RFC 4862) i OpenBSD, er der identificeret en sårbarhed, der fører til et bufferoverløb ved modtagelse af en specialdesignet IPv6-routerannonce (RA, Router Advertisement) .

Oprindeligt blev IPv6-adressens autokonfigurationsfunktion implementeret på kerneniveau, men fra og med OpenBSD 6.2 blev den flyttet til en separat uprivilegeret slaacd-proces. Denne proces er ansvarlig for at sende RS-meddelelser (Router Solicitation) og parse RA-svar (Router Advertisement) med oplysninger om routeren og netværksforbindelsesparametrene.

I februar rettede slaacd en fejl, der fik den til at gå ned, hvis 7 servere blev specificeret på RDNSS-listen (Recursive DNS Servers). Denne forglemmelse tiltrak sig opmærksomhed fra uafhængige forskere, som forsøgte at undersøge slaacd-koden for andre fejl, der opstår, når felter i RA-meddelelser analyseres. Analysen viste, at der er et andet problem i koden, som viser sig, når man behandler feltet DNSSL (DNS Search List), som omfatter lister over domænenavne og værtsskabeloner til DNS.

Hvert navn på DNSSL-listen er kodet ved hjælp af en null-afgrænser og mellemliggende en-byte-tags, der bestemmer størrelsen af ​​de data, der følger. Sårbarheden er forårsaget af, at et felt med en størrelse i listens parsing-kode kopieres til en variabel med en signeret heltalstype ("len = data[pos]"). Følgelig, hvis en værdi er angivet i feltet med den mest signifikante bit indstillet, vil denne værdi blive opfattet i den betingede operator som et negativt tal og kontrollen for den maksimalt tilladte størrelse (“if (len > 63 || len + pos) + 1 > datalen) {“) vil ikke virke, hvilket vil føre til et kald til memcpy med en parameter, hvis størrelse af de kopierede data overstiger bufferstørrelsen.

Fjernsårbarhed i OpenBSD IPv6-stak
Fjernsårbarhed i OpenBSD IPv6-stak


Kilde: opennet.ru

Tilføj en kommentar