PHP2Shell – krytyczne podatności w PHP (CVE-2026-109618 i CVE-2026-109619). Co musisz wiedzieć i jak się zabezpieczyć
PHP2Shell – krytyczne podatności w PHP (CVE-2026-109618 i CVE-2026-109619). Co musisz wiedzieć i jak się zabezpieczyć
21 października 2026 zespół PHP wydał awaryjną aktualizację bezpieczeństwa, łatającą dwie krytyczne podatności w samym rdzeniu języka PHP. Błędy, określane w społeczności jako PHP2Shell, umożliwiają zdalne wykonanie kodu (RCE) bez uwierzytelnienia. Oba otrzymały ocenę CVSS v4.0 9.2.
Dotyczą one praktycznie wszystkich instalacji PHP obsługujących żądania HTTP – w tym PHP-FPM, Apache mod_php, php-cgi, FrankenPHP i LiteSpeed. Najwyższe ryzyko dotyczy konfiguracji mod_php, gdzie atak może zostać przeprowadzony jeszcze przed uruchomieniem jakiegokolwiek kodu aplikacji.
Jak działają podatności?
CVE-2026-109618 – korupcja pamięci przy braku pamięci (OOM)
Gdy PHP wyczerpie dostępną pamięć w trakcie przetwarzania żądania (np. przy przesyłaniu dużego pliku multipart), przerywa pracę i przechodzi do czyszczenia. W pewnych warunkach struktury danych są tylko częściowo zainicjalizowane. Procedura czyszczenia traktuje je jednak jako poprawne, co prowadzi do korupcji pamięci i możliwości wykonania dowolnego kodu.
CVE-2026-109619 – „stale global state” (use-after-free)
Stan wewnętrzny jednego żądania może przetrwać po zwolnieniu pamięci. Kolejne żądanie obsługiwane przez tego samego workera korzysta z tego nieaktualnego stanu, zanim PHP zdąży go zresetować. Jedną ze ścieżek ataku jest domyślnie włączona funkcja session.upload_progress.
Oba błędy istnieją w samym silniku PHP, więc nawet w pełni zaktualizowana aplikacja (WordPress, Joomla, Drupal, Laravel itd.) pozostaje podatna, jeśli działa na niezaktualizowanej wersji PHP.
Jakie niesie zagrożenia?
- Pełne przejęcie serwera (wykonanie kodu z uprawnieniami procesu PHP)
- Kradzież haseł, tokenów, kluczy API i certyfikatów z pamięci procesu
- Instalacja backdoorów, ransomware, kryptominerów
- Ataki na inne usługi działające na tym samym serwerze
- Masowe skanowanie i eksploatacja – już obserwowane w sieci (m.in. przez Amazon Threat Intelligence)
Ponieważ PHP napędza większość stron internetowych na świecie, skala potencjalnego zagrożenia jest ogromna.
Które wersje są podatne i jak je naprawić?
| Gałąź PHP | Podatne wersje | Naprawiona wersja |
|---|---|---|
| PHP 8.5 | przed 8.5.12 | 8.5.12 |
| PHP 8.4 | przed 8.4.27 | 8.4.27 |
| PHP 8.3 | przed 8.3.36 | 8.3.36 |
| PHP 8.2 | przed 8.2.35 | 8.2.35 |
| PHP 8.1 i starsze | wszystkie | brak oficjalnej łatki (tylko backports źródłowe) |
Jedynym kompletnym rozwiązaniem jest aktualizacja PHP.
Tymczasowe środki zaradcze (jeśli nie możesz od razu zaktualizować)
- Wyłącz session.upload_progress.enabled = 0 w php.ini
- Na PHP 8.5 ustaw również fatal_error_backtraces = 0
- Ustaw pm.max_requests = 1 (PHP-FPM) – ogranicza możliwość wykorzystania stanu między żądaniami
- Zrestartuj wszystkie workery PHP (Apache, PHP-FPM itd.)
Pamiętaj: te działania jedynie zmniejszają ryzyko, nie eliminują go całkowicie.
Co zrobić teraz?
- Sprawdź wersję PHP: php -v
- Zaktualizuj do najnowszej poprawionej wersji w swojej gałęzi
- Zrestartuj usługi PHP/Apache/Nginx
- Monitoruj logi pod kątem podejrzanych żądań (szczególnie multipart/form-data)
- Jeśli korzystasz z hostingu współdzielonego – skontaktuj się z dostawcą i dopytaj o aktualizację
Źródła: oficjalne advisories PHP (GHSA-w8hw-w9fx-j79w, GHSA-6wmf-4rv5-p3rp), CERT-EU, raporty firm bezpieczeństwa (Wiz, JFrog, Amazon).
Aktualizacja PHP powinna być priorytetem numer jeden dla każdego administratora serwerów webowych.