До складу Glibc включено виправлення вразливості до memcpy, підготовлене розробниками ОС Аврора

Розробники мобільної операційної системи «Аврора» (форк ОС Sailfish, який розвиває компанія «Відкрита мобільна платформа») поділилися показовою історією про усунення критичної вразливості (CVE-2020-6096) у Glibc, що проявляється тільки на платформі ARMv7. Відомості про вразливість були розкриті ще в травні, але до останніх днів виправлення не були доступні, незважаючи на те, що вразливість привласнений високий рівень небезпеки і є робочий прототип експлоїту, що дозволяє організувати виконання коду при обробці функцій memcpy() і memmove() певним чином оформлених даних. Виправлення пакетів для Debian и Ubuntu не випущено досі і вразливість залишається невиправленою майже два місяці з моменту публічного розкриття та п'ять місяців з моменту повідомлення розробників Glibc.

Вразливість виявлялася в реалізації memcpy() і memmove() мовою асемблера для ARMv7 і була викликана некоректною обробкою негативних значень параметра, що визначає розмір області, що копіюється. Проблеми з розробкою патчів почалися з того, що компанії SUSE и Red Hat оголосили, що їхні платформи проблемі не схильні, оскільки вони не формують збірки для 32-розрядних систем ARMv7, і не брали участь у створенні виправлення. Розробники багатьох дистрибутивів, що вбудовуються, мабуть, поклалися на команду Glibc, і також не проявили активної участі в підготовці виправлення.

варіант патча для блокування проблеми майже відразу запропонувала компанія Huawei, яка спробувала замінити асемблерні інструкції, що оперують знаковими операндами (bge та blt), на беззнакові аналоги (blo та bhs). Мейнтенер Glibc розробили набір тестів для перевірки різних умов виникнення помилки, після чого з'ясувалося, що патч від Huawei не підходить і не обробляє всі можливі комбінації вхідних даних.

Оскільки ОС Аврора має 32-бітну збірку для ARM, її розробники вирішили закрити вразливість самотужки і запропонувати рішення спільноті. Складність полягала в тому, що потрібно було написати ефективну асемблерну реалізацію функції і враховувати різні варіанти вхідних аргументів. Реалізацію було переписано з використанням беззнакових інструкцій. патч вийшов невеликий, але основна проблема полягала у збереженні швидкості виконання та виключенні зниження продуктивності функцій memcpy та memmove, зберігаючи при цьому сумісність з усіма комбінаціями вхідних значень.

На початку червня було підготовлено два варіанти виправлення, що проходять тестовий фреймворк мейнтейнерів Glibc та внутрішній тестовий набір Аврори. 3 червня був обраний один із варіантів і відправлений до списку розсилки Glibc. Через тиждень
був запропонований ще один аналогічний за підходом патч, який виправляв проблему multiarch-реалізації, яку раніше намагалися виправити в Huawei. Місяць зайняло тестування та юридичне оформлення через важливість патчу.
8 липня виправлення були прийняті в основну гілку релізу, що готується glibc 2.32. Реалізація включає два патчі - перший для multiarch-реалізації memcpy для ARMv7, а друга для загальної асемблерної реалізації memcpy() та memmove() для ARM.

Проблема торкається мільйонів ARMv7-пристроїв з Linux і без відповідного оновлення власники ризикують, підключаючи їх до мережі (атаковані можуть бути доступні по мережі сервіси та програми, що приймають вхідні дані без обмеження розміру). Наприклад, в експлоїті, підготовленому дослідниками, що виявили вразливість, показано як зробити атаку на вбудований в автомобільну інформаційну систему http-сервер через передачу GET-запиту дуже великого розміру і отримати root-доступ до системи.

Джерело: opennet.ru

Додати коментар або відгук