+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Netflix виявила кілька критичних уразливостей у TCP-стеках Linux та FreeBSD

Netflix виявила кілька критичних вразливостей в TCP-стеках Linux і FreeBSD

Netflix виявила кілька критичних вразливостей в TCP-стеках Linux і FreeBSD, які дозволяють віддалено ініціювати крах ядра або викликати надмірне споживання ресурсів при обробці спеціально оформлених TCP-пакетів (packet-of-death). Проблеми викликані помилками в обробниках максимального розміру блоку даних у TCP-пакеті (MSS, Maximum segment size) та механізму вибіркового підтвердження з'єднань (SACK, TCP Selective Acknowledgement).

 

  • CVE-2019-11477 (SACK Panic) - проблема проявляється в ядрах Linux починаючи з 2.6.29 і дозволяє викликати крах (panic) ядра через відправку серії SACK-пакетів через виникнення цілісного переповнення в обробнику. Для атаки достатньо виставити для TCP-з'єднання значення MSS 48 байт і відправити послідовність певним чином скомпонованих SACK-пакетів.

    Суть проблеми полягає в тому, що структура tcp_skb_cb (Socket Buffer) розрахована на зберігання 17 фрагментів ("define MAX_SKB_FRAGS (65536/PAGE_SIZE + 1) => 17"). У процесі відправлення пакета він розміщується в черзі на відправку, а в tcp_skb_cb зберігаються деталі про пакет, такі як номер послідовності, прапори, а також поля "tcp_gso_segs" та "tcp_gso_size", які застосовуються для передачі драйверу інформації про сегментування (TSO, TCP Segmentation) Offload) для обробки сегментів на стороні мережевої картки.

    Фрагменти зберігаються при виникненні втрати пакета або необхідності вибіркової повторної передачі пакетів, якщо увімкнений механізм SACK і драйвером підтримується TSO. При мінімальному MSS виділяється всього 8 байт на один сегмент даних, відповідно зростає число сегментів, необхідних для надсилання всіх даних, і структура може досягти ліміту 17 фрагментів. Для захисту від переповнення в коді є перевірка, яка призводить до виклику функції BUG_ON() та переведення ядра в стан panic.

    В якості обхідних шляхів захисту можна вимкнути обробку SACK (записати 0 в /proc/sys/net/ipv4/tcp_sack) або заблокувати з'єднання з невеликим MSS (працює тільки при виставленні sysctl net.ipv4.tcp_mtu_probing в 0 і може порушити роботу деяких нормальних з'єднань із низьким MSS).

  • CVE-2019-11478 (SACK Slowness) - призводить до порушення роботи механізму SACK (при використанні ядра Linux молодше 4.15) або надмірного споживання ресурсів. Проблема проявляється при обробці спеціально оформлених пакетів SACK, які можна використовувати для фрагментування черги повторної передачі (TCP retransmission). Обхідні шляхи захисту аналогічні до попередньої вразливості;
  • CVE-2019-5599 (SACK Slowness) - дозволяє викликати фрагментацію картки відправлених пакетів при обробці спеціальної послідовності SACK в рамках одного TCP-з'єднання та викликати виконання ресурсомісткої операції перебору списку. Проблема проявляється у FreeBSD 12 з механізмом визначення втрати пакетів RACK. В якості обхідного заходу можна відключити модуль RACK (за замовчуванням не завантажується, відключається через вказівку sysctl net.inet.tcp.functions_default=freebsd);
  • CVE-2019-11479 - атакуючий може викликати в ядрі Linux поділ відповідей на кілька TCP-сегментів, кожен з яких включає лише 8 байт даних, що може призвести до суттєвого підвищення трафіку, збільшення навантаження на CPU та забиття каналу зв'язку. Як обхідний метод захисту рекомендовано заблокувати з'єднання з низьким MSS.

    У ядрі Linux проблеми усунуті у випусках 4.4.182, 4.9.182, 4.14.127, 4.19.52 та 5.1.11. Виправлення для FreeBSD доступне у вигляді патчу. У дистрибутивах оновлення пакетів з ядром вже випущено для Debian, RHEL, SUSE/openSUSE. Виправлення в процесі підготовки в Ubuntu, Fedora і Arch Linux.

 

Інші новини