Aktualna sytuacja: PHP2Shell. Dwie krytyczne luki w PHP (CVSS 9,2) umożliwiają wykonanie złośliwego kodu bez logowania. Poprawki od 21.10.2026.Co należy teraz zrobić →

php-cgi: stare obciążenie z ryzykiem

php-cgi często tkwi niezauważone w starych konfiguracjach, panelach i w Windows. Oto jak je znaleźć, załatać po PHP2Shell i zaplanować przejście na PHP-FPM.

Stan 5 min czytaniaSerwery i hosting

Krótko: php-cgi to najstarszy sposób uruchamiania PHP za serwerem WWW i nadal działa na wielu serwerach, często niezauważone. Luka bezpieczeństwa php-cgi z PHP2Shell dotyczy tego trybu pracy wprost. Proszę załatać, zakończyć wszystkie działające procesy php-cgi i zaplanować przejście na PHP-FPM.

Czym jest php-cgi i gdzie nadal działa

PHP występuje w kilku wariantach: jako program wiersza poleceń, jako moduł Apache, jako PHP-FPM i jako php-cgi. php-cgi to program, który uruchamia serwer WWW i któremu przekazuje żądania przez CGI lub FastCGI. Bez własnego zarządzania procesami jest prostszy niż PHP-FPM, ale też trudniejszy do kontrolowania.

Typowe miejsca to starsze panele hostingowe, Apache z mod_fcgid, własne skrypty opakowujące (wrappery) dla kilku wersji PHP oraz PHP w Windows z IIS przez FastCGI. W agencjach i urzędach spotyka się ponadto serwery skonfigurowane przed laty i od tamtej pory tylko eksploatowane.

Luka bezpieczeństwa php-cgi w PHP2Shell

PHP2Shell obejmuje luki CVE-2026-109618 i CVE-2026-109619 w samym PHP, każdą z oceną CVSS v4.0 9.2. Obie umożliwiają wykonanie szkodliwego kodu bez logowania. Projekt PHP wprost wymienia php-cgi wśród dotkniętych trybów pracy, obok PHP-FPM, mod_php, FrankenPHP i LiteSpeed.

Usunięte są PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35. Dla PHP 8.1 i starszych nie ma już oficjalnych aktualizacji, tylko minimalne backporty źródeł dla 7.4, 8.0 i 8.1. Właśnie konfiguracje php-cgi działają ponadprzeciętnie często na starych wersjach. php-cgi nie jest przy tym dotknięte po raz pierwszy: już w 2024 roku luka w php-cgi w Windows (CVE-2024-4577) wzbudziła duże zainteresowanie. Takie stare obciążenia zasługują więc na szczególną uwagę.

Znalezienie php-cgi na serwerze

Poniższe polecenia tylko odczytują i pomagają wytropić php-cgi. Ścieżki i nazwy modułów to przykłady.

# Działające procesy php-cgi z czasem startu i użytkownikiem
ps -eo pid,lstart,user,cmd | grep -E 'php-cgi|php[0-9.]*-cgi' | grep -v grep

# Zainstalowane programy php-cgi
ls /usr/bin/php*-cgi /usr/lib/cgi-bin/php* 2>/dev/null

# Apache: czy załadowany jest mod_fcgid lub mod_cgi?
apache2ctl -M 2>/dev/null | grep -Ei 'fcgid|cgi'
grep -RniE 'FcgidWrapper|AddHandler.*php|Action.*php' /etc/apache2 /etc/httpd 2>/dev/null

Jeśli znajdą Państwo wpisy FcgidWrapper lub handlery wskazujące na program php-cgi, ten tryb pracy jest używany. Dla każdego znalezionego programu proszę sprawdzić wersję przez -v. W pakietach dystrybucji poprawkę potwierdza dziennik zmian z numerami CVE, ponieważ backporty często nie zmieniają numeru wersji.

Łatanie i kończenie wszystkich procesów

Proszę zainstalować aktualizację przez menedżer pakietów lub źródło, z którego pochodzi php-cgi. Potem wszystkie działające procesy php-cgi muszą zniknąć. W mod_fcgid Apache przez jakiś czas utrzymuje procesy w gotowości; pełny restart Apache je kończy.

# Pełny restart Apache (Debian/Ubuntu lub rodzina RHEL)
systemctl restart apache2   # lub: systemctl restart httpd

# Kontrola: czy są jeszcze procesy php-cgi starsze niż aktualizacja?
ps -eo pid,lstart,cmd | grep -E 'php-cgi' | grep -v grep

Jeśli php-cgi działa przez własnego menedżera procesów lub usługę panelu, proszę zrestartować ją. W Windows z IIS proszę zrecyklować pule aplikacji, zob. PHP w Windows i IIS.

Działać natychmiast

