OpenBSD IPv6 -pinon etähaavoittuvuus

Taustaprosessissa slaacd, joka vastaa IPv6-osoitteen automaattisesta määrityksestä (IPv6 Stateless Address Autoconfiguration, RFC 4862) OpenBSD:ssä, on tunnistettu haavoittuvuus, joka johtaa puskurin ylivuotoon, kun vastaanotetaan erityisesti suunniteltu IPv6-reititinilmoitus (RA, Router Advertisement). .

Aluksi IPv6-osoitteen automaattinen määritystoiminto toteutettiin ydintasolla, mutta OpenBSD 6.2:sta alkaen se siirrettiin erilliseen etuoikeutettuun slaacd-prosessiin. Tämä prosessi on vastuussa RS (Router Solicitation) -viestien lähettämisestä ja RA (Router Advertisement) -vastausten jäsentämisestä reitittimen ja verkkoyhteyden parametrien tiedoilla.

Helmikuussa slaacd korjasi bugin, joka aiheutti sen kaatumisen, jos RNSS (Recursive DNS Servers) -luettelossa määritettiin 7 palvelinta. Tämä huomio kiinnitti riippumattomien tutkijoiden huomion, jotka yrittivät tutkia slaacd-koodia muiden virheiden varalta, joita esiintyy jäsennettäessä kenttiä RA-sanomissa. Analyysi osoitti, että koodissa on toinen ongelma, joka ilmenee käsiteltäessä DNSSL (DNS Search List) -kenttää, joka sisältää luettelot DNS:n nimistä ja isäntämalleista.

Jokainen DNSSL-luettelon nimi on koodattu käyttämällä nolla-erotinta ja välissä olevia yksitavuisia tunnisteita, jotka määrittävät seuraavien tietojen koon. Haavoittuvuus johtuu siitä, että listan jäsennyskoodissa kenttä, jolla on koko, kopioidaan muuttujaan, jolla on etumerkitty kokonaislukutyyppi ("len = data[pos]"). Vastaavasti, jos arvo määritetään kenttään, jossa on suurin bittijoukko, tämä arvo havaitaan ehdollisessa operaattorissa negatiivisena lukuna ja suurimman sallitun koon tarkistus ("if (len > 63 || len + pos + 1 > datalen) {“) ei toimi, mikä johtaa kutsuun memcpyyn parametrilla, jonka kopioitujen tietojen koko ylittää puskurin koon.

OpenBSD IPv6 -pinon etähaavoittuvuus
OpenBSD IPv6 -pinon etähaavoittuvuus


Lähde: opennet.ru

Lisää kommentti