Критична уязвимост с името „HTTP2Shell“ в Brotli – библиотеката за C декодиране, вградена в Node.js – би могла да позволи на атакуващите да повредят паметта и да получат достъп до чувствителни данни.
Проблемът със сигурността се проследява като CVE-2026-111497 и е известен също като „Broccoli2Shell“ и „Node2Shell“. Той засяга версии на Brotli от 1.0.3 до 1.0.9, 1.1.0 и 1.2.0.
Уязвимостта се съобщава под няколко имена, тъй като първоначално е идентифицирана в Node.js, преди изследователите да установят, че същият дефект в декодера на Brotli може да засегне софтуер в множество екосистеми.
Brotli е проект с отворен код, разработен и поддържан от Google за компресиране на данни без загуби. Той смалява файловете, така че да могат да се предават по-бързо, без това да влияе на оригиналните данни.
Широко въздействие
Името HTTP2Shell отразява въздействието върху HTTP клиенти и сървъри, въпреки че уязвимостта не е специфична за HTTP/2 и може да засегне други приложения, които декомпресират контролирани от атакуващ данни с Brotli.
Освен Node.js, потенциално засегнатият софтуер включва Python HTTP клиенти като urllib3[brotli], requests, httpx и aiohttp[speedups], когато са конфигурирани с уязвим декодер на Brotli, както и други приложения и инструменти, използващи уязвими реализации на Brotli.
В неделя Microsoft пусна спешно обновяване за сигурност, за да отстрани проблема в .NET, като предупреди, че успешното експлоатиране позволява ескалация на привилегии в системи с уязвима версия на .NET.
Уязвимостта Node2Shell представлява препълване на буфера (buffer overflow), което позволява на специално създаден поток, компресиран с Brotli, да предизвика невалидно превключване на блокове, което декодерът третира като валидно и погрешно интерпретира като заявка за още входящи данни.
Чрез непрекъснато добавяне на входящи байтове към вътрешен осембайтов буфер, записът се разпростира извън неговите граници, повреждайки съседната памет.
„Невалидно превключване на блокове беше докладвано като временна нужда от още входящи данни вместо като постоянна грешка във формата, така че декодерът за поточно предаване продължи да добавя входящи байтове към осембайтов вътрешен буфер“, обясняват от Node.js в бюлетин за сигурност.
Атакуващ може да я експлоатира, като накара дадено приложение да декомпресира злонамерени данни, например чрез подаване на компресиран HTTP отговор към приложение, извличащо URL адрес, или чрез изпращане на компресирана заявка директно към сървър.
От Node.js заявяват, че това може да срине процеса, да разкрие памет и да позволи отдалечено изпълнение на код (RCE).
Неотдавнашен доклад на компанията за киберсигурност Imperva потвърждава, че експлоатирането на уязвимостта CVE-2026-111497 Node2Shell може да доведе до RCE.
Корекциите в изходния код на Brotli първоначално са въведени през февруари, но Node.js и Google пуснаха стабилни корекции за сигурност за потребителите на 21 октомври, последвани от публично оповестяване на следващия ден. Пакетите в PyPI, съдържащи поправките, станаха налични на 23 октомври.
- Google Brotli 1.0.10, 1.1.1, 1.2.1
- Node.js 22.23.4, 24.22.1, 26.12.1
- Python Brotli 1.2.1
- Python brotlicffi 1.2.1.0
Публикувани са концептуални кодове за експлоатация (PoC) за Node2Shell, но няма данни за злонамерено експлоатиране в реални условия. Въпреки това потребителите трябва приоритетно да приложат наличните корекции за сигурност.
След обновяването администраторите трябва да рестартират засегнатите процеси, а засегнатите контейнерни образи трябва да бъдат преизградени и разгърнати отново.
Специализиран онлайн портал, проследяващ въздействието на дефекта, също така предупреждава, че обновяването на системната библиотека Brotli не премахва риска при инсталации на Node.js или други приложения, които използват собствено пакетирано копие на библиотеката.
Освен това блокирането на входящите Brotli заявки все още оставя уязвим пътя през злонамерен HTTP отговор.
Ако незабавно обновяване не е възможно, препоръката е да се премахне поддръжката на Brotli от приложенията на Python и да се блокират входящите заявки, компресирани с Brotli, на ниво прокси сървър или защитна стена.