Co se stalo
PHP je programovací jazyk, na kterém běží většina webů včetně WordPressu, Drupalu, e-shopů a mnoha firemních aplikací. V jeho jádru byly nalezeny dvě kritické zranitelnosti s označením CVE-2026-109618 a CVE-2026-109619, kterým se říká PHP2Shell. Obě mohou útočníkovi z internetu umožnit spustit na serveru vlastní kód bez jakéhokoli přihlášení.
Tým PHP vydal opravy 21. října 2026 ve verzích 8.2.35, 8.3.36, 8.4.27 a 8.5.12. Technické podrobnosti unikly na veřejnost ještě před vydáním oprav a brzy poté začaly kolovat ukázky útoku. Výzkumník potvrdil úspěšné útoky na návnadové servery 24. října 2026 a americká agentura CISA zařadila 26. října 2026 obě chyby do katalogu aktivně zneužívaných zranitelností.
Na zranitelnosti upozorňuje NÚKIB, podle kterého jsou veřejně dostupné i informace umožňující jejich zneužití, a také evropský CERT-EU. Palo Alto Networks hlásí aktivní útoky na správcovské rozhraní firewallů PAN-OS, které PHP interně používá.
Proč je to nebezpečné
Obě chyby patří do skupiny „použití po uvolnění“ (use-after-free). Představte si hotel, kde host odjede, pokoj uklidí a přidělí dalšímu hostovi, ale v knize na recepci zůstane starý záznam. Kdo ho později použije, vstoupí do cizího pokoje. V PHP takto zůstane odkaz na paměť, kterou už mezitím může ovládat útočník.
U CVE-2026-109618 PHP násilně ukončí požadavek, který vyčerpá paměťový limit. Pokud k tomu dojde v nevhodnou chvíli, například při zpracování formuláře s nahrávaným souborem, zůstane po něm neúplně připravená paměť, se kterou PHP při úklidu pracuje jako s platnou. U CVE-2026-109619 zůstanou po přerušeném požadavku vnitřní záznamy PHP ukazující do uvolněné paměti a další požadavek obsloužený stejným procesem je použije.
Útočník nepotřebuje přihlášení, stačí mu posílat upravené požadavky přes internet. U Apache s mod_php to podle týmu PHP funguje ještě před spuštěním jakéhokoli kódu aplikace, takže nezáleží na tom, jaký web na serveru běží. Útočník získá kontrolu nad serverem s právy účtu webového serveru: může číst databáze a konfigurační soubory s hesly, měnit obsah webu nebo pokračovat dál do vaší sítě.
Skóre CVSS hodnotí závažnost na stupnici od 0 do 10. Databáze NVD uvádí 9,8 pro CVE-2026-109618 a 8,1 pro CVE-2026-109619, výrobce hodnotí obě chyby podle CVSS 4.0 na 9,2. Katalog CISA KEV obsahuje jen chyby, které útočníci prokazatelně zneužívají. EPSS odhaduje pravděpodobnost zneužití v nejbližších dnech a u obou chyb je na samém maximu stupnice.
Koho se to týká
- PHP 8.2 před verzí 8.2.35, PHP 8.3 před 8.3.36, PHP 8.4 před 8.4.27 a PHP 8.5 před 8.5.12
- nepodporované větve PHP 8.1 a starší, pro které projekt PHP opravy nevydává
- zařízení a produkty, které PHP obsahují ve svém správcovském rozhraní
Ohrožena je každá instalace PHP, která obsluhuje webové požadavky: Apache s mod_php (podle týmu PHP nejrizikovější), PHP-FPM za nginx nebo Apache, php-cgi, FrankenPHP i LiteSpeed. Typicky jde o webhostingy, firemní weby a e-shopy, intranetové aplikace a služby v kontejnerech Docker.
PHP se skrývá i v zařízeních. U PAN-OS (firewally PA-Series, VM-Series a Panorama) je zasaženo jen správcovské webové rozhraní, GlobalProtect ne. Cisco uvádí jako zasažené Expressway, Duo Access Gateway a Ultra-Reliable Wireless Backhaul. Vlastní upozornění vydali i další výrobci, například Citrix, QNAP, Synology nebo Veeam. Pozor: aktualizace WordPressu, pluginu či frameworku nestačí, opravit je potřeba samotné PHP.
Jak zjistit, zda jste zasaženi
Na webhostingu najdete verzi PHP v administraci hostingu v nastavení webu, případně se zeptejte poskytovatele, zda už nasadil opravené PHP. Na vlastním serveru použijte následující příkazy, které nic nemění, pouze čtou.
php -v
dpkg -l | grep -i php
rpm -qa | grep -i php
apachectl -M | grep -i php
docker exec <kontejner> php -v
Verze v příkazové řádce se může lišit od verze, kterou používá web. Linuxové distribuce navíc často opravu doplní bez změny čísla verze, proto u balíčků z distribuce porovnejte verzi balíčku s bezpečnostním oznámením své distribuce. U zařízení (PAN-OS, Cisco a další) zjistěte verzi firmwaru v jejich administraci a porovnejte ji s upozorněním výrobce.
Jak to opravit
Aktualizace je jedinou spolehlivou opravou. Postupujte v tomto pořadí:
- Nejprve řešte servery a správcovská rozhraní dostupná z internetu, teprve potom interní systémy.
- Aktualizujte PHP na 8.2.35, 8.3.36, 8.4.27 nebo 8.5.12, případně novější verzi ve stejné větvi. Distribuce dostaly opravy předem, použijte jejich balíčky. Dobrovolnický repozitář remirepo neměl opravy v den vydání.
- Restartujte všechny procesy PHP (PHP-FPM, Apache s mod_php). Kontejnery sestavte znovu z opraveného základního image, samotný restart nestačí.
- Ověřte verzi postupem z předchozí sekce.
- U webhostingu si opravu potvrďte u poskytovatele.
- U zařízení nasaďte opravy výrobce a správcovské rozhraní zpřístupněte jen z důvěryhodných interních adres.
- Staré větve PHP převeďte na podporovanou verzi nebo použijte backport od distribuce. Tým PHP zveřejnil i zdrojové záplaty pro PHP 7.4, 8.0 a 8.1.
Pokud nemůžete aktualizovat hned, dočasná opatření sníží riziko, ale nejsou úplnou ochranou. V php.ini nebo v konfiguraci FPM poolu nastavte následující hodnoty a restartujte všechny workery (nastavení přes ini_set() ani .user.ini nefunguje):
session.upload_progress.enabled = 0
fatal_error_backtraces = 0
Druhý řádek platí jen pro PHP 8.5. Dále snižte post_max_size (8M bez nahrávání souborů, 32M s nahráváním) a pokud web formuláře se soubory nepotřebuje, blokujte požadavky multipart/form-data už na proxy. Pokud systém nejde rychle opravit, odpojte ho od internetu.
Dne 23. října 2026 tým PHP oznámil další chybu CVE-2026-115560, která se týká jen neobvykle nastavených aplikací. Mimořádné vydání nebude, do příštího běžného vydání před ní chrání session.upload_progress.enabled=0.
Co když už jste mohli být napadeni
Pokud server běžel se zranitelnou verzí a byl dostupný z internetu, počítejte s možností útoku. Kód útočníka běží pod účtem webového serveru. NÚKIB uvádí jako možný indikátor neobvyklé procesy spouštěné službami PHP. Podívejte se zejména na tyto věci:
- neobvyklé procesy spuštěné službami PHP nebo webového serveru, například shell či neznámé programy
- opakované pády PHP nebo webového serveru v chybových lozích
- velké množství velkých požadavků s formuláři a soubory v přístupových lozích
- nové nebo změněné soubory PHP ve webovém adresáři a neznámé účty v administraci webu
ps -ef --forest | grep -E -A5 'php-fpm|apache2|httpd'
grep -iE 'segfault|SIGSEGV' /var/log/apache2/error.log
find /var/www -type f -name '*.php' -mtime -14 -ls
Samotná aktualizace útočníka ze serveru nevyžene. Pokud najdete stopy útoku, odpojte server od sítě, uložte logy mimo něj a přizvěte odborníka na řešení incidentů. Změňte hesla k databázím a klíče, které byly na serveru uložené.
Zdroje
- RCE via OOM corruption · Advisory · php/php-src · GitHub ↗
- RCE via stale global state · Advisory · php/php-src · GitHub ↗
- NÚKIB: NÚKIB upozorňuje na kritické zranitelnosti v PHP - jediným řešením je aktualizace ↗
- CERT-EU: 2026-018: Critical Vulnerabilities in PHP ↗
- SK-CERT: Kritické zraniteľnosti v PHP ↗
- Palo Alto Networks: CVE-2026-109618 Impact of Critical Vulnerabilities in PHP (CVE-2026-109618, CVE-2026-10961 ↗
- Cisco: Vulnerabilities in PHP Affecting Cisco Products: October 2026 ↗
- The Hacker News: CISA Confirms Active Exploitation of Two PHP2Shell Flaws Enabling Remote Code Execution ↗
- NVD CVE-2026-109618 ↗
- ENISA EUVD EUVD-2026-107260 ↗
- NVD CVE-2026-109619 ↗
- ENISA EUVD EUVD-2026-107265 ↗
- CISA Known Exploited Vulnerabilities ↗