Dirty Pipe, одна з найсерйозніших уразливостей за останні роки в Linux

Нещодавно в мережі з'явилася новина про виявлення нової вразливості в Linux , яка класифікується як "високої серйозності" та впливає на всі ядра, починаючи з версії 5.8, а також на похідні, включаючи Android.

Відомий як «Брудний канал», він дозволяє перезаписувати дані у файлах лише для читання та може призвести до підвищення привілеїв шляхом впровадження коду в «кореневі» процеси.

Хоча вона вже була виправлена ​​в основне ядро ​​Linux, помилка може бути використана у вигляді експлойту підвищення привілеїв на всіх пристроях з ядром Linux версії 5.8 або новішої.

Це також означає, що купа нещодавно випущених смартфонів Android, таких як Samsung Galaxy S22 і Google Pixel 6, також є вразливими, доки кожен пристрій не отримає відповідний патч ядра від відповідного OEM.

Про Dirty Pipe

Уразливість була виявлена ​​дослідником безпеки Максом Келлерманом та закаталогована як (CVE-2022-0847); знадобилося кілька місяців, щоб знайти експлойт, що підтверджує концепцію.

Ця вразливість дозволяє непривілейованому користувачеві вставляти та перезаписувати дані у файлах лише для читання, зокрема у процесах SUID, що працюють від імені root. Розмовне прізвисько, схоже, є грою на тему сумнозвісної помилки Dirty Cow та механізму Linux під назвою pipelining для передачі повідомлень між процесами, оскільки останній використовується під час процедури експлойту.

Все почалося рік тому з заявки в службу підтримки, пов’язаної з пошкодженими файлами. Клієнт скаржився, що завантажені журнали доступу не можуть бути розпаковані. І справді, на одному з серверів журналів був пошкоджений файл журналу; його можна було розпакувати, але gzip повідомив про помилку CRC. Я не міг пояснити, чому він пошкоджений, але я припустив, що нічний процес розділення зазнав збою і створив пошкоджений файл. Я вручну виправив CRC файлу, закрив квиток і незабаром забув про проблему.

Після місяців аналізу дослідник нарешті виявив, що пошкоджені файли клієнта були результатом помилки в ядрі Linux. Він знайшов спосіб використати Dirty Pipe, щоб дозволити будь-кому з обліковим записом, включаючи менш привілейовані облікові записи "nobody", додати SSH-ключ до облікового запису користувача root.

Щоб запустити вразливість, Келлерман поділився своїм доказом концепції, зловмисник повинен мати дозволи на читання. Крім того, прокрутка не повинна бути на межі сторінки, запис не може перетинати межі сторінки, а розмір файлу не можна змінювати.

Щоб використати цю вразливість, ви повинні: створити канал, заповнити трубу довільними даними (встановивши прапор PIPE_BUF_FLAG_CAN_MERGE для всіх записів у кільці), очистити трубу (залишивши прапорець встановленим на всіх екземплярах структури pipe_buffer у структурі кільця pipe_inode_info), об’єднайте дані з цільового файлу (відкривається за допомогою O_RDONLY) у канал безпосередньо перед цільовим зміщенням і запишіть довільні дані в канал.

Dirty Pipe також впливає на будь-яку версію Android, засновану на одній з уразливих версій ядра Linux. Оскільки Android настільки фрагментований, моделі пристроїв, які постраждали, не можна відстежувати однаково.

За словами Келлермана, Google минулого місяця інтегрував виправлення помилки в ядро ​​Android, одразу після того, як воно було виправлено з випуском версій ядра Linux 5.16.11, 5.15.25 та 5.10.102.

Сказавши це, нам, ймовірно, доведеться трохи почекати, перш ніж OEM-виробники почнуть випускати оновлення Android, що містять виправлення. Наприклад, Pixel 6 від Google все ще є вразливим, але досвідчені користувачі можуть усунути недолік, встановивши спеціальне виправлене ядро ​​післяпродажного обслуговування як альтернативний варіант.

Розробники ядра Linux випустили виправлення (5.16.11, 5.15.25, 5.10.102) 23 лютого, тоді як Google виправив ядро ​​Android 24 лютого. Келлерманн та інші експерти порівняли вразливість з CVE-2016-5195 «Брудна корова» та сказали, що її ще легше використати.

Зрештою, якщо ви зацікавлені дізнатися більше, ви можете знайти деталі за наступним посиланням.


Додати як пріоритетне джерело в Google