Kritikal na kahinaan sa pagpapatupad ng memcpy function para sa ARMv7 mula sa Glibc

Mga Mananaliksik sa Seguridad ng Cisco walang takip ang mga detalye mga kahinaan (CVE-2020-6096) sa pagpapatupad ng Glibc-provided memcpy() function para sa 32-bit ARMv7 platform. Ang problema ay sanhi ng hindi tamang paghawak ng mga negatibong halaga ng parameter na tumutukoy sa laki ng kinopyang lugar, dahil sa paggamit ng mga pag-optimize ng pagpupulong na nagmamanipula ng mga naka-sign na 32-bit na integer. Ang pagtawag sa memcpy() sa mga system ng ARMv7 na may negatibong laki ay nagreresulta sa hindi tamang paghahambing ng mga halaga at nagsusulat sa isang lugar sa labas ng mga hangganan ng tinukoy na buffer.

Maaaring samantalahin ang kahinaan upang magsagawa ng code sa isang sitwasyon kung saan maaaring ayusin ng umaatake ang pagbuo ng negatibong halaga ng variable kung saan ipinapadala ang laki ng kinopyang data (halimbawa, magiging negatibo ito kapag naglilipat ng higit sa 2 GB ng data, ngunit sa panahon ng pag-atake, upang lumampas sa mga limitasyon ng buffer, kailangan mong maglipat ng hindi bababa sa 4GB). Ang memcpy() function ay malawakang ginagamit sa mga application, at ang mga processor ng ARMv7 ay karaniwan sa mga automotive system, mobile, industriyal, consumer, komunikasyon at mga naka-embed na device, na posibleng napapailalim sa mga pag-atake gamit ang Bluetooth, HD Radio/DAB, USB, CAN bus, Ang Wi-Fi Fi at iba pang panlabas na pinagmumulan ng data (halimbawa, ang mga serbisyo at application na naa-access sa network na tumatanggap ng data ng input nang walang mga paghihigpit sa laki ay maaaring atakehin).

Ang isang halimbawa ay ang paglikha ng isang gumaganang pagsasamantala upang atakehin ang isang HTTP server na binuo sa mga sistema ng impormasyon ng sasakyan, na naa-access sa pamamagitan ng network ng Wi-Fi ng sasakyan. Maaaring samantalahin ng isang panlabas na umaatake ang isang kahinaan ng memcpy sa server na ito sa pamamagitan ng pagpapadala ng napakalaking kahilingan sa GET at makakuha ng root access sa system.

Kritikal na kahinaan sa pagpapatupad ng memcpy function para sa ARMv7 mula sa Glibc

Sa 32-bit x86 system, hindi lilitaw ang problema, dahil ang pagpapatupad ng memcpy para sa arkitektura na ito ay wastong binibigyang-kahulugan ang variable ng laki bilang isang unsigned integer na halaga ng uri size_t (sa wika ng pagpupulong pagpapatupad para sa ARMv7 ito ay itinuturing bilang signed integer sa halip na size_t). Ang pag-aayos ay kasalukuyang magagamit bilang patch, na isasama sa August Glibc 2.32 update.
Ang pag-aayos ay nagmumula sa pagpapalit sa paggamit ng mga tagubilin sa pagpupulong na gumagana sa mga naka-sign na operand (bge at blt) ng mga hindi nakapirmang katapat (blo at bhs).

Hindi pa nareresolba ang problema Debian 9 at 10 (hindi nakikita sa Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (ginamit ng glibc). RHEL ΠΈ SUSE Hindi apektado ang isyu dahil hindi nila sinusuportahan ang 32-bit ARMv7 system. Hindi apektado ang Android ng kahinaan dahil gumagamit ito ng sarili nitong pagpapatupad ng libc (Bionic). SA OpenWRT Bilang default, karamihan sa mga build ay gumagamit ng Musl, ngunit ang glibc ay magagamit din sa repositoryo.

Pinagmulan: opennet.ru

Magdagdag ng komento