LINUX.ORG.RU

Уязвимость HTTP/2 Bomb, приводящая к исчерпанию оперативной памяти

 


0

4

В начале июня 2026 года исследователи кибербезопасности из компании Calif (с помощью ИИ-агента Codex) обнаружили новый вариант атаки HTTP/2 Bomb, которая работает даже с одного клиентского устройства, имеющего интернет-соединение со скоростью 100 Мбит/с.

Атака состоит из двух этапов:

  1. Манипуляция сжатием HPACK: В протоколе HTTP/2 заголовки сжимаются с помощью таблицы HPACK. Атакующий отправляет почти пустой заголовок, но с помощью сотен тысяч инструкций заставляет сервер распаковывать и постоянно ссылаться на один и тот же крошечный элемент. Это вызывает лавинообразный расход памяти сервера.

  2. Блокировка потока управления (Flow Control): После того как память заполнена, злоумышленник выставляет размер окна управления потоком (flow-control window) на 0. Это заставляет сервер приостановить отправку ответа, удерживая занятую память, и поддерживать соединение открытым периодическими 1-байтными запросами.

Всего один клиент за 10–20 секунд способен израсходовать до 32–64 ГБ оперативной памяти. Уровень потребления памяти в различных HTTP-серверах варьируется от примерно 70 байт на каждый байт в индексе для nginx, IIS и Pingora, до 4000 байт в Apache httpd и 5700 в Envoy.

Уязвимости подвержены практически все основные серверные реализации HTTP/2 в конфигурациях по умолчанию: NGINX, Apache HTTPD (модуль mod_http2), Microsoft IIS, Envoy, Cloudflare, Pingora

Уязвимость исправлена в nginx 1.29.8 (с помощью директивы max_headers из freenginx, по умолчанию допускающая обработку не более 1000 заголовков), Envoy 1.35.11 и 1.36.7 (mutable_max_request_headers_kb и max_headers_count), Appache mod_http2 2.0.41. Для Microsoft IIS и Cloudflare Pingora исправлений пока нет.

HTTP-сервер Angie не подвержен уязвимости, поскольку реализовал защиту от подобного рода атак ещё в версии 1.8.0, вышедшей в 2024 году.

>>> Подробности



Проверено: maxcom ()
Последнее исправление: hobbit (всего исправлений: 1)

Для Microsoft IIS и Cloudflare Pingora исправлений пока нет.

забавно

unclestephen ★★★★★
()

То есть способ атаки был известен ещё два года назад и все ждали когда иишечку доделают?

imul ★★★★★
()

Файловые бомбы наносят ответный удар! Кто бы мог подумать...

GAMer ★★★★★
()

Самое время сделать U-разворот и вернуть http/1.1

Преимуществ во 2 версии особо не вижу, а от 3 лучше бежать как от огня.

ant1
()
Ответ на: комментарий от imul

То есть способ атаки был известен ещё два года назад и все ждали когда иишечку доделают?

Как же тогда разработчики Angie реализовали защиту от подобного рода атак без ИИ ещё в версии 1.8.0 в 2024 году? Наверное, к ним прилетел разработчик из будущего и рассказал всё.

mshewzov ★★★★
()
Ответ на: комментарий от mshewzov

Как же тогда разработчики Angie реализовали защиту от подобного рода атак без ИИ ещё в версии 1.8.0 в 2024 году?

Возможно просто порядок в коде наводили и на всякий случай добавили проверку, не думаю что это что-то серьезное.

maxcom ★★★★★
()
Ответ на: комментарий от mshewzov

Если посмотреть, как защита от подобного рода атак реализована у других (абзацем выше), то оно ж просто ограничение на количество хедеров. Добавить такое ограничение в Angie могли и не задумываясь о конкретной уязвимости, а просто чтоб было — это ж вполне логичная настройка.

CrX ★★★★★
()
Ответ на: комментарий от ant1

Дак 1.1 тупо ничего не умеет, кроме того чтобы выдавать достаточно лёгкие текстовые .html.

