Krytyczna luka w dekoderze Brotli zagraża Node.js, Bun, Pythonowi i komponentom proxy - Security Bez Tabu

Krytyczna luka w dekoderze Brotli zagraża Node.js, Bun, Pythonowi i komponentom proxy

Cybersecurity news

Wprowadzenie do problemu / definicja

W ekosystemie aplikacji webowych ujawniono krytyczną podatność w dekoderze Brotli, czyli mechanizmie odpowiedzialnym za dekompresję danych skompresowanych popularnym formatem używanym w ruchu HTTP. Błąd może zostać wywołany przez specjalnie przygotowany strumień danych i prowadzić do uszkodzenia pamięci, awarii procesu, wycieku informacji, a w najbardziej niebezpiecznych scenariuszach także do zdalnego wykonania kodu.

Problem jest szczególnie istotny, ponieważ Brotli funkcjonuje w wielu warstwach nowoczesnych aplikacji i infrastruktury — od runtime’ów, przez biblioteki klienckie, po reverse proxy i service mesh. To sprawia, że pojedyncza wada w niskopoziomowym komponencie może przełożyć się na bardzo szeroką powierzchnię ataku.

W skrócie

Podatność została oznaczona jako CVE-2026-111497 i wynika z błędu typu out-of-bounds write w bibliotece dekodera Brotli. Największe ryzyko dotyczy systemów, które automatycznie dekompresują niezaufane żądania lub odpowiedzi HTTP oznaczone nagłówkiem Content-Encoding: br.

  • zagrożone mogą być m.in. Node.js, Bun, wybrane pakiety Brotli dla Pythona oraz niektóre konfiguracje Envoy i Istio,
  • atak może zostać uruchomiony przez specjalnie spreparowany strumień danych Brotli,
  • możliwe skutki obejmują crash procesu, naruszenie integralności pamięci, wyciek danych i RCE,
  • nie odnotowano publicznie potwierdzonych przypadków aktywnego wykorzystania tej luki w środowiskach produkcyjnych.

Kontekst / historia

Brotli od lat pozostaje jednym z najczęściej stosowanych mechanizmów kompresji treści internetowych, szczególnie w komunikacji HTTP. Dzięki wysokiej efektywności kompresji został szeroko zaadaptowany przez serwery, biblioteki aplikacyjne i środowiska wykonawcze. W praktyce oznacza to, że wiele aplikacji korzysta z obsługi Brotli nawet wtedy, gdy deweloperzy nie odwołują się do niej bezpośrednio w kodzie.

Znaczenie problemu zwiększa fakt, że poprawka w kodzie źródłowym dekodera istniała wcześniej, ale przez pewien czas nie była traktowana jako klasyczna poprawka bezpieczeństwa. W efekcie aktualizacje zależnych komponentów były publikowane etapami, a część projektów utrzymywała własne kopie biblioteki lub wdrażała poprawki według własnego cyklu wydawniczego.

Analiza techniczna

Istotą podatności jest błąd korupcji pamięci podczas przetwarzania spreparowanego strumienia Brotli. W praktyce atakujący może dostarczyć dane wejściowe, które spowodują zapis poza granicami bufora w trakcie dekompresji. Taki scenariusz jest szczególnie groźny, ponieważ narusza podstawowe mechanizmy bezpieczeństwa pamięci i może zostać wykorzystany do destabilizacji aplikacji lub przejęcia kontroli nad procesem.

W środowisku Node.js podatna ścieżka może zostać osiągnięta między innymi wtedy, gdy aplikacja pobiera odpowiedź HTTP skompresowaną jako Brotli i dochodzi do jej automatycznej dekompresji. Zbliżony problem może wystąpić po stronie serwera, jeśli stos middleware albo parser żądań rozpakowuje treści oznaczone jako br. Oznacza to, że atak nie musi ograniczać się do klasycznego scenariusza złośliwego klienta wysyłającego żądanie do serwera — ryzyko może objąć również klientów odbierających odpowiedzi od złośliwego lub przejętego systemu zewnętrznego.

W przypadku Bun i Node.js szczególne znaczenie ma automatyczne przetwarzanie odpowiedzi przez funkcje sieciowe. W Pythonie wektor ataku pojawia się tam, gdzie zainstalowane są pakiety obsługujące Brotli, a biblioteki HTTP korzystają z nich do przezroczystej dekompresji. Z kolei w Envoy i Istio możliwość wykorzystania luki zależy od konfiguracji i od tego, czy mechanizm dekompresji Brotli został jawnie włączony.

