Експертите на Cisco публикуваха подробностите относно новата уязвимост, класифицирана като CVE-2020-6096. Уязвимостта съществува в реализацията на наличната в Glibc функция memcpy() за 32-битовата платформа ARMv7. Проблемът е в некоректната обработка на отрицателните значения на параметъра, определящ максималния размер на областта за копиране, и е възникнал заради използваните асемблерни оптимизации на алгоритъма за работа с 32-битови цели числа със знак. Извикването на функцията memcpy() в системи с ARMv7 процесорна архитектура със зададени отрицателни значения води до некоректно сравняване на значението и запис на данни извън границите на зададения буфер.
Уязвимостта може да бъде използвана за изпълнение на произволен код в ситуации, когато атакуващият може да организира формирането на отрицателно значение за променливата, чрез която се определя размера на данните за копиране (например, като се зададе да бъде копиран блок от нас 4 GB данни). Функцията memcpy() активно се използва в на практика всички приложения, а ARMv7 процесорите масово се използват в автомобилните системи, в промишлените, потребителските, комуникационните и вградените устройства, и в още много други места. Тази техника лесно може да стане обект на атаки с използването на Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi и други външни източници на данни.
Експертите дадоха като пример създаването на работещ експлойт за атака на вградения в автомобилните информационни системи http сървър, който е достъпен чрез автомобилната Wi-Fi мрежа. Външен хакер може да използва уязвимостта в memcpy в тази сървър чрез подаването на GET запитване с много голям размер и по този начин да получи root достъп до системата.
Корекцията на тази уязвимост засега се предлага във вид на пач, който е включен в августовското обновяване на Glibc 2.32. Промяната се свежда само до замяната на използваните асемблерни инструкции bge и blt работещи със знакови операнди, на беззнаковите lo и bhs.
Засега проблемът не е отстранен в Debian 9 и 10 (в Debian 8 той не се проявява), Fedora, Ubuntu, OpenEmbedded, Tizen (тук се използва memcpy(). Проблемът не засяга RHEL и SUSE, понеже те не поддържат 32-битовите ARMv7 компютърни системи. Android не е уязвим към CVE-2020-6096, понеже използва собствена реализация на libc (Bionic), в която се използват по-различни алгоритми. В OpenWRT по подразбиране в повечето компилации се използва Musl, но в хранилищата се предлага и glibc.
В 32-битовите x86 системи проблемът не се проявява, понеже реализацията на memcpy за тази процесорна архитектура коректно интерпретира променливата с голям размер като беззнаково цяло число от типа size_t (в реализацията за архитектурата ARMv7 вместо като size_t, това число се обработва като signed integer).
Всичко важно от света на технологиите, директно в пощата ти.
С абонирането приемате нашите Условия и Политика за поверителност. Може да се отпишете с един клик по всяко време.
Коментирайте статията в нашите Форуми. За да научите първи най-важното, харесайте страницата ни във Facebook, и ни последвайте в Google Новини, TikTok, Telegram и Viber или изтеглете приложението на Kaldata.com за Android, iPhone, Huawei, Google Chrome, Microsoft Edge и Opera!
