CVE-2026-39804
WysokieCVSS 8.2Prawdopodobieństwo exploitacji (EPSS)
Podwyższone ryzykoPercentyl 55 - wyżej niż 55% wszystkich znanych CVE
Streszczenie
Biblioteka bandit (mtrudel) w wersjach od 0.5.9 do 1.11.0 ma podatność polegającą na braku ograniczeń zasobów podczas dekompresji permessage-deflate w WebSocket. Funkcja inflate/2 wywołuje :zlib.inflate/2 bez limitu rozmiaru wyjściowego, co pozwala nieuwierzytelnionemu atakującemu na wysłanie jednej silnie skompresowanej ramki i wyczerpanie pamięci węzła BEAM.
Ocena ryzyka
Atakujący może zdalnie wywołać atak typu denial of service poprzez wyczerpanie pamięci i zabicie procesu OOM. Podatność dotyczy tylko aplikacji z włączoną kompresją WebSocket (compress: true), a domyślne konfiguracje Phoenix i LiveView są odporne.
Rekomendacja
Zaktualizuj bibliotekę bandit do wersji 1.11.0 lub nowszej. Jeśli aktualizacja nie jest możliwa, wyłącz kompresję permessage-deflate w WebSocket.
Inne podatności w bandit
Zobacz wszystkie- CVE-2026-116078Wysokie
W bibliotece bandit (Elixir) w wersjach od 0.3.1 przed 1.14.1 czytnik ciała żądania HTTP/2 nie ogranicza zasobów, co pozwala nieuwierzytelnionemu zdalnemu atakującemu wyczerpać pamięć serwera poprzez ciało żądania wysłane jako wiele ramek DATA o rozmiarze 1 bajta. Podatne są trasy, których Plug odczytuje ciało żądania, w tym trasy za Plug.Parsers.
- CVE-2026-115269Wysokie
W bibliotece bandit (mtrudel) występuje podatność na wyczerpanie zasobów bez ograniczeń w czytniku ciała żądania HTTP/2 — nieuwierzytelniony zdalny atakujący może utrzymywać procesy strumieni otwarte bezterminowo przez ramki WINDOW_UPDATE lub puste SETTINGS wysyłane podczas gdy Plug czyta ciało żądania. Dotyczy wersji od 1.4.0 przed 1.14.0.
- CVE-2026-114216Średnie
Podatność na niespójną interpretację żądań HTTP ('HTTP Request/Response Smuggling') w czytniku treści chunked HTTP/1.1 w mtrudel bandit pozwala nieuwierzytelnionemu zdalnemu atakującemu na przemycenie drugiego żądania obok front-endowego proxy poprzez rozszerzenie chunka zawierające samo LF. Czytnik chunked w lib/bandit/http1/socket.ex traktuje linię rozmiaru chunka jako wszystko do pierwszego CRLF i odrzuca wszystko po ; bez sprawdzania zgodności z gramatyką chunk-ext RFC 9112, więc samo LF, samo CR i inne bajty kontrolne przechodzą. Proxy, które kończy linię rozmiaru na samym LF, odczytuje 2;\nxx\r\n40\r\n... jako jedno żądanie, którego drugi chunk zawiera GET /admin, podczas gdy Bandit kończy treść wcześniej i wysyła GET /admin jako osobne żądanie potokowe. Wdrożenia bez takiego proxy przed Bandit nie są dotknięte.
- CVE-2026-114213Wysokie
Podatność w bibliotece Bandit (Elixir) polega na braku limitu liczby fragmentów wiadomości WebSocket podczas ich łączenia. Atakujący może wysłać wiadomość złożoną z wielu 1-bajtowych ramek kontynuacji, co powoduje zużycie pamięci serwera znacznie przekraczające skonfigurowany limit (nawet 150-krotnie).
- CVE-2026-113436Wysokie
Podatność w parserze liczb całkowitych nagłówków HTTP w bibliotece Bandit (Elixir) pozwala nieuwierzytelnionemu atakującemu na zużycie CPU serwera poprzez przesłanie wartości Content-Length, Host lub portu :authority składającej się z tysięcy cyfr. Parsowanie odbywa się bez limitu długości, co prowadzi do kwadratowego wzrostu czasu przetwarzania.
- CVE-2026-111103Wysokie
Podatność w obsłudze HTTP/2 w bibliotece Bandit (Elixir) polega na nieprawidłowym czyszczeniu stanu po wyjątku StreamError. Atakujący może obejść limity zasobów na połączenie, wysyłając wiele ramek w jednym zapisie TCP, z których jedna powoduje błąd strumienia, co prowadzi do uruchomienia większej liczby równoległych strumieni niż dozwolona.
- CVE-2026-111101Wysokie
Podatność w czytniku ciała żądania chunked w HTTP/1.1 w bibliotece Bandit (Elixir) pozwala nieuwierzytelnionemu atakującemu na wyczerpanie pamięci i CPU serwera poprzez żądanie złożone z wielu 1-bajtowych fragmentów. Brak limitu liczby fragmentów powoduje, że małe fragmenty zużywają znacznie więcej pamięci niż ich ładunek.
- CVE-2026-110499Wysokie
Podatność w implementacji HTTP/2 w bibliotece Bandit (Elixir) pozwala nieuwierzytelnionemu atakującemu na nieograniczony wzrost zużycia pamięci i CPU poprzez dużą wartość SETTINGS_HEADER_TABLE_SIZE. Bandit zmienia rozmiar tabeli kodera HPACK do rozmiaru ogłoszonego przez klienta (do 2^32-1 bajtów) i indeksuje nagłówki odpowiedzi, co prowadzi do liniowego skanowania przy każdym wyszukaniu i kwadratowego wzrostu kosztu CPU.
- CVE-2026-110314Średnie
Podatność na egzekwowanie zabezpieczeń po stronie klienta zamiast serwera w obsłudze połączeń WebSocket w mtrudel bandit pozwala zdalnemu klientowi na dalsze uruchamianie kodu obsługi WebSock po zatrzymaniu połączenia przez serwer, poprzez ramki danych wysyłane po zignorowaniu ramki Close serwera. Gdy callback WebSock zwraca {:stop, ...}, Bandit.WebSocket.Connection wywołuje terminate/2, wysyła Close i zamyka stronę zapisu, ale utrzymuje proces połączenia w stanie :closing. handle_frame/3 i handle_info/3 nigdy nie sprawdzają tego stanu, więc późniejsze ramki nadal docierają do handle_in/2, a późniejsze wiadomości do handle_info/2, ze stanem z krotki stop, dopóki klient nie wyśle Close, TCP nie zostanie zerwane lub nie upłynie limit czasu bezczynności. Klient odrzucony w init/1 po nieudanym sprawdzeniu tokena mógłby nadal wykonać akcję tylko dla administratora.
- CVE-2026-109584Wysokie
Podatność w implementacji HTTP/2 w bibliotece Bandit (Elixir) polega na nieprawidłowym przetwarzaniu silnie skompresowanych danych (amplifikacja danych). Atakujący może wysłać mały blok HEADERS skompresowany HPACK, który przechowuje dużą wartość cookie w tabeli dynamicznej, a następnie wielokrotnie odwołuje się do niej za pomocą 1-bajtowych pól indeksowanych, co prowadzi do wyczerpania pamięci serwera.
Oryginalny opis (angielski, źródło NVD)
Allocation of Resources Without Limits or Throttling vulnerability in mtrudel bandit allows unauthenticated remote denial of service via memory exhaustion when WebSocket permessage-deflate compression is enabled. 'Elixir.Bandit.WebSocket.PerMessageDeflate':inflate/2 in lib/bandit/websocket/permessage_deflate.ex calls :zlib.inflate/2 with no output-size cap, then materializes the entire decompressed payload as a single binary via IO.iodata_to_binary/1. The websocket_options.max_frame_size option only bounds the on-the-wire (compressed) frame size, not the decompressed output. A high-ratio compressed frame (e.g. uniform data at ~1024:1 ratio) can stay well under any wire-size limit while forcing GiB-scale heap allocations in the connection process before any application code runs. An unauthenticated attacker who can open a WebSocket connection can send a single such frame to exhaust the BEAM node's memory and trigger an OOM kill. This vulnerability requires both Bandit's server-level websocket_options.compress and the per-upgrade compress: true option passed to WebSockAdapter.upgrade/4 to be enabled. Stock Phoenix and LiveView applications are not affected as they default to compress: false. This issue affects bandit: from 0.5.9 before 1.11.0.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

