In het achtergrondproces slaacd, dat in OpenBSD verantwoordelijk is voor de automatische configuratie van IPv6-adressen (IPv6 Stateless Address Autoconfiguration, RFC 4862), is een kwetsbaarheid ontdekt die leidt tot een bufferoverflow bij het ontvangen van een speciaal opgesteld IPv6-routeradvertentie (RA, Router Advertisement).
Oorspronkelijk werd de functionaliteit van de automatische adresconfiguratie van IPv6 op het niveau van de kernel geïmplementeerd, maar sinds OpenBSD 6.2 is deze verplaatst naar een afzonderlijk, niet-privilege proces genaamd slaacd. Dit proces is verantwoordelijk voor het verzenden van RS-berichten (Router Solicitation) en het parseren van RA-berichten (Router Advertisement) met informatie over de router en netwerkinstellingen.
In februari is er in slaacd een fout opgelost die leidde tot een crash bij het opgeven van 7. servers in de RDNSS (Recursive DNS Servers) lijst. Deze omissie trok de aandacht van onafhankelijke onderzoekers die de code van slaacd hebben bestudeerd op zoek naar andere fouten die optreden bij het parseren van velden in RA-berichten. De analyse toonde aan dat er nog een probleem in de code zit, dat zich manifesteert bij het verwerken van het DNSSL-veld (DNS Search List), dat lijsten bevat domeinnamen en hostpatronen voor DNS.
Elk naam in de DNSSL-lijst wordt gecodeerd met een scheidingsteken met een nulcode en tussenliggende enkel-byte labels die de grootte van de daaropvolgende gegevens bepalen. De kwetsbaarheid wordt veroorzaakt doordat in de parser-code het grootteveld wordt gekopieerd naar een teken-gebaseerde integer-variabele ('len = data[pos]'). Als gevolg daarvan zal, in het geval dat in het veld een waarde met de meest significante bit is ingesteld, deze waarde in de voorwaardelijke operator als een negatief getal worden geïnterpreteerd en zal de controle op de maximale toegestane grootte ('if (len > 63 || len + pos + 1 > datalen) {') niet werken, wat leidt tot een memcpy-aanroep met een parameter waarbij de grootte van de te kopiëren gegevens de grootte van de buffer overschrijdt.


Bron: opennet.ru