Основной плюс в том, что ajax не нужен как костыль, который сам по-себе дико медленный, генерит тонну лишних запросов, парситься на клиенте отдельным лапшекодом. Вебсокеты по сравнению с этим – буквально упрощение протокола, а не усложнение. Тебе, как только хочется делать хоть что-то полезное в вебе, в принципе, нормальное дуплексное соединение с клиентом иметь – высшее благо.

Ну а раз уж запихнули дуплекс/вебсокеты и, раз уж значимая часть трафика и так не текст, а картинки/видео, в чём смысл протокол текстовым оставлять? Аргумент про то, что усложняет отладку и telnetом не пообщаешься, не катит, так как у тебя и так 95% соединений уже завёрнуто в TLS, и ты просто так руками ничего не прочитаешь. Оттуда и http/2.

Ну а раз уж протокол бинарный и внутри себя сессиями умеет управлять, зачем полагаться на tcp-стек операционки/сетевого оборудования по пути для управления потоком и гарантиями доставки, если это можно имплементировать и совершенствовать отдельно и перейти на датаграммы? Отсюда и quic/http/3.

Логика развития примерно такова. Да, я тут много что утрировал (бинарные данные всё же не по вебсокетам обычно гоняют, да и ajax лучше когда тебе не нужно держать стейт, для отправки формочек всяких его достаточно) и по временным рамкам оно появлялось немного в другом порядке, но суть в том что 1.1 тупо не нужен в свете более новых версий

energetix_user ★★
()
Последнее исправление: energetix_user (всего исправлений: 5)
Ответ на: комментарий от cobold

По нему если не ошибаюсь и СУБД в локальном софте аля sqlite – сплошная глупость и нинужно.

energetix_user ★★
()

То есть версия nginx-1.29.8 с исправлением вышла 7 апреля, а уязвимость обнаружена в начале июня? Что-то здесь не так.

bigbit ★★★★★
()
Ответ на: комментарий от maxcom

@maxcom, @CrX, я к тому это написал, что и без ИИ это можно было найти, пользуясь или головой, или логикой (что тоже считается за пользование головой). Хотелось бы верить, что с появлением ИИ код программ станет безопаснее, быстрее и меньше (но скорее всего нет).

mshewzov ★★★★
()

Не повезло мне, у меня только http 1.1 дома работает, свой сервер😅 Не проверить)

REDDERa
()
Ответ на: комментарий от mshewzov

Луддиты видимо, не стали дожидаться. Как раз в 2024 я везде, где мог дотянуться, заменил nginx на angie.

imul ★★★★★
()
Ответ на: комментарий от mshewzov

я к тому это написал, что и без ИИ это можно было найти, пользуясь или головой, или логикой (что тоже считается за пользование головой)

Конечно можно. Да и все уязвимости из предыдущих новостей тоже.

Тут проблема в том, что у человека внимание ограничено и «глаз замыливается». Кода слишком много, а полный аудит всего кода энтузиасты выполнять не спешат — это весьма унылое, скучное, репититативное занятие, которое мало кто согласится делать просто так, только за деньги (и обычно не самые маленькие), а случайно что-то заметить — это надо именно вот в этом месте именно внимание обратить, «хакерский» ум включить. В том смысле, что если людям сказать «вот где-то примерно в этих 500 строках кода есть серьёзная уязвимость», многие очень быстро бы её нашли. Но не знают, куда смотреть, а смотреть везде — долго и муторно. ИИ же лишён этого недостатка — он может в конкретном месте даже и хуже ищет, но он железный и может делать это «просматривая» действительно весь код за раз, не отвлекаясь на что-то более интересное, и не требуя за это полноценной зарплаты.

Хотелось бы верить, что с появлением ИИ код программ станет безопаснее, быстрее и меньше (но скорее всего нет).

Тут двояко. С одной стороны, в существующих проектах ИИ помогает находить уязвимости. Их исправляют, и код программ в среднем становится, конечно же, безопаснее. Иногда, возможно, быстрее и меньше (такую цель ставят всё реже, но всё же).

Однако с появлением ИИ появился и «вайб-кодинг». А соответственно появляются новые программы, код которых заведомо менее безопасен, и уж точно развесистее и обычно медленнее, а главное глючнее.

