Stručně: Ke kontrole verze PHP nestačí php -v. Musíte vědět, kterou verzi PHP webový server skutečně používá, zda balíček obsahuje opravu, i jako backport se starým číslem, a zda byly po aktualizaci restartovány všechny procesy. PHP2Shell je opraveno v 8.5.12, 8.4.27, 8.3.36 a 8.2.35.
Proč samotné číslo verze nestačí
Pro PHP2Shell existuje jasný seznam opravených verzí. V praxi ale k chybnému odhadu vedou tři situace:
- Více instalací: Příkazová řádka ukazuje PHP 8.3, web ale běží přes pool s PHP 8.1.
- Backporty: Distribuce a poskytovatelé hostingu někdy nasazují opravy do stávajících balíčků. Plesk pak například dál zobrazuje 8.2.34, přestože je záplatováno.
- Staré procesy: Nové soubory leží na disku, běžící workeři ale pocházejí ještě z doby před aktualizací.
Pro vedení firem a netechniky pomáhá jednoduché pravidlo: nezeptejte se jen „Jakou verzi PHP máme?“, ale „Je PHP2Shell uzavřeno na všech serverech a podle čeho to poznáme?“. Spolehlivá odpověď obsahuje tři doklady: verzi nebo backport, stav balíčku a čas restartu.
Technická kontrola má proto tři kroky: verze, stav balíčku, běžící procesy. Příkazy níže jsou čistě čtecí. Názvy balíčků a služeb se liší podle distribuce, zdroje PHP a hostingového rozhraní; příklady vycházejí z PHP 8.3.
Kontrola verze PHP na příkazové řádce
php -v # verze příkazové řádky
ls /etc/php/ 2>/dev/null # Debian/Ubuntu: nainstalované větve
php-fpm8.3 -v # verze binárky FPM (název se liší podle distribuce)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"
U RHEL, AlmaLinux nebo Rocky se binárka FPM obvykle jmenuje php-fpm; u Software Collections nebo cizích zdrojů leží další verze ve vlastních cestách. Plesk a cPanel přinášejí vlastní instalace PHP, které existují vedle systémového PHP. Jak tam postupovat, popisujeme na stránkách Plesk a cPanel.
Kterou verzi PHP web používá ve webovém kontextu, nejspolehlivěji uvidíte v konfiguraci poolu nebo VirtualHostu nebo v hostingovém rozhraní. Ukáže to i stránka phpinfo; zřizujte ji jen krátce, s ochranou přístupu a náhodným názvem a ihned ji poté smažte.
U sdíleného hostingu většinou nemáte přístup k příkazové řádce. Hostingové rozhraní pak ukazuje nastavenou verzi PHP pro každý web. Zda byl backport nasazen a restartován, tam ale zřídka stojí. Zde je spolehlivou cestou písemné potvrzení poskytovatele hostingu.
Kontrola stavu balíčku a backportů
Stav balíčku ukazuje, co vaše distribuce skutečně dodala:
# Debian/Ubuntu
apt policy php8.3-fpm
apt changelog php8.3-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
# RHEL, AlmaLinux, Rocky, Fedora
dnf info php-fpm
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
Pokud je v changelogu uvedeno některé z čísel CVE, je backport v nainstalovaném balíčku obsažen. Pokud záznam chybí, není to ještě důkaz zranitelnosti: někteří správci balíčků formulují changelogy jinak. Pak porovnejte verzi balíčku s bezpečnostními oznámeními své distribuce nebo se zeptejte poskytovatele. Vzor pro takový dotaz najdete na stránce Jak se zeptat poskytovatele hostingu na stav záplat.
Důležité: zkontrolujte každý nainstalovaný balíček PHP, ne jen první. Na serverech s více větvemi je často jedna záplatovaná a jiná ne.
Běží nová verze skutečně?
Aktualizace je účinná až po restartu všech procesů PHP. Porovnejte dobu spuštění běžících procesů s časem aktualizace:
ps -o pid,lstart,cmd -C php-fpm8.3 # čas spuštění procesů FPM
systemctl status php8.3-fpm # od kdy služba běží
needrestart -r l # Debian/Ubuntu, pokud je nainstalován: zobrazí zastaralé procesy
Pokud je doba spuštění před aktualizací, běží ještě staré procesy. U Apache s mod_php platí totéž pro procesy Apache. Jak čistě restartovat, popisuje stránka Restart PHP-FPM a všech workerů.
Výsledek si poznamenejte písemně: server, verze PHP, verze balíčku, CVE v changelogu ano či ne, čas restartu. Tuto poznámku budete potřebovat pro vedení, pojišťovnu a pozdější kontrolu stop.
Zařazení výsledku
| Nález | Hodnocení |
|---|---|
| Oficiální verze 8.5.12, 8.4.27, 8.3.36 nebo 8.2.35, procesy restartovány | PHP2Shell uzavřeno |
| Starší číslo, čísla CVE v changelogu balíčku, procesy restartovány | Backport nasazen, uzavřeno |
| Starší číslo, žádný záznam v changelogu, žádné potvrzení | nejasné, ujasnit u poskytovatele |
| PHP 8.1 nebo starší bez potvrzeného backportu | otevřeno, nutná přechodná opatření a migrace |
| Procesy starší než aktualizace | chybí restart, zranitelnost je stále aktivní |
Pokud zůstane server ve stavu „nejasné“, zacházejte s ním jako s otevřeným: nastavte přechodná opatření a sledujte ujasnění, dokud nebude k dispozici doklad. Úplný přehled verzí najdete na stránce Které verze PHP jsou postižené?.
Jak konkrétně pomáhá PHP SOS?
Prostřednictvím služby záplatování PHP přebíráme kontrolu a doklad:
- Najít všechny instalace, i druhé verze z hostingových panelů, Software Collections nebo kontejnerů.
- Vyhodnotit stav balíčku: oficiální vydání, backport nebo otevřeno, s dokladem z changelogu nebo od poskytovatele.
- Zkontrolovat restart, dokud neběží žádný proces se starým kódem.
- Vytvořit protokol kontroly, který můžete použít interně i vůči třetím stranám.
Časté dotazy
Proč php -v ukazuje jinou verzi než můj web?
Na mnoha serverech je nainstalováno více verzí PHP. Příkazová řádka používá jednu z nich, webový server nebo pool FPM jinou. Zkontrolujte proto verzi, která skutečně běží ve webovém kontextu, například přes binárku FPM nebo hostingové rozhraní.
Jak poznám backport?
U balíčků distribucí je oprava často uvedena v changelogu balíčku, zpravidla s číslem CVE. V Debianu a Ubuntu pomůže apt changelog, v systémech typu RHEL rpm -q --changelog. Pokud záznam chybí, ujasněte stav u poskytovatele.
Mohu verzi PHP zkontrolovat v zákaznickém menu hostingu?
Ano, většina rozhraní zobrazuje nastavenou verzi pro každý web. Zda byl backport nasazen a restartován, tam většinou neuvidíte. K tomu je spolehlivou cestou písemné potvrzení poskytovatele hostingu.