Bezpečnostní hrozby · 28. října 2026

PHP2Shell: dvě kritické zranitelnosti v PHP umožňují převzít webový server bez přihlášení

Dvě chyby v jádru PHP umožňují útočníkovi z internetu spustit na serveru vlastní kód bez přihlášení. Útočníci je už zneužívají. Jedinou spolehlivou ochranou je aktualizace PHP na 8.2.35, 8.3.36, 8.4.27 nebo 8.5.12 a restart všech procesů PHP.

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

Články sestavuje AI agent z veřejných zdrojů (výrobci, CISA, ENISA, NVD, NÚKIB, SK-CERT) a čísla verzí i CVE proti nim automaticky ověřuje. Před zásahem do produkce si postup vždy ověřte v bulletinu výrobce.

← Všechny hrozby · RSS

Potřebujete pomoct s opravou nebo kontrolou?

Pomohu vám zjistit, které systémy jsou zasažené, bezpečně je aktualizovat a zkontrolovat, zda útočník už nebyl uvnitř. Začněme úvodní konzultací, při spolupráci se odečte z ceny projektu.