Удалённый неаутентифицированный клиент может заставить сервер HTTP/3 выделить в десятки и тысячи раз больше памяти, чем он отправляет. Для исчерпания памяти сервера или вывода из строя сервера с настройками по умолчанию достаточно одного соединения. Семь из десяти протестированных реализаций уязвимы, и несколько из них уже исправлены.
QPACK сжимает заголовки HTTP/3, чтобы свести к минимуму объём трафика, передаваемого по сети. В затронутых реализациях ограничения на размер декодированных заголовков отсутствуют, неполны или применяются слишком поздно. Поэтому небольшой фрейм HEADERS может развернуться в памяти в сотни тысяч объектов заголовков. Чтобы предотвратить такое расширение, необходимо вводить совокупный лимит по мере декодирования и хранения полей.
Исследование началось при изучении стеков QUIC для сканера TLS JA4Scan, где один и тот же класс уязвимостей обнаружился во многих реализациях HTTP/3. RFC 9114 определяет, как серверам следует ограничивать размер декодированных заголовков, однако некоторые реализации проверяют только размер сжатого фрейма, распаковывают всё до проверки, не учитывают 32-байтовые накладные расходы на каждое поле, по умолчанию считают значение неограниченным, если параметр не настроен, или вообще не применяют этот параметр.
Атака работает в двух направлениях. Фрейм HEADERS размером 1 000 000 байт может содержать около 160 000 уникальных заголовков, а вариант с динамической таблицей добавляет одну большую запись и ссылается на неё тысячи раз однобайтовыми индексами, что даёт коэффициент 4064:1 в lsquic и Bun.
Исправления доступны для quic-go, Cloudflare quiche, lsquic и Wireshark. По состоянию на 20 октября 2026 года Bun, крейт h3 и aioquic/mitmproxy оставались неисправленными. Меры защиты включают отказ от публикации серверов HTTP/3, отключение HTTP/3 в mitmproxy и установку разумного значения max_field_section_size в h3. IIS, Envoy и ngtcp2/nghttp3 не затронуты.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing