CVE-2026-111497: Krytyczna luka Node2Shell w dekoderze Brotli Node.js
Detection stack
- AIDR
- Alert
- ETL
- Query
Podsumowanie
Node2Shell to krytyczna luka (CVE-2026-111497) w dekoderze Brotli zawartym w Node.js, spowodowana przez zapisywanie poza wyznaczone granice pamięci. Atakujący mogą wykorzystać ten błąd poprzez dostarczanie złośliwie zmodyfikowanych strumieni skompresowanych do usług przetwarzających dane Brotli, co potencjalnie może prowadzić do odmowy usługi, ujawnienia pamięci lub zdalnego wykonania kodu. Szczególne zagrożenie stanowi dla usług używających Express 5 lub middleware automatycznie dekompresującego Brotli.
Śledztwo
Zespół Sysdig Threat Research przeanalizował tę lukę i zgłosił, że publiczny PoC pojawił się w ciągu kilku godzin od wydania łaty. Badania Impervy i Vercel wykazały, że wykonywanie kodu jest możliwe na określonych architekturach, w tym Linux arm64. Śledztwo wykazało, że możliwość eksploatacji zależy od tego, czy aplikacja lub jej biblioteki, takie jak body-parser, przetwarzają strumienie Brotli kontrolowane przez atakującego.
Łagodzenie
Głównym sposobem łagodzenia jest aktualizacja Node.js do wersji 22.23.4, 24.22.1 lub 26.12.1 oraz aktualizacja Bun do wersji 1.4.4 lub nowszej. Organizacje powinny również wyłączyć dekompresję żądań, gdzie to możliwe, w tym ustawienie inflate: false w body-parser. Wdrożenie zasad WAF do odrzucania nieufnych Content-Encoding: br żądań i uruchamianie usług na nieuprzywilejowanych kontach zapewnia dodatkowe warstwy obronne.
Reakcja
Jeśli zostanie wykryty potencjalny łańcuch eksploatacji, na przykład awaria procesu Node.js, a następnie nieoczekiwane wykonanie programu, zespoły bezpieczeństwa powinny natychmiast odizolować dotknięte obciążenie. Monitoruj działania po eksploatacji, w tym interaktywne powłoki, nieautoryzowane pobieranie złośliwego oprogramowania, kryptowalutę lub kradzież tajemnic i tokenów chmurowych. Łatanie wszystkich dostępnych podatnych usług powinno pozostać najwyższym priorytetem.
Przebieg ataku
Nadal aktualizujemy tę część.
Wykrycia
Podejrzane procesy dziecięce NodeJS [Windows] (poprzez cmdline)
Podejrzana powłoka przez serwer WWW [Linux] (poprzez process_creation)
Podejrzane procesy dziecięce NodeJS [Linux] (poprzez cmdline)
Wykrycie awarii procesu Node.js, a następnie wykonania programu na miejscu – Eksploatacja Node2Shell [Tworzenie procesu w systemie Linux]
Wykonanie symulacji
-
Narracja ataku i komendy: Przeciwnik celuje w aplikację webową działającą na Node.js. Wysyłają złośliwy ładunek skompresowany Brotli, który wywołuje błąd naruszenia pamięci, powodując awarię procesu
node. Bezpośrednio po awarii atakujący wykorzystuje przejęty przepływ wykonania do uruchomienia/bin/bashpowłoki w celu ustanowienia trwałości i rozpoczęcia lokalnego rozpoznania. Ta sekwencjanodewydarzeń poprzedzona/bin/bashwykonaniem ma na celu dopasowanie doselection_crashandselection_suspicious_execlogiki reguły wykrycia. -
Skrypt testu regresji:
#!/bin/bash # Symulacja wzorca eksploatacji w stylu Node2Shell echo "[+] Rozpoczęcie symulacji Node2Shell..." # 1. Symuluj proces Node.js, który 'zawiesza się' lub jest nagle zakończony # W rzeczywistej sytuacji jest to awaria. Tutaj symulujemy telemetrię # wywoływanego/przetwarzanego procesu node. node -e "process.exit(1)" echo "[+] Proces Node.js 'zawiesił się' (Kod wyjścia 1)." # 2. Symuluj natychmiastowe wykonanie podejrzanej powłoki # To naśladuje ładunek wywołujący powłokę po awarii. /bin/bash -c "echo 'Eksploatacja zakończona pomyślnie: Wystartowała powłoka'" echo "[+] Symulacja zakończona. Sprawdź wykrycie w SIEM." -
Komendy do czyszczenia:
# Podczas tej symulacji nie utworzono żadnych trwałych plików. # Wystarczy upewnić się, że nie działają żadne nielegalne procesy bash. pkill -f "Eksploatacja zakończona pomyślnie"