Stručně: Aktualizace WordPressu proti zranitelnosti PHP2Shell nepomůže, protože chyba není ve WordPressu, ale v PHP, softwaru na serveru, který WordPress spouští. Podle Dr. Web proto WordPress.org ani neplánuje vlastní aktualizaci. Ochránit může jen aktualizace PHP na serveru s restartem všech procesů PHP. Tu zpravidla nasazuje váš poskytovatel hostingu nebo provozovatel serveru.
Výchozí bod: „Vždyť jsme všechno aktualizovali“
Po prvních titulcích k PHP2Shell udělalo mnoho provozovatelů to nejbližší: otevřít dashboard WordPressu, kliknout na „Aktualizovat nyní“, pluginy a šablony rovnou také. Potom je vše zelené a pocit říká: hotovo.
U této zranitelnosti pocit klame. Nezpůsobuje to WordPress, ale místo, kde chyba sídlí. I Cloudflare ve svém oznámení upozorňuje, že aktualizace kódu aplikace nebo pluginů zranitelnosti neodstraní.
Aktualizace WordPressu a zranitelnost PHP: model vrstev
Web na WordPressu se skládá z několika vrstev, které na sebe navazují. Každá vrstva má vlastní aktualizace a často vlastní odpovědné osoby:
| Vrstva | Příklad | Kdo typicky aktualizuje | Postiženo PHP2Shell? |
|---|---|---|---|
| Operační systém | Debian, Ubuntu, AlmaLinux | poskytovatel hostingu nebo správce serveru | ne, ale často dodává balíček PHP |
| Webový server | Apache, Nginx, LiteSpeed | poskytovatel hostingu nebo správce serveru | provozní režim ovlivňuje riziko |
| Běhové prostředí PHP | PHP-FPM, mod_php | poskytovatel hostingu nebo správce serveru | ano, zde leží zranitelnost |
| Jádro WordPressu | WordPress | provozovatel nebo agentura | ne |
| Pluginy a šablony | WooCommerce, page builder | provozovatel nebo agentura | ne |
Tlačítko aktualizace v dashboardu dosáhne jen na spodní dva řádky. Běhové prostředí PHP leží pod nimi a WordPress ho nevidí. Jak na PHP stojí další systémy, popisuje článek CMS a obchody na PHP.
Proč WordPress zranitelnost uzavřít nemůže
Dalo by se myslet, že WordPress může „programovat kolem“. U PHP2Shell to nefunguje ze dvou důvodů.
Za prvé obě chyby leží ve způsobu, jakým PHP zpracovává požadavky a poté uklízí. To se děje bez ohledu na to, jaký program v PHP běží. Za druhé předvedl tým PHP u Apache s mod_php exploit, který zabere dříve, než se vůbec spustí kód aplikace. WordPress, jeho pluginy ani žádný bezpečnostní plugin pak vůbec nepřijdou na řadu.
Ze stejného důvodu nepomůže ani „zpevňující plugin“, který mění nastavení přes ini_set(). php.net výslovně nedoporučuje nastavovat přechodná opatření touto cestou.
A u spravovaného WordPressu?
U nabídek spravovaného WordPressu se poskytovatel často stará nejen o aktualizace WordPressu, ale i o server pod ním. To je pro PHP2Shell výhoda, ale ne automatismus. Ptejte se konkrétně, zda byla aktualizace PHP nasazena a všechny procesy PHP restartovány. Výrok „Udržujeme váš WordPress aktuální“ na tuto otázku neodpovídá.
Mnoho webů, jedna instalace PHP
Agentury a firmy s více weby by měly znát jednu zvláštnost: Na jednom serveru často sdílí mnoho instalací WordPressu stejnou verzi PHP. Pokud je nezáplatovaná, jsou postiženy všechny, bez ohledu na to, jak dobře je každý jednotlivý web udržován. Naopak aktualizace PHP chrání všechny instalace najednou, pokud jsou poté restartovány všechny příslušné procesy PHP. Kdo provozuje souběžně několik verzí PHP, musí aktualizovat každou zvlášť.
Zelený dashboard WordPressu o PHP2Shell nic nevypovídá. Rozhodující je stav záplat PHP na serveru a restart všech procesů PHP.
Jak správně číst verzi PHP ve WordPressu
WordPress zobrazuje verzi PHP: v dashboardu v části Nástroje, Stav webu, v oblasti Informace v sekci Server. To je dobrý první náznak, ale ne důkaz.
Pokud tam stojí větev jako 8.1 nebo starší, je to jasný varovný signál, protože pro ni už neexistují oficiální aktualizace. Pokud tam stojí 8.2.35, 8.3.36, 8.4.27 nebo 8.5.12, je nainstalován opravený stav. Pokud tam stojí starší číslo podporované větve, může být přesto nasazen backport. Distribuce a poskytovatelé přitom číslo často nemění. Jasno udělá jen potvrzení poskytovatele nebo pohled do changelogu balíčku. Jak na to, stojí na stránce Kontrola verze PHP a stavu záplat.
Co by provozovatelé WordPressu měli dělat místo toho
- Zeptat se poskytovatele hostingu nebo provozovatele serveru: Je PHP záplatováno, kdy a byly restartovány všechny procesy PHP? Odpověď písemně.
- Zkontrolovat větev PHP: Pokud web běží na 8.1 nebo starším, naplánovat přechod na podporovanou větev. Kterou verzi vaše verze WordPressu podporuje, stojí v systémových požadavcích na wordpress.org. Přepnutí v zákaznickém menu popisuje Změna verze PHP v zákaznické sekci hostingu.
- Hledat stopy: nové soubory PHP ve
wp-content/uploads, neznámé administrátorské účty, cizí položky vmu-plugins. Typické úkryty popisuje stránka WordPress a PHP2Shell. - WordPress přesto udržovat aktuální: Jádro, pluginy a šablony uzavírají jiné zranitelnosti. To zůstává povinností, jen jinou.
- Vyjasnit odpovědnost: Pokud web spravuje agentura, zaznamenat, zda odpovídá i za PHP, nebo jen za WordPress.
Právě poslední bod často způsobuje mezery. Agentura spravuje WordPress, poskytovatel server, a každý věří, že PHP2Shell má na starosti ten druhý.
Jak konkrétně pomáhá PHP SOS?
- Vyjasnit vrstvy: Zjistíme, kdo u vašeho webu na WordPressu odpovídá za kterou vrstvu.
- Aktualizovat PHP: Na vlastních nebo spravovaných serverech nasadíme aktualizaci PHP a restartujeme všechny procesy.
- Zkontrolovat WordPress: Hledáme stopy útoku v souborech, databázi a účtech.
- Doklad: Dostanete stav záplat písemně, i k předání agentuře nebo zákazníkům.
Postup popisuje služba záplatování PHP.
Závěr
Aktualizace WordPressu je dobrá údržba, ale proti PHP2Shell je to špatná vrstva. Zranitelnost sedí o patro níž, v PHP na serveru. Kdo to pochopí, položí správnou otázku na správném místě: Je PHP záplatováno, restartováno a doloženo?
Časté dotazy
Přinese WordPress bezpečnostní aktualizaci proti PHP2Shell?
Podle Dr. Web WordPress.org neplánuje proti PHP2Shell žádnou aktualizaci, protože zranitelnost leží v interpretu PHP na serveru. Pomůže jen aktualizace PHP od poskytovatele hostingu nebo provozovatele serveru.
Kde ve WordPressu uvidím verzi PHP?
V dashboardu v části Nástroje, Stav webu, v oblasti Informace v sekci Server. Zobrazené číslo ale nevypovídá jistě o tom, zda je záplata nasazena, protože poskytovatelé opravy často zabudovávají jako backport bez nového čísla verze.
Chrání před PHP2Shell bezpečnostní plugin?
Jen velmi omezeně. Plugin sám běží v PHP a aktivuje se teprve po načtení WordPressu. U Apache s mod_php byl podle týmu PHP předveden exploit dříve, než se vůbec spustí kód aplikace. Tam plugin zasáhnout nemůže.
Mám WordPress přesto aktualizovat?
Ano. Aktuální verze WordPressu, šablon a pluginů uzavírají jiné zranitelnosti a jsou součástí dobré údržby. Jen neřeší problém PHP2Shell.