Malayong kahinaan sa OpenBSD IPv6 stack

Sa background na proseso ng slaacd, na responsable para sa IPv6 address autoconfiguration (IPv6 Stateless Address Autoconfiguration, RFC 4862) sa OpenBSD, natukoy ang isang kahinaan na humahantong sa isang buffer overflow kapag tumatanggap ng isang espesyal na idinisenyong IPv6 router advertisement (RA, Router Advertisement) .

Sa una, ang IPv6 address autoconfiguration functionality ay ipinatupad sa antas ng kernel, ngunit simula sa OpenBSD 6.2 ay inilipat ito sa isang hiwalay na unprivileged na proseso ng slaacd. Ang prosesong ito ay responsable para sa pagpapadala ng mga mensahe ng RS (Router Solicitation) at pag-parse ng mga tugon ng RA (Router Advertisement) na may impormasyon tungkol sa router at mga parameter ng koneksyon sa network.

Noong Pebrero, inayos ng slaacd ang isang bug na naging sanhi ng pag-crash nito kung 7 server ang tinukoy sa listahan ng RDNSS (Recursive DNS Servers). Ang pangangasiwa na ito ay nakakuha ng atensyon ng mga independiyenteng mananaliksik na sinubukang suriin ang slaacd code para sa iba pang mga error na nangyayari kapag nag-parse ng mga field sa mga mensahe ng RA. Ipinakita ng pagsusuri na may isa pang problema sa code, na nagpapakita ng sarili kapag pinoproseso ang field ng DNSSL (DNS Search List), na kinabibilangan ng mga listahan ng mga domain name at mga template ng host para sa DNS.

Ang bawat pangalan sa listahan ng DNSSL ay naka-encode gamit ang null delimiter at intervening one-byte tag na tumutukoy sa laki ng data na kasunod. Ang kahinaan ay sanhi ng katotohanan na sa code ng pag-parse ng listahan, ang isang field na may sukat ay kinopya sa isang variable na may naka-sign na uri ng integer ("len = data[pos]"). Alinsunod dito, kung ang isang value na may pinakamahalagang bit set ay tinukoy sa field, ang value na ito ay makikita sa conditional operator bilang isang negatibong numero at ang check para sa maximum na pinapayagang laki ("kung (len > 63 || len + pos) + 1 > datalen) {β€œ) ay hindi gagana, na hahantong sa isang tawag sa memcpy na may parameter na ang laki ng nakopyang data ay lumampas sa laki ng buffer.

Malayong kahinaan sa OpenBSD IPv6 stack
Malayong kahinaan sa OpenBSD IPv6 stack


Pinagmulan: opennet.ru

Magdagdag ng komento