В различни реализации на протокола 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“, на които сървърът трябва да потвърди получаването на всяка заявка;
  • CVE-2019-9516 (Изтичане на Заглавия с Дължина 0) — атакуващият изпраща поток от заглавия с нулево име и нулева стойност, а сървърът резервира в паметта буфер за съхранение на всяко заглавие и не го освобождава до края на сесията;
  • CVE-2019-9517 (Вътрешно Буфериране на Данни) — атакуващият отваря
    плъзгащо се прозорец HTTP/2 за изпращане на данни от сървъра без ограничения, но държи TCP прозореца затворен, което не позволява фактическото записване на данни в сокета. След това атакуващият изпраща заявки, изискващи голям отговор;
  • CVE-2019-9518 (Флуд от Празни Пакети) — атакуващият изпраща поток от пакети от тип DATA, HEADERS, CONTINUATION или PUSH_PROMISE, но с празно полезно съдържание и без флага за приключване на потока. Сървърът губи време, обработвайки всеки пакет, непропорционално на ресурсите, изразходвани от атакуващия.

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster