Віддалена вразливість у реалізації протоколу TIPC у ядрі Linux

У реалізації Linux реалізації мережевого протоколу TIPC (Transparent Inter-process Communication), що поставляється в ядрі, виявлена ​​критична вразливість (CVE-2021-43267), що дозволяє віддалено через відправлення спеціально оформленого мережевого пакета домогтися виконання свого коду з привілеями ядра. Небезпека проблеми згладжує те, що для атаки потрібне явне включення підтримки TIPC в системі (завантаження та налаштування модуля ядра tipc.ko), яка в неспеціалізованих дистрибутивах Linux не виконується за умовчанням.

Протокол TIPC підтримується починаючи з ядра Linux 3.19, але код, що призводить до вразливості, був включений до складу ядра 5.10. Уразливість усунена ядрами 5.15.0, 5.10.77 та 5.14.16. Проблема виявляється і поки не усунена в Debian 11, Ubuntu 21.04/21.10, SUSE (у ще не випущеній гілці SLE15-SP4), RHEL (поки не деталізується чи було бекпортовано вразливе виправлення) та Fedora. Оновлення ядра вже випущено Arch Linux. Дистрибутиви з ядром старше 5.10, такі як Debian 10 і Ubuntu 20.04, не схильні до проблеми.

Протокол TIPC спочатку розроблений компанією Ericsson, призначений для організації міжпроцесної взаємодії в кластері та активується головним чином на вузлах кластерів. TIPC може працювати як поверх Ethernet, і поверх UDP (мережевий порт 6118). У разі роботи поверх Ethernet атака може бути здійснена з локальної мережі, а при використанні UDP — з глобальної мережі, якщо порт не закритий міжмережевим екраном. Атака може бути здійснена непривілейованим локальним користувачем хоста. Для активації TIPC необхідне завантаження модуля ядра tipc.ko та налаштування прив'язки до мережного інтерфейсу за допомогою netlink або утиліти tipc.

Вразливість проявляється у функції tipc_crypto_key_rc і викликана відсутністю належної перевірки відповідності зазначеного в заголовку та фактичного розміру даних при розборі пакетів з типом MSG_CRYPTO, що використовуються для отримання ключів шифрування від інших вузлів а кластері з метою подальшого розшифровування повідомлень, відправлення. Розмір даних, що копіюються в пам'ять, обчислюється як різниця між значень полів з розміром повідомлення і розміром заголовка, але без урахування фактичного розміру переданого в повідомленні назви алгоритму шифрування і вмісту ключа. Мається на увазі, що розмір назви алгоритму фіксований, а ключа додатково передається окремий атрибут з розміром, і атакуючий може вказати в цьому атрибуті значення, що відрізняється від фактичного, що призведе до запису хвоста повідомлення за межі виділеного буфера. struct tipc_aead_key {char alg_name[TIPC_AEAD_ALG_NAME]; unsigned int keylen; /* in bytes */ char key[]; };

Віддалена вразливість у реалізації протоколу TIPC у ядрі Linux


Джерело: opennet.ru

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