Ekstern sårbarhet i OpenBSD IPv6-stack

I bakgrunnsprosessen slaacd, som er ansvarlig for IPv6-adresse autokonfigurasjon (IPv6 Stateless Address Autoconfiguration, RFC 4862) i OpenBSD, er det identifisert en sårbarhet som fører til bufferoverløp ved mottak av en spesialdesignet IPv6-ruterannonse (RA, Router Advertisement) .

Opprinnelig ble IPv6-adressens autokonfigurasjonsfunksjonalitet implementert på kjernenivå, men fra og med OpenBSD 6.2 ble den flyttet til en separat uprivilegert slaacd-prosess. Denne prosessen er ansvarlig for å sende RS-meldinger (Router Solicitation) og analysere RA-svar (Router Advertisement) med informasjon om ruteren og nettverkstilkoblingsparametere.

I februar fikset slaacd en feil som fikk den til å krasje hvis 7 servere ble spesifisert i RDNSS-listen (Recursive DNS Servers). Denne forglemmelsen tiltrakk seg oppmerksomheten til uavhengige forskere som prøvde å undersøke slaacd-koden for andre feil som oppstår ved parsing av felt i RA-meldinger. Analysen viste at det er et annet problem i koden, som manifesterer seg ved behandling av feltet DNSSL (DNS Search List), som inkluderer lister over domenenavn og vertsmaler for DNS.

Hvert navn i DNSSL-listen er kodet ved hjelp av en null-skilletegn og mellomliggende en-byte-koder som bestemmer størrelsen på dataene som følger. Sårbarheten er forårsaket av det faktum at i listeparsing-koden kopieres et felt med en størrelse til en variabel med en signert heltallstype ("len = data[pos]"). Følgelig, hvis en verdi med det mest signifikante bitsettet er spesifisert i feltet, vil denne verdien bli oppfattet i den betingede operatøren som et negativt tall og sjekken for den maksimalt tillatte størrelsen (“if (len > 63 || len + pos) + 1 > datalen) {“) vil ikke fungere, noe som vil føre til et kall til memcpy med en parameter hvis størrelse på de kopierte dataene overstiger bufferstørrelsen.

Ekstern sårbarhet i OpenBSD IPv6-stack
Ekstern sårbarhet i OpenBSD IPv6-stack


Kilde: opennet.ru

Legg til en kommentar