# php-cgi: stará záťaž s rizikom

> Zraniteľnosť php-cgi v PHP2Shell: nájdite nastavenia CGI a FastCGI, zaplátajte, ukončite všetky staré procesy a naplánujte prechod na PHP-FPM.

Zdroj: https://phpsos.de/sk/server/php-cgi/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**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.

```bash
# 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čí.

```bash
# Ú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](https://phpsos.de/sk/server/windows-iis-php/).

> **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.

```ini
; 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](https://phpsos.de/sk/server/nginx-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](https://phpsos.de/sk/leistungen/php-migration-legacy/).
- V rámci [spevnenia servera (hardening)](https://phpsos.de/sk/leistungen/server-haertung/) 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

- [php.net: bezpečnostné hlásenia](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: podporované verzie](https://www.php.net/supported-versions.php)
- [BSI](https://www.bsi.bund.de/)
