În procesul de fundal slaacd, responsabil în OpenBSD pentru autoconfigurarea adreselor IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), a fost identificată o vulnerabilitate care duce la o suprasarcină de buffer la primirea unui anunț de rutare IPv6 (RA, Router Advertisement) special conceput.
Inițial, funcționalitatea de autocorectare a adreselor IPv6 a fost implementată la nivel de nucleu, dar începând cu OpenBSD 6.2 a fost mutată într-un proces neprivilegiat separat, slaacd. Acest proces este responsabil pentru trimiterea mesajelor RS (Router Solicitation) și pentru analiza răspunsurilor RA (Router Advertisement) cu informații despre router și parametrii de conectare la rețea.
În februarie, în slaacd a fost corectată o eroare care ducea la o terminare anormală în cazul în care 7 servere era în lista RDNSS (Recursive DNS Servers). O astfel de omisiune a atras atenția cercetătorilor independenți, care au încercat să analizeze codul slaacd în căutarea altor erori care apar la analiza câmpurilor din mesajele RA. Analiza a arătat că există o altă problemă în cod, care se manifestă la procesarea câmpului DNSSL (DNS Search List), care include liste nume de domeniu și modele de gazde pentru DNS.
Fiecare nume din lista DNSSL este codificat folosind un separator cu cod zero și etichete intermediare de un singur byte, care definesc dimensiunea datelor care urmează. Vulnerabilitatea este cauzată de faptul că în codul de analiză a listei, câmpul de dimensiune este copiat într-o variabilă de tip integer semnat („len = data[pos]”). Astfel, în cazul în care se specifică în câmp o valoare cu bitul cel mai semnificativ setat, această valoare va fi percepută în operatorul condițional ca un număr negativ și verificarea dimensiunii maxime admisibile („if (len > 63 || len + pos + 1 > datalen) {”) nu va funcționa, ceea ce va duce la efectuarea apelului memcpy cu un parametru, dimensiunea datelor copiate depășind dimensiunea buffer-ului.


Sursa: opennet.ro
