PHP, Node.JS, Java – zagrożone!

W połowie października 2026, w krótkim odstępie, wyszły informacje o poważnych podatnościach w PHP, Node.js, Javie (Oracle/OpenJDK) i GitLabie. Część pozwala na zdalne wykonanie kodu (RCE) bez uwierzytelnienia. Inne naruszają integralność albo poufność. Przy PHP opis błędu wyciekł przed oficjalnymi poprawkami, a próby ataku widać było jeszcze wcześniej.

Luki siedzą w interpreterze PHP, w Node.js, w JSSE i w samym GitLabie. W repozytoriach self-managed leży kod źródłowy, sekrety CI/CD i dostęp do środowisk produkcyjnych.

PHP2Shell: dwa RCE w silniku PHP

CVE-2026-109618 i CVE-2026-109619, zbiorczo PHP2Shell, mają po 9.2 w CVSS v4.0. NVD dało im 9.8 w CVSS v3.1. Obie dają nieuwierzytelnione RCE na serwerach, które obsługują żądania webowe.

CVE-2026-109618 to uszkodzenie pamięci przy obsłudze braku pamięci (out-of-memory). Gdy żądanie trafia w memory_limit w złym momencie, w trakcie częściowej inicjalizacji wewnętrznych danych żądania, obsługa OOM przerywa pracę, a późniejsze sprzątanie bierze niedokończone struktury za poprawne. Atakujący może celowo wyczerpać pamięć, na przykład spreparowanym żądaniem multipart. Efekt to korupcja pamięci i możliwość wykonania kodu. Przy Apache z mod_php wystarczy jedno żądanie bez logowania, zanim wystartuje kod aplikacji.

CVE-2026-109619 to use-after-free na starym stanie globalnym. Stan związany z żądaniem (postęp uploadu sesji, backtrace błędów fatalnych) potrafi przeżyć zwolnienie pamięci. Następne żądanie na tym samym workerze może użyć już zwolnionego obszaru. Stąd crashe, wyciek haseł, tokenów i kluczy oraz RCE.

Dotyczy to praktycznie wszystkich instalacji PHP obsługujących web, od linii 5.x. Analizy wskazują próg około 5.4. Oficjalne poprawki wyszły 21 października 2026 dla gałęzi nadal wspieranych: PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35. Wersje 8.1 i starsze są end-of-life i nie dostaną patcha od projektu PHP. Wyłączenie session.upload_progress, ustawienie memory_limit=-1 albo pm.max_requests=1 zmniejsza ryzyko, a lukę zamyka aktualizacja.

Badacze z firmy Calif (inicjatywa OpenAI „Patch the Planet”, z pomocą modeli AI) i niezależnie zespół Wiz znaleźli te błędy wcześniej. Planowano skoordynowane ujawnienie na 22 października. 20 października identyfikatory CVE krążyły już na forach i w mediach społecznościowych, razem z błędnym CVSS 10.0 i nagraniem PoC. PHP wydało ostrzeżenie wcześniej i przyspieszyło publikację poprawek o dzień. Chainguard wrzucił obrazy z poprawką kilka godzin przed oficjalnym release. Amazon Threat Intelligence zaobserwowało próby eksploatacji na honeypotach 17 października, cztery dni przed publicznym ujawnieniem. Cloudflare odnotowało tysiące prób ataku w godzinach przed patchem.

Udział PHP

Według W3Techs, stan na koniec października 2026, PHP stoi za około 69,3% stron, przy których da się rozpoznać język serwera. JavaScript ma około 8%. Dalej są Ruby i Java. Na PHP działają między innymi WordPress, WooCommerce, Drupal, Joomla, Magento, Laravel i Symfony. Infrawatch naliczył 5,48 miliona aktywnych usług PHP na około 3,34 miliona adresów IP. Analizy Shodan i Flare: w zależności od źródła 48-73% ujawnianych wersji to gałęzie niewspierane, dla których nie ma oficjalnego patcha. Setki tysięcy serwisów, w skali globalnej miliony, zostają narażone, dopóki nie podniosą PHP albo nie przejdą na wspieraną gałąź.

Node.js: Brotli i TLS/DNS

21 października 2026 Node.js wydał security release dla linii 22.23.4, 24.22.1 i 26.12.1. Weszło 10 poprawek, cztery o wysokiej ważności. Najpoważniejsza to CVE-2026-111497, czasem nazywana Node2Shell: zapis poza zakresem (out-of-bounds write) w dekoderze Brotli dołączanym do Node.js. Złośliwie skompresowane dane mogą uszkodzić pamięć i dać RCE z uprawnieniami procesu. Błąd jest w bibliotece Google Brotli. Wyzwala go fetch(), axios i inne klienty, które same dekompresują odpowiedź, albo kod, który podaje dane atakującego do zlib.brotliDecompress(). Publiczne PoC pojawiły się krótko po poprawkach.

