2 DoS уязвимости са идентифицирани в различни реализации на HTTP/8 протокола

Изследователи от Netflix и Google разкри Има осем уязвимости в различни реализации на HTTP/2 протокола, които могат да причинят отказ на услуга чрез изпращане на поток от мрежови заявки по определен начин. Проблемът засяга повечето HTTP сървъри с поддръжка на HTTP/2 до известна степен и води до изчерпване на паметта на работника или създаване на твърде много натоварване на процесора. Актуализациите, които елиминират уязвимостите, вече са представени в nginx 1.16.1/1.17.3 и H2O 2.2.6, но за сега недостъпен за Apache httpd и други продукти.

Проблемите са резултат от усложнения, въведени в протокола HTTP/2, свързани с използването на двоични структури, система за ограничаване на потоците от данни в рамките на връзките, механизъм за приоритизиране на потока и наличието на подобни на ICMP контролни съобщения, работещи при HTTP/2 връзка ниво (например настройки за пинг, нулиране и поток). Много реализации не ограничаваха правилно потока от контролни съобщения, не управляваха ефективно опашката с приоритети при обработка на заявки или използваха неоптимални реализации на алгоритми за контрол на потока.

Повечето от идентифицираните методи за атака се свеждат до изпращане на определени заявки към сървъра, което води до генериране на голям брой отговори. Ако клиентът не чете данни от сокета и не затваря връзката, опашката за буфериране на отговор от страната на сървъра непрекъснато се запълва. Това поведение създава натоварване върху системата за управление на опашка за обработка на мрежови връзки и, в зависимост от характеристиките на изпълнение, води до изчерпване на наличната памет или ресурси на процесора.

Идентифицирани уязвимости:

  • 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) - нападателят изпраща поток от празни рамки „НАСТРОЙКИ“, в отговор на които сървърът трябва да потвърди получаването на всяка заявка;
  • CVE-2019-9516 (0-Length Headers Leak) – атакуващият изпраща поток от заглавки с нулево име и нулева стойност и сървърът разпределя буфер в паметта за съхраняване на всеки хедър и не го освобождава, докато сесията не приключи ;
  • CVE-2019-9517 (Вътрешно буфериране на данни) - атакуващият се отваря
    HTTP/2 плъзгащ се прозорец за сървъра, за да изпраща данни без ограничения, но държи TCP прозореца затворен, предотвратявайки действителното записване на данни в сокета. След това нападателят изпраща заявки, които изискват голям отговор;

  • CVE-2019-9518 (Наводняване на празни рамки) – Хакер изпраща поток от рамки от тип DATA, HEADERS, CONTINUATION или PUSH_PROMISE, но с празен полезен товар и без флаг за прекъсване на потока. Сървърът прекарва време за обработка на всеки кадър, непропорционално на честотната лента, консумирана от нападателя.

Източник: opennet.ru

Добавяне на нов коментар