Błędy zarządzania pamięcią zagrażają serwerom z PHP 5.4 i nowszymi
Calif.io, Wiz, OpenAI oraz Quarkslab ujawniły dwie luki w PHP, oznaczone jako CVE-2026-109618 oraz CVE-2026-109619, znane jako php2shell. Podatności dotyczą wszystkich serwerów internetowych z PHP w wersji 5.4 lub nowszej. Mogą one pozwolić atakującemu na wywołanie odmowy usługi, zdalne wykonanie kodu oraz ujawnienie danych, gdy aplikacja przetwarza spreparowany ruch HTTP.
PHP jest używane przez niemal 70% stron internetowych. Podatności php2shell wpływają na samo środowisko uruchomieniowe PHP i mogą umożliwić atakującym wykonanie złośliwego kodu na podatnych serwerach, ujawnienie danych klientów lub zakłócenie usług. Ponieważ PHP stanowi podstawę popularnych platform, takich jak WordPress i Magento, luki te mogą potencjalnie dotknąć dużą liczbę aplikacji w internecie. Obie luki dotyczą sposobu, w jaki PHP zarządza pamięcią, gdy wystąpi błąd podczas przetwarzania żądania HTTP.
Normalnie PHP alokuje pamięć potrzebną do przetworzenia żądania, a następnie zwalnia ją po zakończeniu pracy. Jeśli przetwarzanie zostanie niespodziewanie przerwane, na przykład z powodu wyczerpania pamięci, PHP nie czyści pamięci w bezpieczny sposób. Podatności te pojawiają się, gdy PHP obsługuje błąd, a następnie próbuje użyć danych, które nie zostały w pełni przygotowane, lub pamięci, która została już zwolniona.
Różnice techniczne między CVE-2026-109618 i CVE-2026-109619
Atakujący może wysłać spreparowane żądania HTTP, aby wywołać te stany. Duże żądania są jednym ze sposobów na wywołanie presji na pamięć, jednak problem wykracza poza zużycie zasobów serwera. Manipulując danymi napotkanymi przez PHP w nieprawidłowej pamięci, atakujący może doprowadzić do awarii procesu PHP, ujawnienia poufnych informacji lub wykonania dostarczonego przez siebie kodu. Luki różnią się momentem, w którym następuje niebezpieczny dostęp do pamięci.
CVE-2026-109618
W przypadku tej podatności PHP wyczerpuje pamięć i przerywa pracę, zanim niektóre wewnętrzne dane zostaną poprawnie zainicjalizowane. Podczas czyszczenia tego żądania PHP może użyć tych niedokończonych danych tak, jakby były poprawne.
CVE-2026-109619
Błąd krytyczny przerywa żądanie, pozostawiając w PHP odwołania do pamięci zwalnianej po zakończeniu żądania. Gdy ten sam proces PHP obsługuje późniejsze żądanie, może podążyć za tymi nieaktualnymi odwołaniami i uzyskać dostęp do pamięci, która nie jest już poprawna, ujawniając poufne dane.
Nowy mechanizm detekcji transakcji w zaporze Cloudflare WAF
Cloudflare brał udział w skoordynowanym wdrażaniu zabezpieczeń, współpracując między innymi z PHP Foundation, OpenAI oraz Wiz. Cloudflare opracował i wdrożył reguły zapory aplikacji webowych (WAF) od początku października 2026 roku, wdrażając je około 9 godzin przed publicznym ujawnieniem. Od 21 października od godziny 3:02 UTC klienci Cloudflare korzystający z darmowego lub płatnego WAF byli domyślnie chronieni przed php2shell. Cloudflare wdrożył zabezpieczenia dla wszystkich klientów, podczas gdy informacja o luce wyciekła przed oficjalną datą publikacji, obserwując ruch atakujący wymierzony w klientów oraz próby mutowania ładunku ataku w celu obejścia zabezpieczeń.
Ochrona przed php2shell wymagała więcej niż standardowych reguł opartych na żądaniach. Same dane żądania nie zawsze dostarczają wystarczających dowodów, aby odróżnić exploit od prawidłowego ruchu. Odpowiedź serwera źródłowego dodaje kontekst, pomagając ustalić, czy exploit się powiódł, jednocześnie zmniejszając ryzyko fałszywych alarmów.
Aby zapewnić tę ochronę, Cloudflare opracował funkcję pełnej detekcji transakcji (full transaction detection), która łączy sygnały z żądania i odpowiedzi w ramach tej samej transakcji HTTP. Reguły odpowiedzi mogą zablokować pasującą odpowiedź serwera źródłowego, zanim dotrze ona do żądającego. Zabezpieczenia php2shell są pierwszymi zarządzanymi detekcjami opublikowanymi z wykorzystaniem tej funkcji.
Dla darmowych klientów nowe reguły opublikowano w ramach Cloudflare Managed Free Ruleset o identyfikatorze 77454fe2d30c4220b5701f6fdfb893ba, zawierającego reguły Generic Rules - Anomalous Execution o identyfikatorach od 4e315666e8e344cdb64119a3b5ccf32f do 07f0b6ddaabf40b1b2042dade8d613fa. Ochronę dla planów płatnych udostępniono w ramach Cloudflare Managed Ruleset pod identyfikatorem efb7b8c949ac4650a09736fc376e9aee, z regułami o identyfikatorach od c1d409ad838f47f59446f21cc438d5dd do 1389aa259617437392ce149c48143645. Dodatkowo dla klientów wszystkich planów, w tym darmowych, wdrożono regułę Default block for High confidence Signatures pod identyfikatorem afffe22785674c80a31875c848d2242a w Cloudflare Managed Response Firewall Default.
Aktualizacja środowiska PHP pozostaje konieczna mimo reguł ochronnych
Aby przeanalizować zablokowane żądania, należy przejść do Security > Security Analytics > Events, odfiltrować według identyfikatorów reguł i sprawdzić dopasowane żądanie, akcję oraz ścieżkę. Zdarzenia wskazują, czy akcja pochodziła z reguły zarządzanej, czy niestandardowej. Klienci mogą dostosować zakres Managed Ruleset do odpowiednich części aplikacji.
Cloudflare zaznacza, że reguły zapory stanowią dodatkową warstwę obrony (defense-in-depth). Ze względu na to, że wady tkwią w środowisku uruchomieniowym PHP, aktualizacja samego kodu witryny lub wtyczek nie naprawia tych podatności. Ograniczenie niepotrzebnych przesyłań plików i limitowanie ich rozmiaru może zmniejszyć ekspozycję, lecz środki te nie zastępują poprawki w PHP.
Administratorzy muszą zaktualizować oprogramowanie PHP obsługujące ich aplikacje. Jeśli PHP zarządza dostawca hostingu, należy poprosić go o zastosowanie aktualizacji bezpieczeństwa. Administratorzy mogą postępować zgodnie z biuletynem PHP w zakresie wersji podatnych i instrukcji naprawy, utrzymując włączoną ochronę Cloudflare WAF podczas wdrażania poprawek.