Получается как бы с одной стороны безопаснее и быстрее, а с другой наоборот. Что перевесит, можно только гадать, простора для аналитики тут мало. Ну я могу предположить, что с улучшением ИИ сгенерированный код будет продолжать становиться всё менее и менее говнокодистым, а значит, негативный фактор уменьшается, в то время как позитивный вроде как пусть медленно, но нарастает. Но уверенности у меня в том, что это приведёт нас ко всему хорошему, уведя от всего плохого, вовсе нет — фиг его знает, какие факторы я упустил из виду (опять же, кстати, из-за ограниченности человеческого внимания).

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от bigbit

Обычно дают до полугода авторам уязвимых продуктов на то чтобы подготовить исправление и пропушить его на пользователей. То есть сначала сообщают приватно авторам затронутых продуктов, а только потом сообщают публично

cobold ★★★★★
()
Ответ на: комментарий от ac130kz

Прекрасно. Из-за того, что отдельные севера не могут нормально реализовать HTTP/1, предлагается заставить их реализовать более сложный HTTP/2. Последствия этого решения мы прямо сейчас обсуждаем.

monk ★★★★★
()
Ответ на: комментарий от BruteForce

А фуфел тем и берет, все будет приятно и с вазелином. Помнишь, как появлялся gmail? Прорывное супер удобное супер фичастое мыло да еще и не для всех по приглашениям, а потом вжух и твоя почта и личные данные безбожно сливаются всем, кто готов за это платить. Бегите, глупцы!

отделтностоящий стандарт на базе фуфлового, не?

Это какой?

ant1
()
Ответ на: комментарий от mshewzov

Просто разработчики Angie включали мозг чуть сильней, чем разработчики nginx и подумали чуть больше о том, что плохого может прийти по сокету.

vbr ★★★★★
()
Ответ на: комментарий от monk

Я поэтому и спрашиваю. Сравниваем:

HTTP/1.1:

Повторяем N раз в разных взаимоисключающих ипостастях
    XXX Syntax
    ...
    XXX Parsing
    ...
    Obsolete XXX 
    ...

Между делом втыкаем:
A process for decoding the chunked transfer coding can be represented in pseudo-code as:
   ....
   ....

HTTP/2:

Frame Format
...
DATA Frame
...
r--r--r--
()
Ответ на: комментарий от ant1

Это какой?

https://en.wikipedia.org/wiki/QUIC

Гугла разработала экспериментальную версию, которая ныне зовется gQUIC. QUIC ныне зовётся стандартизированный IETF протокол и не считается акронимом.

Про хромиум пишут:

It contains a standalone gQUIC and QUIC client and server programs that can be used for testing.

Про фэйсбучное сказано:

mvfst (Pronounced move fast) is a client and server implementation of IETF QUIC protocol in C++ by Facebook.

С акцентом на то, что это IETF версия протокола

BruteForce ★★★★
()
Ответ на: комментарий от thesis

ЙЦУКЕНГ фарева! Иделальный шрифт, и ЕГГОГ меня совсем не беспокоит. Ну ладно, Вектор 06-Ц дайте. Или Корвет. На Корвете ДанДари чотенький. И Палочку Щастья

PcheloBiaka
()
Последнее исправление: PcheloBiaka (всего исправлений: 2)
Ответ на: комментарий от r--r--r--

Obsolete XXX

Это где такое? Если 5.2, то там достаточно простое исключение

Между делом втыкаем:

В HTTP/1 хоть псевдокод дали. В HTTP/2 просто An 8.1 HTTP message (request or response) consists of три вида сообщений в почти произвольном порядке. Собирайте как хотите, точнее не как хотите, а внимательно прочитав весь раздел 8.

monk ★★★★★
()
Ответ на: комментарий от BruteForce

Так это и пугает, что фуфел поумнел и от сервисов ушел на фундаментальный уровень. Гнать их оттуда ссаными тряпками! Они ничего просто так не делают.

ant1
()
Ответ на: комментарий от monk

хоть псевдокод дали.

Если дают псевдокод вместо описания формата данных, значит структура данных более сложная по шкале сложности.

Собирайте как хотите, точнее не как хотите, а внимательно прочитав весь раздел 8.

И чем это отличается от HTTP/1.1 ?

