Glibc ұсынған ARMv7 үшін memcpy функциясын жүзеге асырудағы маңызды осалдық

Cisco қауіпсіздік зерттеушілері ашылған бөлшектер осалдықтар (CVE-2020-6096) 32-биттік ARMv7 платформасы үшін Glibc ұсынған memcpy() функциясын жүзеге асыруда. Мәселе қол қойылған 32 биттік бүтін сандарды басқаратын құрастыруды оңтайландыруды пайдалану салдарынан көшірілген аумақтың өлшемін анықтайтын параметрдің теріс мәндерін дұрыс өңдеуден туындады. Теріс өлшемі бар ARMv7 жүйелерінде memcpy() шақыру мәндерді дұрыс салыстырмауға және көрсетілген буфердің шегінен тыс аумаққа жазуға әкеледі.

Осалдықты шабуылдаушы көшірілген деректердің өлшемі тасымалданатын айнымалының теріс мәнін қалыптастыруды ұйымдастыра алатын жағдайда кодты орындау үшін пайдаланылуы мүмкін (мысалы, ол 2 ГБ-тан астам файлды тасымалдау кезінде теріс болады. деректер, бірақ шабуыл кезінде буфер шегінен шығу үшін кем дегенде 4 ГБ тасымалдау керек). memcpy() функциясы қолданбаларда кеңінен қолданылады және ARMv7 процессорлары Bluetooth, HD Radio/DAB, USB, CAN шинасы, Wi-Fi және басқа сыртқы деректер көздері (мысалы, кіріс деректерін өлшемді шектеусіз қабылдайтын желі арқылы қол жетімді қызметтер мен қолданбаларға шабуыл жасалуы мүмкін).

Мысал ретінде автомобильдік Wi-Fi желісі арқылы қол жеткізуге болатын автомобильдік ақпараттық жүйелерге орнатылған HTTP серверіне шабуыл жасау үшін жұмыс істейтін эксплойт жасауды келтіруге болады. Сыртқы шабуылдаушы өте үлкен GET сұрауын жіберу арқылы осы сервердегі memcpy осалдығын пайдалана алады және жүйеге түбірлік рұқсат алады.

Glibc ұсынған ARMv7 үшін memcpy функциясын жүзеге асырудағы маңызды осалдық

32-биттік x86 жүйелерінде мәселе пайда болмайды, себебі осы архитектураға арналған memcpy іске асыру өлшем айнымалысын size_t түріндегі таңбасыз бүтін мән ретінде дұрыс түсіндіреді (ассемблер тілінде жүзеге асыру ARMv7 үшін ол size_t орнына таңбаланған бүтін сан ретінде қарастырылады). Түзету қазір қол жетімді патч, ол тамыздағы Glibc 2.32 жаңартуына қосылады.
Түзету қол қойылған операндтарда (bge және blt) жұмыс істейтін құрастыру нұсқауларын қолтаңбасы жоқ аналогтармен (blo және bhs) ауыстыруға дейін төмендейді.

Мәселе әлі шешілген жоқ Debian 9 және 10 (Debian 8-де көрінбейді), Fedora, Ubuntu, OpenEmbedded, Tizen (glibc пайдаланады). RHEL и SUSE Олар 32-биттік ARMv7 жүйелерін қолдамайтындықтан, мәселе әсер етпейді. Android жүйесіне осалдық әсер етпейді, себебі ол өзінің libc (Bionic) іске асыруын пайдаланады. IN OpenWRT Әдепкі бойынша, құрастырудың көпшілігі Musl тілін пайдаланады, бірақ glibc репозиторийде де қол жетімді.

Ақпарат көзі: opennet.ru

пікір қалдыру