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

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

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