To przykład podatności osadzonej poniżej warstwy logiki biznesowej. Nawet jeśli zespół deweloperski nie używa Brotli świadomie, luka może zostać aktywowana przez zależności pośrednie, wbudowane funkcje runtime’u albo domyślne zachowanie stosu HTTP. Z tego powodu identyfikacja ekspozycji wyłącznie na podstawie analizy kodu aplikacji może być niewystarczająca.

Konsekwencje / ryzyko

Najpoważniejszym skutkiem tej podatności jest możliwość zdalnego wykonania kodu bez uprzedniego uwierzytelnienia, o ile atakujący ma dostęp do podatnej ścieżki dekompresji. Nawet w środowiskach, w których pełne RCE okaże się trudne do osiągnięcia, sama korupcja pamięci pozostaje krytyczna ze względu na ryzyko awarii usług, utraty dostępności oraz naruszenia poufności danych.

Poziom ryzyka zależy od kilku czynników operacyjnych:

  • czy aplikacja lub komponent pośredniczący dekoduje niezaufane dane Brotli,
  • czy dekompresja jest wykonywana automatycznie,
  • jaka wersja biblioteki lub runtime’u działa w środowisku,
  • jakie mechanizmy ochronne zapewnia system operacyjny i sposób kompilacji,
  • czy proces ma dostęp do wrażliwych zasobów lub działa z podwyższonymi uprawnieniami.

Szczególnie zagrożone są środowiska API, reverse proxy, aplikacje mikroserwisowe oraz komponenty integracyjne intensywnie wykorzystujące komunikację HTTP. Problem może też zostać przeoczony przez organizacje opierające się wyłącznie na klasycznym skanowaniu zależności, jeśli narzędzia nie mapują jeszcze prawidłowo wszystkich pośrednich powiązań z podatnym dekoderem.

Rekomendacje

Najważniejszym działaniem jest jak najszybsza aktualizacja wszystkich podatnych komponentów do wersji zawierających poprawki bezpieczeństwa. Należy pamiętać, że sama instalacja nowszego pakietu nie zawsze rozwiązuje problem natychmiast, ponieważ uruchomione procesy, obrazy kontenerowe i komponenty pośrednie mogą nadal korzystać ze starego kodu.

  • zaktualizuj runtime’y, biblioteki i obrazy bazowe,
  • wykonaj pełny restart usług korzystających z dekodera Brotli,
  • przebuduj i ponownie wdroż kontenery,
  • zweryfikuj konfigurację proxy, service mesh i warstw pośredniczących,
  • sprawdź, gdzie w środowisku zachodzi automatyczna dekompresja danych br.

Do czasu pełnego wdrożenia poprawek warto dodatkowo ograniczyć powierzchnię ataku:

  • blokować przychodzące żądania skompresowane jako Brotli, jeśli nie są niezbędne biznesowo,
  • wyłączyć automatyczną dekompresję odpowiedzi Brotli w klientach HTTP tam, gdzie jest to możliwe,
  • usunąć zbędne pakiety Brotli ze środowisk Python,
  • przeprowadzić audyt bibliotek pośrednio odpowiedzialnych za przetwarzanie Content-Encoding: br,
  • monitorować awarie procesów, anomalie pamięci i nietypowe odpowiedzi HTTP.

Z perspektywy bezpieczeństwa warto traktować tę lukę jako problem łańcucha zależności. Oznacza to konieczność przeglądu SBOM, inwentaryzacji runtime’ów oraz identyfikacji wszystkich miejsc, w których dekompresja może zachodzić w sposób niejawny. W środowiskach produkcyjnych pomocna będzie także weryfikacja polityk WAF i reverse proxy, choć sama filtracja na brzegu sieci nie eliminuje wszystkich możliwych ścieżek ataku.

Podsumowanie

CVE-2026-111497 pokazuje, jak poważne skutki mogą wywołać błędy w niskopoziomowych bibliotekach przetwarzających dane wejściowe z sieci. Podatność w dekoderze Brotli ma szeroki zasięg, ponieważ obejmuje popularne środowiska wykonawcze, biblioteki i elementy infrastruktury sieciowej.

Najważniejsze ryzyko wynika z automatycznej dekompresji niezaufanych danych, która często odbywa się poza bezpośrednią świadomością twórców aplikacji. Organizacje powinny pilnie zidentyfikować miejsca ekspozycji, wdrożyć poprawki i czasowo ograniczyć obsługę Brotli tam, gdzie nie jest ona konieczna.

Źródła

  1. The Hacker News — Brotli Decoder Flaw Behind Node.js RCE Also Affects Bun, Python and Other Widely Used Software
  2. Node.js Security Releases
  3. Google Brotli Repository
  4. Envoy Security Advisories
  5. Python Package Index: Brotli