Projekt PHP dnes, 21. októbra 2026, vydal opravy dvoch kritických chýb priamo v behovom prostredí PHP: CVE-2026-109618 a CVE-2026-109619, spoločne nazvaných PHP2Shell. Obe umožňujú útočníkovi bez prihlásenia spustiť na vašom serveri vlastný kód cez HTTP skôr, než sa vykoná čo i len riadok vašej aplikácie. Najstarší zasiahnutý kód vyšiel v PHP 5.4.0 v roku 2012. OpenAI ich označuje za „jeden z najzávažnejších bezpečnostných problémov za posledné roky“. A keďže PHP podľa W3Techs poháňa 69,3 % webov so známym serverovým jazykom, týka sa to takmer 70 % webu.
Chyby našla bezpečnostná firma Calif s modelom GPT-5.6 Sol od OpenAI v rámci iniciatívy Patch the Planet, nezávisle od nej aj Wiz Research. A v tom je podstata celého príbehu: triedu chýb, okolo ktorej ľudia krúžili 22 rokov, sa podarilo dotiahnuť do overeného vzdialeného spustenia kódu za niekoľko týždňov. V článku vysvetľujeme, prečo na to bola potrebná AI, ako AI pomáha s opravou a čo musia PHP a Laravel tímy urobiť ešte dnes.
Stručne: aktualizujte PHP na 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35 a potom reštartujte všetky PHP workery.
Čo je PHP2Shell
Obe chyby sú hodnotené ako kritické so skóre CVSS v4.0 9,2 (watchTowr im dáva 10,0) a obe sú typu use-after-free (CWE-416):
- CVE-2026-109618, RCE cez poškodenie pri nedostatku pamäte. PHP rieši nedostatok pamäte (OOM) cez
longjmp(). Ak pamäť dôjde vo chvíli, keď sú interné dáta požiadavky inicializované len sčasti, upratovanie po požiadavke ich považuje za platné. Útok vedie cez spracovanie multipart/form-data, ktoré PHP robí ešte pred spustením vášho kódu. Plné RCE bolo overené cez HTTP proti mod_php s predvolenými limitmi vstupu a pamäte. - CVE-2026-109619, RCE cez zastaraný globálny stav. Interný stav patriaci požiadavke prežije aj uvoľnenie svojej pamäte, napríklad po fatálnej chybe alebo nedostatku pamäte. Ďalšia požiadavka na tom istom workeri ho prečíta skôr, než ho inicializácia vynuluje: ide o use-after-free naprieč požiadavkami. Potvrdené to bolo cez
fatal_error_backtracesv PHP 8.5 a cez session upload progress, ktorý je predvolene zapnutý, a to proti mod_php aj FPM.
Výsledkom je spustenie kódu s právami používateľa webového workera a k tomu únik pamäte, v ktorej môžu byť heslá, session tokeny a kľúče. Keďže sa všetko odohrá ešte pred štartom aplikácie, čistý aplikačný kód vás neochráni. Ako upozorňuje Cloudflare, samotná aktualizácia kódu webu alebo pluginu tieto zraniteľnosti neopraví. Zasiahnuté sú PHP-FPM, Apache mod_php (najvyššie riziko, exploit bol predvedený), php-cgi, FrankenPHP, LiteSpeed/LSAPI a PHP na Windows, rovnako ako každý Docker obraz so starým PHP. Sansec potvrdil RCE bez prihlásenia na Magente, WordPresse, Drupale, Joomle, MediaWiki, Roundcube, phpMyAdmin, Nextcloude, Laraveli 13.11, Symfony 8.1 a WHMCS.
Prečo na ňu bola potrebná AI
PHP patrí medzi najdôkladnejšie preverované C kódy na svete, a predsa v ňom táto chyba prežila približne 14 rokov. Dôvodom je miesto, kde sa skrýva: chybová vetva. Na zneužitie treba longjmp() pri nedostatku pamäte uprostred inicializácie v kombinácii so stavom, ktorý prežíva medzi požiadavkami na opakovane používanom workeri. Ľudské code review takéto kombinácie domýšľa len zriedka a bežný fuzzing sa k nim takmer nedostane.
Ľudia okolo tejto triedy chýb krúžili 22 rokov, zneužiteľnosť však nikdy nedokázali:
- 2004: Stefan Esser opísal prvú vzdialenú zraniteľnosť PHP spojenú s pamäťovým limitom.
- 2020: chyba PHP #78876 ukázala, že nedostatok pamäte pri multipart vstupe zanecháva na disku dočasné súbory.
- 2024: audit PHP od OSTIF a Quarkslabu našiel súvisiaci problém s nedostatkom pamäte, jeho zneužiteľnosť však ostala „nedokázaná“.
S frontier modelmi sa rovnaká cesta prešla za týždne. Calif začal 1. augusta 2026 s GPT-5.6 Sol a prvé hlásenie poslal tímu PHP 11. augusta. Wiz zopakoval RCE nezávisle pomocou LLM a nahlásil ho 24. augusta; jeden z jeho výskumníkov zostavil funkčný exploit približne za týždeň. Sansec pripisuje frontier AI modelom zásluhu na tom, že sa exploity stali prakticky použiteľnými. Wiz to zhrnul tak, že ide o jedny z najzávažnejších zraniteľností, aké sa v PHP kedy našli, „a pravdepodobne aj v histórii softvéru“.
Nejde o ojedinelý prípad. V júli Searchlight Cyber s tým istým modelom našiel wp2shell, reťazec RCE bez prihlásenia v jadre WordPressu, za niečo vyše 10 hodín a so zanedbateľnými nákladmi na výpočet. OpenAI uvádza, že chyby v PHP „patria medzi viaceré závažné zraniteľnosti“, ktoré našlo, a očakáva, že „podobných zistení prudko pribudne“.
Útočníci majú rovnaké modely
Táto schopnosť nepatrí len obrancom a PHP2Shell to ukázal naplno. Detaily unikli na Hacker News 20. októbra, deň pred vydaním opráv; watchTowr chybu v ten istý deň potvrdil a PHP vydanie vopred ohlásilo. Cloudflare zachytil prvé útoky ešte pred vydaním záplaty a Sansec očakával hromadné útoky do niekoľkých minút od vydania. Keď sa nález modelu dá dotiahnuť do funkčného exploitu za týždeň, obrancovia nemajú na výber: bezpečnostné review s pomocou AI je dnes základ, nie nadštandard.
Ako AI pomáha s opravou
Nájsť chybu je len polovica práce. OpenAI stavia Patch the Planet na dvoch ďalších krokoch: zraniteľnosť „overiť a opraviť v upstreame“ a „dať zasiahnutým organizáciám čas konať“. Pri PHP2Shell to vyzeralo takto:
- Dva mesiace koordinovanej nápravy medzi Califom, Wizom, OpenAI, Quarkslabom a tímom PHP; linuxové distribúcie a LTS dodávatelia dostali záplaty vopred. Bezpečnostné hlásenia na GitHube uvádzajú ako autorov ľudí z Califu, Wizu, Areionu a OpenAI a podľa heise OpenAI pomáhalo aj s revíziou opravy.
- Oprava odstraňuje samotnú príčinu: PHP pri nedostatku pamäte už nepoužíva
longjmp(). Zaznamená odložený „mäkký“ OOM a potom proces natvrdo ukončí cez_exit(). - Ochrana na okraji siete ešte pred vydaním: Cloudflare zapol pravidlá WAF predvolene pre bezplatné aj platené plány 21. októbra o 03:02 UTC, približne 11 hodín pred vydaním opravených verzií o 14:00 UTC.
- Nástroje pre maintainerov: Codex Security od OpenAI, spustený v marci 2026, hľadá a overuje zraniteľnosti, navrhuje opravy a open-source maintainerom je k dispozícii zadarmo.
Ponaučenie pre všetkých ostatných: samotný nález nemá cenu bez overených zistení, koordinovaných opráv a prevádzkovateľov, ktorí naozaj aktualizujú. Posledný krok je na vás.
Čo urobiť ešte dnes
Aktualizujte PHP a reštartujte všetky workery
Aktualizujte na PHP 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35; podľa PHP je to „jediná úplná ochrana“. Použite balíky vašej distribúcie alebo hostingu, prípadne PHP skompilujte zo zdrojových kódov – repozitár Remi v deň vydania balíky ešte nemal. Potom reštartujte všetky PHP workery (FPM pooly, Apache): aktualizovaný balík nezmení procesy, ktoré už bežia.
# overte, že CLI aj FPM hlásia opravenú verziu
php -v
php-fpm8.4 -v
# reštartujte všetky workery (názvy služieb sa líšia podľa distribúcie)
sudo systemctl restart php8.4-fpm
sudo systemctl restart apache2Verzie PHP po skončení podpory
PHP 7.4, 8.0 a 8.1 už nie sú podporované. V php-src pre ne existujú minimálne vetvy so spätne prenesenou opravou, oficiálne binárky však nie, takže potrebujete backport od dodávateľa, kompiláciu zo zdrojových kódov alebo upgrade. PHP 5.x až 7.3 nedostanú nič: upgradujte, službu vypnite, alebo ju schovajte za VPN či WAF. Aj PHP 8.2 končí s podporou 31. decembra 2026, takže tento upgrade plánujte už teraz. Nejde o okrajový problém: podľa W3Techs beží 27,0 % PHP webov na PHP 7 a 7,7 % na PHP 5, čiže zhruba tretina PHP webov beží na verzii bez oficiálneho opraveného vydania.
Zmapujte každé PHP, ktoré prevádzkujete
Spíšte každú inštaláciu PHP, nielen hlavné aplikačné servery: ovládacie panely, zariadenia od dodávateľov, servery s CMS, základné Docker obrazy aj obrazy pre CI. Ak taký zoznam ešte nemáte, jeho zostavenie je prvá úloha. Udržiavať ho aktuálny spolu s pipeline, ktorá doručuje záplaty, je každodennou súčasťou našej práce v oblasti DevOps a cloudu.
Laravel: Composer to neopraví
Sansec potvrdil zneužiteľnosť na Laraveli 13.11. composer update nepomôže, pretože chyba je v behovom prostredí, nie v balíku. Skontrolujte verziu PHP na každom serveri, queue workeri a obraze: Sail, servery na Forge, runtime pre Vapor a Lambda aj Laravel Cloud. Octane a FrankenPHP držia dlho žijúce workery, preto ich po aktualizácii určite reštartujte.
Ak nemôžete aktualizovať hneď
PHP uvádza dočasné opatrenia a samo ich nazýva „dočasnou barlou“. Použite ich len na získanie času:
- Nastavte
memory_limit=-1cezphp_admin_value. Počítajte s tým, že jediná požiadavka potom môže spotrebovať celú pamäť servera. - Znížte
post_max_size: 8M bez nahrávania súborov, 32M s nahrávaním. - Nastavte
session.upload_progress.enabled=0v php.ini alebo v FPM poole, nie cezini_set()ani .user.ini. PHP odporúča nechať ho vypnutý aj po aktualizácii. - Na PHP 8.5 nastavte
fatal_error_backtraces=0. - Znížte
max_input_nesting_level. - Ak nahrávanie súborov nepotrebujete, blokujte multipart/form-data už na okraji siete.
- Nepoužívajte RLIMIT_AS ani RLIMIT_DATA.
- Po každej z týchto zmien reštartujte workery. Pravidlá WAF od Cloudflare pridávajú dočasnú ochranu navyše.
V FPM poole vyzerajú prvé tri opatrenia takto:
; FPM pool (napr. www.conf): len dočasne, PHP aktualizujte čo najskôr
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
php_admin_flag[session.upload_progress.enabled] = offSledujte príznaky zneužitia
- Multipart požiadavky, po ktorých nasledujú chyby pamäťového limitu alebo HTTP 500.
- Nadmerne veľké alebo poškodené cookies PHPSESSID.
- Nevysvetlené reštarty workerov.
- PHP workery, ktoré spúšťajú shell, curl alebo wget.
Ak vidíte príznaky kompromitácie, server izolujte, zachovajte logy a hľadajte webshelly, nové súbory vo webovom koreňovom adresári, nové cron joby a nové účty.
Čo to znamená pre váš vlastný kód
Behové prostredie aktualizujte hneď. Potom počítajte s tým, že modely ako ten, ktorý stál za PHP2Shell, budú namierené na vašu aplikáciu, vaše závislosti aj infraštruktúru, pretože útočníci ich tam namieria. Buďte tam prví: nasaďte review s pomocou AI na vlastný kód a nechajte skúsených inžinierov každé zistenie overiť a opraviť, čo je skutočné. Výstup modelu je stopa, nie verdikt, a nasadzovanie AI výstupu, ktorý nikto neskontroloval, je presne spôsob, ako vznikajú nové diery.
Presne tak fungujú naše bezpečnostné audity: seniorní inžinieri, ktorí pomocou AI nástrojov hľadajú a overujú problémy v aplikačnom kóde, závislostiach aj infraštruktúre, zoradia ich podľa skutočného rizika a potom ich s vami opravia. Detekciu a triedenie incidentov pokrývajú naše možnosti použitia v bezpečnosti. Ak chcete vedieť, ako je na tom váš PHP a Laravel stack po PHP2Shell, opíšte nám svoje prostredie a ozveme sa s tým, čo opraviť ako prvé.
Zdroje
- PHP: oznámenie bezpečnostných vydaní, 21. októbra 2026
- Bezpečnostné hlásenie php-src GHSA-w8hw-w9fx-j79w (CVE-2026-109618)
- Bezpečnostné hlásenie php-src GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)
- OpenAI: koordinované zverejnenie kritických zraniteľností
- Sansec: výskum PHP2Shell
- Cloudflare: ochrana WAF pred zraniteľnosťami v PHP
- Huntress: PHP2Shell, uniknuté kritické zraniteľnosti v PHP
- W3Techs: štatistiky používania PHP
