Në procesin e sfondit slaacd, që në OpenBSD është përgjegjës për autokonfigurimin e adresave IPv6 (IPv6 Stateless Address Autoconfiguration, RFC 4862), është zbuluar një dobësi që shkakton tejmbushje të buffer-it gjatë marrjes së një njoftimi të posaçëm të formatuar të ruterit IPv6 (RA, Router Advertisement).
Fillimisht, funksionaliteti i autokonfigurimit të adresave IPv6 ishte implementuar në nivelin e kernelit, por duke filluar nga OpenBSD 6.2 u zhvendos në një proces të veçantë pa privilegje, slaacd. Ky proces është përgjegjës për dërgimin e mesazheve RS (Router Solicitation) dhe për analizimin e përgjigjeve RA (Router Advertisement) me informacion për ruterin dhe parametrat e lidhjes së rrjetit.
Në shkurt, në slaacd u korrigjua një gabim që shkaktonte ndërprerje të menjëhershme të procesit në rast se specifikoheshin 7 serverësh në listën RDNSS (Recursive DNS Servers). Kjo pakujdesi tërhoqi vëmendjen e studiuesve të pavarur, të cilët vendosën të analizonin kodin e slaacd për gabime të tjera që shfaqen gjatë përpunimit të fushave në mesazhet RA. Analiza tregoi se në kod ekziston edhe një problem tjetër, që shfaqet gjatë përpunimit të fushës DNSSL (DNS Search List), e cila përfshin lista emrash domenesh dhe modele hostësh për DNS.
Çdo emër në listën DNSSL kodohet duke përdorur një ndarës me kod zero dhe etiketa të ndërmjetme njëbajtëshe, të cilat përcaktojnë madhësinë e të dhënave që vijojnë. Dobësia shkaktohet nga fakti se në kodin e analizimit të listës, fusha e madhësisë kopjohet në një variabël me tip integer me shenjë (“len = data[pos]”). Për pasojë, nëse në këtë fushë vendoset një vlerë me bitin më të lartë të aktivizuar, kjo vlerë do të interpretohet në operatorin kushtor si numër negativ dhe kontrolli për madhësinë maksimale të lejuar (“if (len > 63 || len + pos + 1 > datalen) {“) nuk do të funksionojë, gjë që do të çojë në thirrjen e memcpy me një parametër ku madhësia e të dhënave që kopjohen tejkalon madhësinë e buffer-it.


Burimi: opennet.ru