Pozostałe wysokie błędy: obejście weryfikacji hostname w TLS, gdy IP zapisano pełnymi cyframi Unicode albo gdy host „luźno” rozwiązuje się do IP, oraz obcięcie nazwy w dns.resolve na znaku NUL. Są też błędy średnie i niskie: keep-alive, powtarzalne wartości losowe w snapshotach, modele uprawnień. Linie EOL, czyli 20.x i starsze, poprawek nie dostały.

Jako serwer WWW Node.js jest przy około 7,4% stron według W3Techs, mniej niż PHP. Po stronie serwera działają na nim API, aplikacje real-time, mikroserwisy i serwisy o dużym ruchu.

Java: CPU z 20 października i certyfikaty eMudhra

Oracle w Critical Patch Update z 20 października 2026 załatał w OpenJDK i Java SE liczbę podatności, którą część analiz nazywa rekordową: około 53 CVE w jednym cyklu, wielokrotnie więcej niż średnia z ostatnich lat. Wiele da się wykorzystać zdalnie, bez uwierzytelnienia, przez sieć.

Dzień później wyszedł alert poza cyklem: CVE-2026-91403, CVSS 9.1. Dotyczy JSSE (Java Secure Socket Extension) i skompromitowanych certyfikatów intermediate CA eMudhra. Atak jest zdalny, bez logowania, po sieci. Da się czytać i zmieniać dane. Lista wersji obejmuje wiele wydań Java SE i GraalVM. Zalecenie to natychmiastowa aktualizacja. Tymczasowo można zablokować konkretne certyfikaty albo włączyć sprawdzanie unieważnień.

Badania Azul i Vaadin pokazują, że w większości organizacji Java obejmuje często ponad połowę systemów, w tym wiele customer-facing i dostępnych z internetu, także w bankowości i administracji. Skanery internetowe liczą wystawione serwery aplikacyjne (JBoss/WildFly, WebLogic i inne) w setkach tysięcy albo w milionach. Duża część instancji nie jest bezpośrednio publiczna, a certyfikaty, zależności i API dają drogę do środka.

GitLab: pre-auth RCE w self-managed, od wersji 7.0

21 października 2026 GitLab wydał krytyczny patch dla Community Edition (CE) i Enterprise Edition (EE): 19.5.1, 19.4.3, 19.3.6 oraz backporty 19.2.9, 19.1.9, 19.0.10 i 18.11.13. Najpoważniejsza luka to CVE-2026-110264, CVSS 10.0. Integer overflow w kompilatorze wyrażeń regularnych Onigmo, silniku regex Ruby, który GitLab bundluje. W określonych warunkach użytkownik bez konta wykonuje dowolny kod na serwerze GitLab przez spreparowane wyrażenie regularne, między innymi przy renderowaniu plików Org-mode.

Podatne są praktycznie wszystkie self-managed wersje od GitLaba 7.0 z 2014 roku. GitLab.com i instancje Dedicated były już załatane albo nie wymagały działań. W tym samym release weszło około 12 poprawek. Dwie wysokie: CVE-2026-15723 (CVSS 8.2, przejęcie konta LDAP przy włączonym OmniAuth SAML i auto-linking) oraz CVE-2026-112212 (CVSS 7.5, zatrucie cache discovery OAuth/OIDC). Wcześniej, w krótkim odstępie, była już inna krytyczna luka regex w GitLabie, CVE-2026-97229.

Na takim GitLabie leży kod źródłowy, konfiguracja CI/CD, sekrety wdrożeniowe, tokeny i połączenia do produkcji. Stąd kradzież poświadczeń, atak na łańcuch dostaw (supply chain) i lateral movement. Shadowserver odnotowało ponad 2700 publicznych instancji GitLab CE. Wyciek przed patchem, taki jak przy PHP, tym razem nie wystąpił.

Wspierane wersje PHP, Node.js, Javy i self-managed GitLaba trzeba aktualizować od razu, a system, którego nie da się szybko załatać, odciąć albo wyłączyć. Jeśli instancja była wystawiona, wrażliwe dane trzeba zrotować, a logi przejrzeć pod kątem nietypowej aktywności. Trzeba też ustalić, kto patchuje runtime albo platformę: często hosting, dostawca obrazów kontenerów albo zespół DevOps, nie sam właściciel aplikacji. Wolniej idzie na wersjach EOL oraz tam, gdzie blokują zależności, shared hosting, proces zmian, a przy części wersji GitLaba migracja schematu.

Dołącz do newslettera, by być na bieżąco!

Jeśli chcesz być na bieżąco z blogiem, otrzymywać świetne porady dot. programowania i administracji serwerami, opinie w temacie gier - dołącz do newslettera!

Raz na jakiś czas wyślę Ci informację nt. bloga, a także będę wysyłać ekskluzywne materiały techniczne!

Nie czekaj i dołącz!

Dołączając do newslettera, akceptujesz naszą politykę prywatności!
Paweł Otlewski
Paweł Otlewski

DevOps as a Service

Articles: 70