Attālā ievainojamība OpenBSD IPv6 stekā

Fona procesā slaacd, kas ir atbildīgs par IPv6 adrešu automātisko konfigurāciju (IPv6 Stateless Address Autoconfiguration, RFC 4862) OpenBSD, ir konstatēta ievainojamība, kas izraisa bufera pārpildīšanu, saņemot īpaši izstrādātu IPv6 maršrutētāja reklāmu (RA, Router Advertisement) .

Sākotnēji IPv6 adrešu automātiskās konfigurācijas funkcionalitāte tika ieviesta kodola līmenī, taču, sākot ar OpenBSD 6.2, tā tika pārvietota uz atsevišķu nepievilcīgu slaacd procesu. Šis process ir atbildīgs par RS (Router Solicitation) ziņojumu nosūtīšanu un RA (Router Advertisement) atbilžu parsēšanu ar informāciju par maršrutētāju un tīkla savienojuma parametriem.

Februārī slaacd izlaboja kļūdu, kas izraisīja tā avāriju, ja RDNSS (Recursive DNS Servers) sarakstā tika norādīti 7 serveri. Šī pārraudzība piesaistīja neatkarīgu pētnieku uzmanību, kuri mēģināja pārbaudīt slaacd kodu, lai noteiktu citas kļūdas, kas rodas, parsējot laukus RA ziņojumos. Analīze parādīja, ka kodā ir vēl viena problēma, kas izpaužas, apstrādājot DNSSL (DNS meklēšanas saraksta) lauku, kas ietver domēna nosaukumu sarakstus un DNS resursdatora veidnes.

Katrs vārds DNSSL sarakstā ir kodēts, izmantojot nulles atdalītāju un viena baita tagus, kas nosaka sekojošo datu lielumu. Ievainojamību izraisa fakts, ka saraksta parsēšanas kodā lauks ar lielumu tiek kopēts mainīgā ar vesela skaitļa tipu (“len = data[pos]”). Attiecīgi, ja laukā ar visnozīmīgāko bitu kopu ir norādīta vērtība, šī vērtība nosacījuma operatorā tiks uztverta kā negatīvs skaitlis un maksimālā pieļaujamā izmēra pārbaude (“if (len > 63 || len + poz. + 1 > datalen) {“) nedarbosies, kas novedīs pie izsaukšanas uz memcpy ar parametru, kura kopēto datu lielums pārsniedz bufera lielumu.

Attālā ievainojamība OpenBSD IPv6 stekā
Attālā ievainojamība OpenBSD IPv6 stekā


Avots: opennet.ru

Pievieno komentāru