r--r--r--
()
Ответ на: комментарий от ant1

вжух и твоя почта и личные данные безбожно сливаются всем, кто готов за это платить

Там какой-то японский мангака загрузил на гугл-диск свои рисунки. Архив. Которые он рисовал. И публиковал в разных журналах.

Гугл просканировал файлы. Обнаружил, что они под какими-то авторскими правами (очевидно издателя). Хотя это был личный диск. Гугл его удалил. И заблокировал аккаунт. Письмо с претензией проигнорировал.

thegoldone ★★★
()
Ответ на: комментарий от r--r--r--

И чем это отличается от HTTP/1.1 ?

Тем, что есть псевдокод, который понятно как реализовывать. А по 8 пункту даже псевдокод с ходу не накидать и особых случаев явно больше.

monk ★★★★★
()
Ответ на: комментарий от monk

Протокол http/1.1 фундаментально дырявый, в статье все написано, что сколько пытались фиксить, решения не нашли. Вопрос не в «сложности», а в том, что это уже устаревший протокол, и его необходимо выключить для внешних систем.

ac130kz ★★★
()
Ответ на: комментарий от ac130kz

устаревший протокол, и его необходимо выключить

надо начинать с тут 🙂

curl -I --http2 https://www.linux.org.ru
HTTP/1.1 200 
Server: QRATOR
Date: Fri, 05 Jun 2026 16:58:27 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=15
curl --http2-prior-knowledge https://www.linux.org.ru
curl: (16) Remote peer returned unexpected data while we expected SETTINGS frame.  Perhaps, peer does not support HTTP/2 properly.
yandrey ★★★
()
Ответ на: комментарий от ac130kz

Протокол http/1.1 фундаментально дырявый, в статье все написано

Не фундаментально, а только если запросы от нескольких клиентов запихивать в одно соединение TCP, при этом не измеряя реальный размер запросов, а передавай как есть от клиентов.

С таким походом и линейная модель памяти фундаментально дырявая. Если все процессы в ней запустить без защиты памяти.

monk ★★★★★
()
Ответ на: комментарий от CrX

ИИ же лишён этого недостатка — он может в конкретном месте даже и хуже ищет, но он железный и может делать это «просматривая» действительно весь код за раз, не отвлекаясь на что-то более интересное, и не требуя за это полноценной зарплаты.

Согласен, конечно. Я и сам пользуюсь ИИ для анализа большого массива документов. Как минимум мне он упрощает предварительный анализ. А иногда и полностью заменяет его. Сам бы я без него анализировал такой объем где-то с неделю-две.

Получается как бы с одной стороны безопаснее и быстрее, а с другой наоборот. Что перевесит, можно только гадать, простора для аналитики тут мало.

Тоже поддерживаю. ИИ развивается так быстро, что аналитику толковую собрать никто не успевает, как она уже устаревает на 2-3 поколения и становится неактуальной. Посмотрим, во что это выльется. Надеюсь не в сюжеты из фантастических фильмов про конец человечества.

mshewzov ★★★★
()
Ответ на: комментарий от ac130kz

Не удивлюсь, если те страшилки по ссылкам написаны при поддержке гугла или ещё каких-то корпорастов, которым неймётся везде внедрить свои протоколы.

Забыли они только упомянуть, что случается это всё при использовании либо каких-то древностей из 90-х, либо ещё какой-то чуши вместо nginx в качестве фронтэнда. nginx же сам всё парсит, и либо отдаёт http/400 если запрос совсем плохой, либо (речь про proxy_pass, т.к. во всех остальных случаях это совсем не актуально) пересылает дальше запрос со скорректированными заголовками, уже не могущими вызвать проблем.

Пересылать запрос дальше в сыром виде он может только если отключена буферизация запроса. Дефолтно она включена, и отключать её может иметь смысл только в крайне редких ситуациях (когда запрос отправляется интерактивно, либо когда он очень большой и не хочется его промежуточно сохранять).

Ну и стоит отметить, что proxy_pass само по себе используется редко, обычно у бэкэндов протокол fastcgi или его аналог.

Так что, подавляющее большинство http/1.x-систем в полной безопасности по отношению к данному явлению.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.