Aktuálna situácia: PHP2Shell. Dve kritické zraniteľnosti PHP (CVSS 9.2) umožňujú spustenie škodlivého kódu bez prihlásenia. Záplaty od 21. 10. 2026.Čo treba urobiť teraz →

php-cgi: stará záťaž s rizikom

php-cgi sa často nepozorovane skrýva v starých nastaveniach, paneloch a pod Windows. Takto ho nájdete, po PHP2Shell zaplátate a naplánujete prechod na PHP-FPM.

Stav 4 min čítaniaServer a hosting

Stručne: php-cgi je najstarší spôsob prevádzky PHP za webovým serverom a stále beží na mnohých serveroch, často nepozorovane. Zraniteľnosť php-cgi z PHP2Shell sa tohto režimu prevádzky výslovne týka. Zaplátajte, ukončite všetky bežiace procesy php-cgi a naplánujte prechod na PHP-FPM.

Čo je php-cgi a kde ešte beží

PHP existuje vo viacerých variantoch: ako program príkazového riadku, ako modul Apache, ako PHP-FPM a ako php-cgi. php-cgi je program, ktorý spúšťa webový server a odovzdáva mu požiadavky cez CGI alebo FastCGI. Bez vlastnej správy procesov je jednoduchší než PHP-FPM, ale aj menej kontrolovateľný.

Typickými miestami nálezu sú staršie hostingové panely, Apache s mod_fcgid, vlastné obalové skripty pre viac verzií PHP a PHP pod Windows s IIS cez FastCGI. V agentúrach a úradoch sa nájdu aj servery, ktoré sa pred rokmi zriadili a odvtedy sa už len prevádzkovali.

Zraniteľnosť php-cgi pri PHP2Shell

PHP2Shell zahŕňa zraniteľnosti CVE-2026-109618 a CVE-2026-109619 v samotnom PHP, každá s CVSS v4.0 9.2. Obe umožňujú spustenie škodlivého kódu bez prihlásenia. Projekt PHP uvádza php-cgi výslovne medzi dotknutými režimami prevádzky, popri PHP-FPM, mod_php, FrankenPHP a LiteSpeed.

Opravené sú PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Pre PHP 8.1 a staršie už oficiálne aktualizácie neexistujú, iba minimálne backporty zdrojového kódu pre 7.4, 8.0 a 8.1. Práve nastavenia php-cgi bežia nadpriemerne často na starých verziách. php-cgi nie je dotknuté prvýkrát: už v roku 2024 vyvolala rozruch zraniteľnosť v php-cgi pod Windows (CVE-2024-4577). Záťaže tohto druhu si preto zaslúžia zvláštnu pozornosť.

Nájdite php-cgi na serveri

Nasledujúce príkazy iba čítajú a pomáhajú php-cgi vypátrať. Cesty a názvy modulov sú príklady.

# Bežiace procesy php-cgi s časom spustenia a používateľom
ps -eo pid,lstart,user,cmd | grep -E 'php-cgi|php[0-9.]*-cgi' | grep -v grep

# Nainštalované programy php-cgi
ls /usr/bin/php*-cgi /usr/lib/cgi-bin/php* 2>/dev/null

# Apache: Je načítaný mod_fcgid alebo 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

Ak nájdete záznamy FcgidWrapper alebo handlery, ktoré ukazujú na program php-cgi, tento režim prevádzky beží. Pre každý nájdený program skontrolujte verziu pomocou -v. Pri balíkoch distribúcie záplatu dokladá changelog s číslami CVE, pretože backporty číslo verzie často nemenia.

Zaplátajte a ukončite všetky procesy

Aktualizáciu nasaďte cez správcu balíkov alebo zdroj, z ktorého php-cgi pochádza. Potom musia zmiznúť všetky bežiace procesy php-cgi. Pri mod_fcgid drží Apache procesy nejaký čas v rezerve; úplný reštart Apache ich ukončí.

# Úplný reštart Apache (Debian/Ubuntu, resp. rodina RHEL)
systemctl restart apache2   # alebo: systemctl restart httpd

# Kontrola: Existujú ešte procesy php-cgi staršie než aktualizácia?
ps -eo pid,lstart,cmd | grep -E 'php-cgi' | grep -v grep

Ak php-cgi beží cez vlastného správcu procesov alebo službu panelu, reštartujte ju. Pod Windows s IIS recyklujte aplikačné pooly, pozri PHP pod Windows a IIS.

Konajte hneď

