Fora vundebleco en OpenBSD IPv6-stako

En la fonprocezo slaacd, kiu respondecas pri IPv6-adresaŭtomatagordo (IPv6 Sennacia Adresa Aŭtomata agordo, RFC 4862) en OpenBSD, vundebleco estis identigita, kiu kondukas al bufrosuperfluo dum ricevado de speciale dizajnita IPv6-enkursigilo-reklamo (RA, Router Advertisement) .

Komence, la IPv6-adresaŭtomatagorda funkcio estis efektivigita ĉe la kernnivelo, sed komencante kun OpenBSD 6.2 ĝi estis movita al aparta senprivilegia slaacd-procezo. Ĉi tiu procezo respondecas pri sendado de RS (Router Solicitation) mesaĝoj kaj analizado de RA (Router Advertisement) respondojn kun informoj pri la enkursigilo kaj retkonektparametroj.

En februaro, slaacd riparis cimon, kiu igis ĝin kraŝi se 7 serviloj estis specifitaj en la listo de RDNSS (Recursive DNS Servers). Ĉi tiu superrigardo altiris la atenton de sendependaj esploristoj, kiuj provis ekzameni la slaacd-kodon por aliaj eraroj, kiuj okazas dum analizado de kampoj en mesaĝoj de RA. La analizo montris, ke ekzistas alia problemo en la kodo, kiu manifestiĝas kiam oni prilaboras la kampon DNSSL (DNS-Serĉa Listo), kiu inkluzivas listojn de domajnaj nomoj kaj gastigajn ŝablonojn por DNS.

Ĉiu nomo en la DNSSL-listo estas ĉifrita uzante nulan limigilon kaj mezajn unu-bajtajn etikedojn, kiuj determinas la grandecon de la sekvaj datumoj. La vundebleco estas kaŭzita de tio, ke en la listo-analiza kodo, kampo kun grandeco estas kopiita en variablon kun signita entjera tipo ("len = datumoj[pos]"). Sekve, se valoro estas specifita en la kampo kun la plej signifa bito aro, ĉi tiu valoro estos perceptita en la kondiĉa operatoro kiel negativa nombro kaj la kontrolo por la maksimuma alleblas grandeco ("se (len > 63 || len + pos). + 1 > datalen) {“) ne funkcios, kio kondukos al voko al memcpy kun parametro, kies grandeco de la kopiitaj datumoj superas la bufran grandecon.

Fora vundebleco en OpenBSD IPv6-stako
Fora vundebleco en OpenBSD IPv6-stako


fonto: opennet.ru

Aldoni komenton