HTTP/2Shell: Поправи уязвимостта в Brotli сега

Критична грешка в декодера Brotli засяга няколко среди за изпълнение и библиотеки. На 27 октомври CISA добави уязвимостта в каталога си Known Exploited Vulnerabilities, така че е време да провериш какво всъщност използват приложенията ти.

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

Накратко: какво е HTTP/2Shell и какво не е

  • Уязвимостта: CVE-2026-111497 е грешка в безопасността на паметта в декодера Brotli, известна още като HTTP/2Shell, Node2Shell или Brotli2Shell.
  • Как се задейства: Уязвим декодер трябва да обработи специално изработен Brotli поток. Самата поддръжка на HTTP/2 или компресирането на изходящи отговори с Brotli не доказват, че си засегнат.
  • Възможните последици: В зависимост от приложението и пътя на изпълнение запис извън границите на буфера може да срине или повреди процес, да разкрие данни от паметта или потенциално да позволи отдалечено изпълнение на код. Изследователи демонстрираха RCE в уязвима компилация на Node.js.
  • Колко е спешно: На 27 октомври CISA добави CVE в каталога си Known Exploited Vulnerabilities, което означава, че има данни за експлоатация. Публичните сведения не установяват мащаба на успешните компрометирания.

Какво точно се поврежда в декодера

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

Записът извън границите на буфера е средство за повреда на паметта, а не автоматично изпълнение на код. Резултатът зависи от процеса, компилацията, разположението на паметта и наличните защитни механизми. При неподходящи обстоятелства последствията може да са по-сериозни от срив. Демонстрацията на RCE в Node.js показва, че изпълнението на код е възможно поне в една уязвима среда, но не и че всяка засегната услуга е еднакво уязвима за експлоатация.

Къде може да се крие рискът

Името е малко подвеждащо. Това не е уязвимост в протокола HTTP/2. Общият фактор е уязвимият декодер Brotli, където и да е вграден и където и да обработва компресирани данни, контролирани от атакуващ.

Това може да включва сървър, който декодира компресирани данни от заявки, клиент, който декодира отговор от ненадежден източник, прокси или service mesh, както и софтуер, който обработва компресирани файлове. Услуга, която използва Brotli само за компресиране на изходящи отговори, не е непременно изложена чрез тази функция. Все пак провери дали същата среда за изпълнение или библиотека не декодира данни и на други места.

Засегнати са версиите на основния проект Brotli 1.0.3–1.0.9, 1.1.0 и 1.2.0. Коригираните версии в основния проект включват 1.0.10, 1.1.1 и 1.2.1. Пакетите, които включват тези версии, може да имат собствен код и график за издаване. Например Node.js посочва корекции във версиите 22.23.4, 24.22.1 и 26.12.1. Провери препоръките на всеки доставчик, вместо да приемаш, че актуализация на пакет за операционната система поправя и копие, включено в приложението.

Какво да направиш сега

  • Направи инвентаризация на средите за изпълнение, пакетите, контейнерите и самостоятелните приложения, които включват Brotli. Провери зависимостите и данните за софтуерните компоненти, а след това установи кои от тях декодират ненадежден вход.
  • Поправи декодера или засегнатата среда за изпълнение, като инсталираш коригираната версия на доставчика. Прегледай препоръките за Node.js и указанията за .NET, Envoy и Istio.
  • Изгради отново и внедри наново засегнатите контейнери и самостоятелни приложения, а след това рестартирай процесите. Корекция в библиотеката на хоста може да не замени копие, статично свързано или включено в приложението.
  • Докато внедриш корекцията, изключи декодирането на Brotli за пътищата, които обработват ненадежден вход, ако можеш да го направиш безопасно. Блокирането на входящия Content-Encoding: br може да ограничи един от пътищата към сървъра, но не защитава клиенти, които декодират злонамерени отговори, нито инструменти, които обработват компресирани файлове.

Ето един лесен капан: изключването на компресирането с Brotli или премахването на br от заглавката Accept-Encoding на клиента не изключва надеждно декодирането с Brotli. Провери пътя в кода, който получава и декодира данни, а не само настройката, която определя какво изпраща услугата ти.

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


Запази 15-минутен преглед на риска
Ще помогнем да откриеш вероятните пътища на излагане на риск и практичните следващи стъпки, без ангажимент.