Ak php-cgi beží s PHP 8.1 alebo starším na verejne dostupnom serveri, oficiálna záplata chýba. Okamžite nastavte prechodné opatrenia a podľa odporúčania BSI (nemecký Spolkový úrad pre informačnú bezpečnosť) zvážte dočasné odpojenie servera od siete.

Prechodné opatrenia pri php-cgi

php.net odporúča prechodné opatrenia, ktoré neposkytujú úplnú ochranu. Pri php-cgi patria hodnoty do php.ini, ktorú príslušný program načíta, alebo do konfigurácie servera. Súbory .user.ini a ini_set() pre session.upload_progress.enabled podľa php.net nestačia.

; php.ini inštalácie php-cgi
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

S funkciou nahrávania php.net uvádza post_max_size = 32M. Pri PHP 8.5 pribúda fatal_error_backtraces=0. Obmedzenia pamäte nastavte cez cgroups pre službu webového servera, nie cez RLIMIT_AS alebo RLIMIT_DATA. Potom reštartujte všetky procesy.

Cesta k PHP-FPM

Dlhodobo nie je php-cgi dobrou voľbou. PHP-FPM ponúka pooly pre každý web, vlastných používateľov, limity pre každý pool, stavové stránky a kontrolované reštarty. Prechod sa väčšinou dá dobre naplánovať: nainštalovať PHP-FPM, vytvoriť pooly, prepnúť webový server na FastCGI do PHP-FPM, odstrániť obalové skripty. Ako vyzerá čisté usporiadanie, ukazuje stránka Zabezpečenie Nginx s PHP-FPM. Ak beží navyše stará verzia PHP, spojte prechod s upgradom.

Kým k prechodu nedôjde, mali by ste existujúcu konfiguráciu kriticky skontrolovať. Webový server by mal odovzdávať php-cgi iba súbory s príponou .php a nie cesty, ktoré ukazujú na neexistujúce súbory. V adresároch na nahrávanie nesmie byť možné spúšťanie PHP. Obalové skripty, ktoré pre každý web načítavajú vlastnú php.ini, skontrolujte, či tieto súbory prechodné hodnoty znova nezrušia. Ak program php-cgi leží priamo vo verejne dostupnom adresári, ako je cgi-bin, patrí odtiaľ preč. Takéto záťaže často pochádzajú z inštalačných návodov minulých rokov a pri neskorších prestavbách sa jednoducho zabudnú. Každý nález zdokumentujte s cestou a účelom, aby neskoršia prestavba nič neprehliadla.

Dôležité zostáva: Záplata neodstráni škodlivý softvér, ktorý bol zavlečený predtým. Uchovajte logy od 20. 10. 2026.

Ako konkrétne pomáha PHP SOS?

  • Vypátrame inštalácie php-cgi, obalové skripty a handlery a priradíme ich k webom.
  • Zaplátame, ukončíme všetky staré procesy a zdokumentujeme stav.
  • Pre PHP 8.1 a staršie s vami naplánujeme migráciu na podporovanú verziu PHP.
  • V rámci spevnenia servera (hardening) nahradíme php-cgi PHP-FPM so samostatnými poolmi.

Časté otázky

Používam php-cgi, aj keď o tom neviem?

Je to častejšie, než si myslíte. Staršie panely, nastavenia FastCGI s mod_fcgid a PHP pod Windows s IIS spúšťajú PHP často ako php-cgi. Spoľahlivo to ukáže zoznam procesov alebo Server API vo phpinfo.

Je FastCGI to isté ako php-cgi?

Nie celkom. FastCGI je protokol. PHP-FPM aj php-cgi vedia komunikovať cez FastCGI, php-cgi je však starší, jednoduchší program bez poolov a správy procesov. PHP2Shell sa php-cgi týka výslovne.

Čo znamená klasické CGI pri PHP?

Pri klasickom CGI webový server pre každý požiadavok spustí nový proces PHP. Je to pomalé a dnes zriedkavé. Častejšie je php-cgi za mod_fcgid alebo FastCGI, kde procesy spracúvajú viac požiadaviek.

Musím po aktualizácii niečo reštartovať?

Áno. Pri nastaveniach FastCGI bežia procesy php-cgi ešte nejaký čas ďalej. Reštartujte webový server, resp. správcu procesov, a skontrolujte, že neostal žiadny proces php-cgi starší než aktualizácia.

Zdroje

Okamžitý kontakt

Každá hodina sa počíta. Napíšte nám hneď.

Stručne opíšte systém, verziu PHP a svoje pozorovanie. Ozveme sa, vyjasníme situáciu a budeme pracovať na diaľku, kým nebude incident uzavretý a zdokumentovaný.

Okamžitá pomoc