У різних реалізаціях протоколу HTTP/2 виявлено 8 DoS-уразливостей

Дослідники з компаній Netflix та Google виявили у різних реалізаціях протоколу HTTP/2 вісім уразливостей, які дозволяють викликати відмову в обслуговуванні через відправлення певним чином оформленого потоку мережевих запитів. Проблеми тією чи іншою мірою торкаються більшості HTTP-серверів з підтримкою HTTP/2 і призводять до вичерпання доступної для робочого процесу пам'яті або створення надто високого навантаження на CPU. Оновлення з усуненням уразливостей вже представлені в nginx 1.16.1/1.17.3 и H2O 2.2.6, але поки недоступні для Apache httpd та інших продуктів.

Проблеми стали наслідком внесених до протоколу HTTP/2 ускладнень, пов'язаних із застосуванням бінарних структур, системою лімітування потоків даних усередині з'єднань, механізмом пріоритезації потоків та наявності ICMP-подібних керуючих повідомлень, що працюють на рівні з'єднання HTTP/2 (наприклад, операції ping, скидання та налаштування потоку). Багато реалізації належним чином не обмежували потік повідомлень, що управляють, неефективно організовували роботу черги пріоритетів при обробці запитів або використовували неоптимальні реалізації алгоритмів управління потоком.

Більшість виявлених методів атаки зводяться до відправки на сервер певних запитів, що призводять до створення великої кількості відповідей. Якщо клієнт не читає з сокету дані і не розриває з'єднання, черга буферизації відповідей за сервера безперервно заповнюється. Подібна поведінка створює навантаження на систему керування чергою обробки мережевих з'єднань і в залежності від особливостей реалізації призводить до вичерпання доступної пам'яті чи ресурсів CPU.

Виявлені вразливості:

  • CVE-2019-9511 (Data Dribble) - атакуючий запитує великий обсяг даних у кілька потоків, маніпулюючи розміром ковзного вікна та пріоритетом потоку, змушуючи сервер поміщати дані в чергу блоками по 1 байту;
  • CVE-2019-9512 (Ping Flood) - атакуючий безперервно отруює ping-повідомлення через з'єднання HTTP/2, ініціюючи заповнення на іншій стороні внутрішньої черги відправлених відповідей;
  • CVE-2019-9513 (Resource Loop) - атакуючий створює кілька потоків запитів і безперервно змінює пріоритет потоків, викликаючи перемішування дерева пріоритетів;
  • CVE-2019-9514 (Reset Flood) - атакуючий створює кілька потоків
    і відправляє через кожен потік некоректний запит, викликаючи надсилання сервером кадрів RST_STREAM, але не приймає їх заповнення черги відповідей;

  • CVE-2019-9515 (Settings Flood) - атакуючий відправляє потік порожніх кадрів "SETTINGS", у відповідь на які сервер повинен підтвердити отримання кожного запиту;
  • CVE-2019-9516 (0-Length Headers Leak) - атакуючий відправляє потік заголовків з нульовим ім'ям та нульовим значенням, а сервер виділяє для зберігання кожного заголовка буфер у пам'яті і не звільняє його до завершення сеансу;
  • CVE-2019-9517 (Internal Data Buffering) - атакуючий відкриває
    ковзне вікно HTTP/2 для відправки сервером даних без обмежень, але при цьому тримає вікно TCP закритим, що не дозволяє фактично записати дані в сокет. Далі атакуючий надсилає запити, що потребують великої відповіді;

  • CVE-2019-9518 (Empty Frames Flood) - атакуючий відправляє потік кадрів типу DATA, HEADERS, CONTINUATION або PUSH_PROMISE, але з порожнім корисним вмістом та без прапора завершення потоку. Сервер витрачає час на обробку кожного кадру, непропорційно витраченої смузі пропускання, що атакує.

Джерело: opennet.ru

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