Един компресиран отговор може да изглежда като безобидна техническа подробност. Рискът се появява, когато уязвим декодер сбърка некоректни данни за смяна на блок с непълен поток и запише извън вътрешен буфер с фиксиран размер.
Накратко: какво е 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-минутен преглед на риска
Ще помогнем да откриеш вероятните пътища на излагане на риск и практичните следващи стъпки, без ангажимент.