OpenBSD-s foonprotsessis slaacd, mis vastutab IPv6-aadresside automaatkonfigureerimise (IPv6 Stateless Address Autoconfiguration, RFC 4862) eest, tuvastati haavatavus, mis võib põhjustada mälupuhvri ülevoolu, kui vastu võetakse spetsiaalselt vormindatud IPv6 ruuteri reklaami (RA, Router Advertisement).
Alguses oli IPv6 aadresside automaatkonfigureerimise funktsionaalsus rakendatud tuumatasandil, kuid alates OpenBSD 6.2-st viidi see eraldi privileegideta protsessi slaacd alla. Antud protsess vastutab RS (Router Solicitation) sõnumite saatmise ja RA (Router Advertisement) vastuste analüüsimise eest, mis sisaldavad teavet ruuteri ja võrguühenduse parameetrite kohta.
Februaris parandati slaacd-s viga, mis põhjustas kokkuvarisemise, kui oli määratud 7 serverite RDNSS (Recursive DNS Servers) loendis. Selline eksitus tõi esile tähelepanu sõltumatute uurijate seas, kes püüdsid uurida slaacd koodi teiste vigade osas, mis tekkisid RA sõnumite väljade analüüsimisel. Analüüs näitas, et koodis on veel üks probleem, mis ilmneb DNSSL (DNS Search List) välja töötlemisel, mis sisaldab loendeid domeeninimesid ja hostimallide jaoks DNS.
Igas DNSSL loendis olev nimi kodeeritakse nullkoodiga eraldajaga ja vahepealsete ühe-baitiliste siltidega, mis määravad järgneva andmete suuruse. Haavatavus on põhjustatud sellest, et nimekirja analüüsi koodis kopeeritakse suuruse väli muutujasse järgmist tüüpi täisarv («len = data[pos]»). Seega, kui suuruse valimis on seatud kõrgeim bit, tõlgendatakse seda tingimuslikus operaatoris negatiivse arvuna ning maksimaalse lubatud suuruse kontroll («if (len > 63 || len + pos + 1 > datalen) {«) ebaõnnestub, mis viib memcpy kutse täitmiseni, mille andmete kopeerimise suurus ületab puhvri suuruse.


Allikas: opennet.ru
