Манипулирани Brotli данни могат да накарат приложение, работещо върху официална компилация на Node.js, да изпълни предоставен от атакуващ код, демонстрираха изследователи по сигурността от Imperva.
Техният практически прототип „Node2Shell“ е изпълнил код на официален Node.js 24.22.0 образ за Linux arm64 без дебъгер или модифицирана компилация, чрез подаване на специално създадени данни към вградения Brotli декодер (CVE-2026-111497). Node.js оповести уязвимостта и пусна корекции за сигурност на 21 октомври, като приложенията, които декодират ненадеждни Brotli данни, трябва да се обновят.
Тестът на Imperva не е успявал при всеки опит, като изпълнението на код е изисквало няколко опита в тяхната среда на Linux arm64. Резултатът обхваща тази конкретна конфигурация на компилация и приложение, докато други архитектури и клоновете 22.x и 26.x не са били тествани. При коригираната версия 24.22.1 същите данни са били отхвърлени и не е бил изпълнен код.
Демонстрацията надгражда първия публичен практически прототип, който постигна изпълнение на код само върху умишлено компрометирана тестова среда. При стандартна компилация авторът на този първи прототип съобщи за срив и ограничено четене на системна памет, но не и за изпълнение на код, и посочи, че работеща атака срещу стандартна компилация не е била реализирана.
Към 22 октомври няма данни за експлоатация на уязвимостта в реална среда.
Кои приложения са засегнати
Уязвимостта се намира във вградения в Node.js декодер Brotli, поради което засяга приложения от линиите 22.x, 24.x и 26.x, а не само конкретната компилация, тествана от Imperva. Дадена услуга осъществява достъп до този декодер от двете страни на HTTP обмена: при четене на компресиран с Brotli отговор чрез вградената функция fetch() на Node.js или когато междинен софтуер (middleware) декодира компресирано с Brotli тяло на заявка.
Парсерите на тяло в Express 5, като например express.json(), express.urlencoded(), express.text() и express.raw(), вече декодират тела на заявки с Brotli компресия, когато са приложени към маршрут, наред с gzip и deflate. Стандартен HTTP сървър на Node.js не декодира автоматично Brotli тяло на заявка само при получаването му, така че процесът на декодиране изисква такъв междинен софтуер или изрично извикване.
От Imperva възпроизведоха изпълнение на код както през тялото на заявката, така и през входящия отговор, като са тествали фиксирани версии от Express 5.0.0 до 5.3.0 и body-parser от 2.0.0 до 2.3.0, без да тестват всяко междинно издание.
Как функционира проблемът
От Imperva установяват, че причината се корени в начина, по който декодерът обработва недопустима точка в Brotli поток: потокът заявява типовете блокове, които ще използва по време на декодирането, а тестовите входни данни са достигнали до промяна на блока, която самата структура на потока изключва. Уязвимият декодер е разчел това като заявка за още входни данни и е продължил работа в невалидно състояние.

В отделен тест със средство за проверка на паметта (memory sanitizer), продължаването на работа от това състояние е довело до запис извън заделения буфер (out-of-bounds write) — дефектът, стоящ зад уязвимостта.
Node.js отстрани уязвимостта чрез импортиране на официална корекция за Brotli, която кара декодера да спира с грешка във формата в тази точка, вместо да продължава изпълнението.
Какви мерки да се предприемат
Решението е преминаване към обновена версия. Обновяването трябва да обхване контейнерни базирани образи и други артефакти, съдържащи изпълним файл на Node, които могат да бъдат пропуснати при стандартен одит на пакетите. Излезлите от поддръжка версии 20.x и по-стари не получават корекция за сигурност и трябва да бъдат мигрирани към поддържана версия.
Бюлетинът за сигурност не съдържа алтернативно решение (workaround) в рамките на самия Node.js, така че приложения, които не могат да се обновят незабавно, нямат вграден резервен механизъм. От Imperva препоръчват ограничаване на ненадеждния Brotli трафик по засегнатите пътища, където това е приложимо, подчертавайки, че само инсталирането на корекциите за сигурност премахва напълно уязвимостта. Компанията също така добави защитни правила към своя WAF (Web Application Firewall) и ги тества срещу възпроизведените атаки.
От Vercel, която осигурява хостинг на Node.js за своите клиенти, съобщиха, че на 21 октомври са въвели правила, блокиращи атаката при входящи заявки. Тези правила обаче не покриват компресирани с Brotli отговори, които приложението извлича от външни сървъри, и не заместват цялостното обновяване.