Kwetsberens op ôfstân yn OpenBSD IPv6-stapel

Yn it eftergrûnproses slaacd, dat ferantwurdlik is foar IPv6-adres autokonfiguraasje (IPv6 Stateless Address Autoconfiguration, RFC 4862) yn OpenBSD, is in kwetsberens identifisearre dy't liedt ta in bufferoverflow by it ûntfangen fan in spesjaal ûntwurpen IPv6-router-advertinsje (RA, Router Advertisement) .

Yn earste ynstânsje waard de IPv6-adres autokonfiguraasjefunksjonaliteit ymplementearre op it kernelnivo, mar begjinnend mei OpenBSD 6.2 waard it ferpleatst nei in apart unprivileged slaacd-proses. Dit proses is ferantwurdlik foar it ferstjoeren fan RS (Router Solicitation) berjochten en parsing RA (Router Advertisement) antwurden mei ynformaasje oer de router en netwurkferbining parameters.

Yn febrewaris reparearre slaacd in brek dy't feroarsake dat it crashte as 7 servers waarden oantsjutte yn 'e list RDNSS (Recursive DNS Servers). Dit tafersjoch luts de oandacht fan ûnôfhinklike ûndersikers dy't besocht te ûndersykjen de slaacd koade foar oare flaters dy't foarkomme by it parsearjen fan fjilden yn RA berjochten. De analyze liet sjen dat d'r in oar probleem is yn 'e koade, dy't him manifestearret by it ferwurkjen fan it DNSSL (DNS Search List) fjild, dat listen mei domeinnammen en hostsjabloanen foar DNS omfettet.

Elke namme yn 'e DNSSL-list wurdt kodearre mei in null-delimiter en tuskenlizzende ien-byte-tags dy't de grutte fan' e gegevens dy't folgje bepale. De kwetsberens wurdt feroarsake troch it feit dat yn de list parsing koade, in fjild mei in grutte wurdt kopiearre yn in fariabele mei in tekene hiel getal type ("len = data[pos]"). Dêrom, as in wearde wurdt oantsjutte yn it fjild mei de meast wichtige bit set, dizze wearde wurdt waarnommen yn de betingst operator as in negatyf nûmer en de kontrôle foar de maksimale tastiene grutte ("as (len> 63 || len + pos + 1 > datalen) {“) sil net wurkje, wat sil liede ta in oprop nei memcpy mei in parameter wêrfan de grutte fan 'e kopieare gegevens de buffergrutte grutter is.

Kwetsberens op ôfstân yn OpenBSD IPv6-stapel
Kwetsberens op ôfstân yn OpenBSD IPv6-stapel


Boarne: opennet.ru

Add a comment