Jeśli php-cgi działa z PHP 8.1 lub starszym na serwerze osiągalnym publicznie, oficjalnej poprawki brak. Proszę natychmiast ustawić środki przejściowe i rozważyć, zgodnie z zaleceniem BSI (niemiecki Federalny Urząd ds. Bezpieczeństwa w Technice Informatycznej), czasowe odłączenie serwera od sieci.

Środki przejściowe przy php-cgi

php.net zaleca środki przejściowe, które nie dają pełnej ochrony. W php-cgi wartości należą do pliku php.ini, który ładuje dany program, lub do konfiguracji serwera. Pliki .user.ini i ini_set() według php.net nie wystarczają dla session.upload_progress.enabled.

; php.ini instalacji php-cgi
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

Przy funkcji uploadu php.net podaje post_max_size = 32M. W PHP 8.5 dochodzi fatal_error_backtraces=0. Limity pamięci proszę ustawiać przez cgroups dla usługi serwera WWW, a nie przez RLIMIT_AS czy RLIMIT_DATA. Potem zrestartować wszystkie procesy.

Droga do PHP-FPM

Na dłuższą metę php-cgi nie jest dobrym wyborem. PHP-FPM oferuje pule dla każdej strony, osobnych użytkowników, limity dla każdej puli, strony statusu i kontrolowane restarty. Przejście jest zwykle dobrze planowalne: zainstalować PHP-FPM, utworzyć pule, przełączyć serwer WWW na FastCGI do PHP-FPM, usunąć skrypty opakowujące. Jak wygląda poprawna konfiguracja, pokazuje artykuł Zabezpieczenie Nginx z PHP-FPM. Jeśli dodatkowo działa stara wersja PHP, proszę połączyć zmianę z aktualizacją wersji.

Do czasu przejścia proszę krytycznie sprawdzić istniejącą konfigurację. Serwer WWW powinien przekazywać do php-cgi tylko pliki z rozszerzeniem .php, a nie ścieżki wskazujące na nieistniejące pliki. W katalogach uploadu wykonywanie PHP nie może być możliwe. W skryptach opakowujących, które dla każdej strony ładują własny php.ini, proszę sprawdzić, czy te pliki nie znoszą wartości przejściowych. Jeśli program php-cgi leży bezpośrednio w publicznie dostępnym katalogu takim jak cgi-bin, należy go stamtąd usunąć. Takie stare obciążenia pochodzą często z instrukcji instalacji z minionych lat i przy późniejszych przebudowach po prostu się je zapomina. Proszę udokumentować każde znalezisko ze ścieżką i przeznaczeniem, aby późniejsza przebudowa niczego nie pominęła.

Pozostaje ważne: poprawka nie usuwa szkodliwego oprogramowania wprowadzonego wcześniej. Proszę zachować logi od 20.10.2026.

Jak konkretnie pomaga PHP SOS?

  • Wytropimy instalacje php-cgi, wrappery i handlery i przypiszemy je do stron.
  • Łatamy, kończymy wszystkie stare procesy i dokumentujemy stan.
  • Dla PHP 8.1 i starszych planujemy z Państwem migrację na obsługiwaną wersję PHP.
  • W ramach utwardzania serwerów zastępujemy php-cgi przez PHP-FPM z oddzielnymi pulami.

Częste pytania

Czy używam php-cgi, nie wiedząc o tym?

To częstsze, niż się sądzi. Starsze panele, konfiguracje FastCGI z mod_fcgid i PHP w Windows z IIS często uruchamiają PHP jako php-cgi. Lista procesów lub Server API w phpinfo pokazuje to wiarygodnie.

Czy FastCGI to to samo co php-cgi?

Nie do końca. FastCGI to protokół. Zarówno PHP-FPM, jak i php-cgi potrafią komunikować się przez FastCGI, ale php-cgi to starszy, prostszy program bez pul i zarządzania procesami. PHP2Shell dotyczy php-cgi wprost.

Co oznacza klasyczne CGI w PHP?

W klasycznym CGI serwer WWW uruchamia dla każdego żądania nowy proces PHP. Jest to wolne i dziś rzadkie. Częściej spotyka się php-cgi za mod_fcgid lub FastCGI, gdzie procesy obsługują wiele żądań.

Czy po aktualizacji muszę coś zrestartować?

Tak. W konfiguracjach FastCGI procesy php-cgi działają jeszcze przez pewien czas. Proszę zrestartować serwer WWW lub menedżera procesów i sprawdzić, że żaden proces php-cgi nie jest starszy niż aktualizacja.

Źródła

Kontakt natychmiast

Liczy się każda godzina. Proszę napisać do nas teraz.

Proszę krótko opisać system, wersję PHP i obserwacje. Skontaktujemy się z Państwem, ustalimy sytuację i będziemy pracować zdalnie, aż incydent zostanie zamknięty i udokumentowany.

Natychmiastowa pomoc