Vlády vypínali weby pre chybu v PHP. Je PHP bezpečný a čo sa naozaj zmenilo
Chyba ležala v kóde vyše desať rokov. Našli ju obrancovia pomocou jazykových modelov a jediný výskumník zvládol za týždeň to, čo by predtým zabralo špičkovému tímu mesiace. To je na celej veci podstatné, nie PHP.
Obsah článku
V stredu 21. októbra 2026 začali v Európe zhasínať vládne stránky. Holandské Národné centrum kybernetickej bezpečnosti vyplo vlastný web. Francúzske ministerstvo vnútra dalo všetky svoje stránky do preventívnej údržby. V Nemecku stiahol štátny poskytovateľ IT služieb ITZBund niekoľko webov, v Dánsku padla celoštátna školská komunikačná platforma, vo Fínsku verejné služby štátnej siete. Dôvodom boli dve chyby v PHP, programovacom jazyku, na ktorom stojí väčšina internetu. Tento článok je o tom, čo sa stalo, či je PHP bezpečný a prečo je na celej veci najzaujímavejšie niečo úplne iné, než sa na prvý pohľad zdá.
Povedzme to hneď na začiatku: tento web beží na PHP. Rovnako ako weby, ktoré staviame klientom. Nepíšeme teda o cudzom probléme z bezpečnej vzdialenosti, píšeme o jazyku, v ktorom pracujeme každý deň. Práve preto nás mrzí, keď sa z takej správy stane titulok „PHP je deravé". Skutočný príbeh je inde a je oveľa zaujímavejší.
Čo sa vlastne stalo
Ide o dve zraniteľnosti označené ako CVE-2026-109618 a CVE-2026-109619, ktoré dostali spoločnú prezývku PHP2Shell. Obe majú závažnosť 9,2 z 10 podľa stupnice CVSS 4.0, čo je kategória „kritická". Umožňujú takzvané neautentizované vzdialené spustenie kódu: útočník sa nemusí nikam prihlásiť, nemusí poznať žiadne heslo a napriek tomu dokáže na serveri spustiť vlastný program.
Zjednodušene povedané ide o to, čo sa stane, keď PHP narazí na vážnu chybu, typicky na vyčerpanie pamäte. Pri takej chybe sa spracovanie požiadavky preruší uprostred práce a v pamäti ostane neporiadok: rozrobené údaje, ktoré vyzerajú ako hotové, alebo ukazovateľ na pamäť, ktorá už bola uvoľnená. Ďalšia požiadavka potom tento neporiadok nájde a použije ho, akoby bol v poriadku. Útočník, ktorý vie neporiadok vyrobiť na správnom mieste, si doň vie vložiť vlastný obsah.
Následky sú dva a oba sú vážne. Prvým je čítanie pamäte procesu, teda toho, čo má server práve rozpracované: heslá, tokeny, kľúče k rozhraniam, certifikáty. Druhým je spomínané spustenie vlastného kódu. Výskumníci to predviedli na WordPresse, Drupale aj Joomle, ale je dôležité rozumieť tomu, že chyba nie je v nich. Je priamo v PHP, takže sa týka aj úplne jednoduchej stránky bez akéhokoľvek redakčného systému.
Opravené verzie vyšli v ten istý deň: PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Vývojári PHP k nim napísali vetu, ktorú stojí za to odcitovať presne: aktualizácia je jediná úplná náprava. Rôzne obchádzky cez nastavenia síce zužujú priestor na útok, ale nerobia inštaláciu bezpečnou.
Prečo inštitúcie radšej vypli weby, než aby čakali
Na prvý pohľad pôsobí zvláštne, že štátna inštitúcia vypne svoj web namiesto toho, aby ho opravila. Lenže poradie udalostí bolo nepríjemné. Najskôr sa vedelo, že chyby existujú a aké sú vážne. Záplata prišla až potom, krátko po pol tretej popoludní stredoeurópskeho času. Medzi tými dvoma okamihmi mal každý prevádzkovateľ na výber: nechať na internete bežať niečo, o čom je verejne známe, že sa to dá zneužiť bez hesla, alebo to na pár hodín vypnúť.
Európske aj mimoeurópske úrady odporúčali druhú možnosť. Kybernetické agentúry v Európe, Austrálii, Japonsku aj Británii vyzvali, aby prevádzkovatelia buď okamžite aktualizovali, alebo weby odstavili, kým záplatu nenasadia. CERT-EU k tomu dodal, že kto nemôže opraviť hneď, mal by zvážiť odpojenie aplikácií dostupných z internetu od verejnej siete.
Vypnutý web je nepríjemný. Web, z ktorého niekto odnesie databázu občanov alebo pacientov, je o niekoľko rádov horší. Z tohto pohľadu bolo zhasínanie stránok správne rozhodnutie, nie panika.
Je teda PHP bezpečný?
Odpoveď je áno, a to nie zo zdvorilosti k jazyku, v ktorom pracujeme. Zaslúži si však vysvetlenie.
PHP podľa W3Techs poháňa zhruba 75 % webov, pri ktorých sa dá programovací jazyk vôbec zistiť. Keď má niečo taký podiel, platia preň dve veci naraz. Po prvé, akákoľvek chyba v tom má obrovský dosah, lebo zasiahne státisíce nesúvisiacich stránok naraz. Po druhé, a to je podstatnejšie, taký softvér je pod drobnohľadom, aký si menšie projekty nevedia dovoliť.
Všimnite si, ako celá vec prebehla. Chybu našli výskumníci, nie útočníci. Nahlásili ju vývojárom PHP. Tí pripravili opravu pre všetky štyri podporované vetvy a vydali ju v jeden deň pre všetky naraz. Agentúry varovali verejnosť. To nie je obraz rozpadnutého ekosystému, to je obraz ekosystému, ktorý funguje.
A ešte jedna vec. Tie chyby neboli čerstvé. Boli v kóde viac ako desať rokov a dotýkajú sa vydaní až po PHP 5.4. Celý ten čas tam ticho ležali, pretože ich nikto nevedel nájsť. To nás privádza k jadru veci.
Čo sa naozaj zmenilo: chybu našla umelá inteligencia
PHP2Shell neobjavil človek, ktorý sa prehrabával kódom. Objavil ho výskumný tím spoločnosti Wiz 19. augusta 2026 a použil pri tom jazykové modely. Konkrétne uvádzajú vlastný nástroj Wiz Atlas a modely Gemini 4 Argon a GPT-5.6 Sol, pričom prvý menovaný podľa nich zásadne pomohol nielen pri hľadaní chyby, ale aj pri vývoji funkčného útoku a následne pri overovaní záplaty.
Vo svojom texte to zhrnuli vetou, ktorú treba prečítať dvakrát:
Jediný výskumník zvládol za týždeň to, čo by predtým svetovej špičke zabralo mesiace práce.
A doplnili myšlienku, ktorá je pre náš web dôležitejšia než samotná chyba: mení sa ekonomika objavovania aj zneužívania. Dosiaľ platilo, že nájsť chybu tohto typu v pamäti interpretera vyžadovalo roky špecializácie, veľa času a tím ľudí. Táto prekážka držala podobné chyby skryté celé desaťročie. Dnes už neplatí.
Prečo to mení pomer síl
Hľadanie chyby je len prvá polovica práce. Druhou je napísať útok, ktorý naozaj funguje, a to je tradične ešte ťažšie. Pamäť sa správa inak v každej verzii PHP, pri každom nastavení servera, pri každej kombinácii rozšírení. Útok, ktorý funguje na jednom serveri, na druhom len spôsobí pád. Práve toto doteraz útočníkov brzdilo najviac: museli ladiť každý cieľ zvlášť a každé ladenie vyžadovalo odborníka.
Jazykové modely vedia presne toto. Vedia si prečítať, prečo útok zlyhal, a navrhnúť úpravu. Vedia to opakovať dovtedy, kým to vyjde. Tým sa množstvo odbornej práce na jeden cieľ prudko zmenšuje, a to je presne tá zmena, o ktorej hovoríme. Nie že by útočník získal novú superschopnosť. Získal niečo praktickejšie: dokáže naraz obsiahnuť neporovnateľne viac cieľov než predtým.
Ten istý nástroj pritom slúži obom stranám. Chybu našli obrancovia a našli ju skôr než útočníci, čo je presne to, o čo pri takom výskume ide. Na strane obrany sa však nasadzuje pomalšie, lebo obrana je rozdrobená medzi státisíce prevádzkovateľov, kým útok stačí vyladiť raz.
Skutočný problém nie je PHP. Sú to služby, na ktoré sa zabudlo
Teraz sa dostávame k tomu, čo považujeme za najdôležitejšiu vetu celého článku.
Oprava vyšla pre štyri vetvy PHP: 8.2, 8.3, 8.4 a 8.5. Pre PHP 8.1 a staršie už projekt opravu nevydáva. Kto na nich beží, musí sa spoľahnúť na to, či mu opravu pripraví jeho linuxová distribúcia alebo hosting. A kto beží na PHP 7 či dokonca na PHP 5, nemá ako to vyriešiť vôbec. Pritom chyba sa týka aj týchto verzií.
Zároveň platí, že PHP 8.2 končí podporu 31. decembra 2026. Kto dnes vydýchne, lebo mu hosting ponúka 8.2, má do konca roka vyriešiť ďalší krok.
A presne tu býva problém inštitúcií, a nielen ich. Nový web sa postaví, slávnostne spustí a nejaký čas sa oň niekto stará. Potom sa vymení dodávateľ, skončí zmluva alebo odíde človek, ktorý mu rozumel. Web beží ďalej, lebo veď funguje. Nikto nesleduje, že verzia pod ním zostarla. Vedľa hlavného webu pritom býva ešte prihlasovací portál z roku 2019, starý formulár na dotazníky a mikrostránka ku kampani, o ktorej už nikto nevie, že existuje. Každá z nich je samostatný server s vlastným PHP.
Keď potom príde deň ako tento, hlavný web sa opraví alebo vypne do hodiny. Zabudnuté služby sa neopravia, lebo si na ne nikto nespomenie. A práve ony ostanú na internete ako otvorené dvere, o ktorých vie viac útočník než ich majiteľ.
Je to rovnaká schéma, akú sme v tejto sérii opisovali už pri telefónnych číslach a pri falošných stránkach: problém nie je v technológii, ale v tom, čo sa okolo nej prestane robiť.
Čo s tým, keď máte web
Postup je krátky a dá sa zvládnuť za jedno popoludnie.
- Zistite, na akej verzii PHP váš web beží. Býva to v administrácii hostingu. Ak to neviete nájsť, napíšte podpore hostingu jednu vetu: na akej verzii PHP beží moja stránka.
- Porovnajte to s opravenými verziami. Bezpečné sú 8.5.12, 8.4.27, 8.3.36 a 8.2.35 a čokoľvek novšie. Nižšie číslo v tej istej vetve znamená, že aktualizácia ešte neprebehla.
- Nespoliehajte sa na automatické aktualizácie. Toto je bod, na ktorý najviac ľudí doplatí. Automatické aktualizácie WordPressu ani doplnkov PHP neaktualizujú. PHP je pod nimi a mení ho hosting alebo správca servera, nie redakčný systém.
- Neverte nastaveniam ako náhrade za opravu. Po internete kolujú rady typu vypnite si určitú voľbu v konfigurácii. Vývojári PHP aj jeho správcovia vydaní hovoria jasne, že nastavenia vás neochránia. Pomôžu len zúžiť priestor, nie ho zavrieť.
- Spíšte si, čo všetko vám beží. Nielen hlavný web. Aj starý e-shop, testovaciu kópiu, mikrostránku ku kampani, portál pre partnerov. Ak niečo z toho nikto nepotrebuje, najbezpečnejšie je to vypnúť úplne.
Ako si verziu overiť, keď ju v hostingu nenájdete
Najprv skúste administráciu hostingu alebo jednu otázku na podporu. Je to najrýchlejšie a nemusíte pri tom na web nič nahrávať. Ak to nejde, pomôže si malý súbor, ktorý na web nahráte, prečítate a hneď zmažete.
Na internete sa na to najčastejšie odporúča phpinfo(). My ho tu zámerne neuvádzame a stojí za to povedať prečo. phpinfo() vypíše úplne všetko: presnú verziu, dátum zostavenia, verziu jadra operačného systému, cesty ku konfigurácii, zoznam modulov aj to, ktoré funkcie má server zakázané. Útočníkovi tým dáte kompletný náhľad do stroja a v deň, keď sa hromadne skenuje internet, mu rovno oznámite, že ste vhodný cieľ. Vy pritom potrebujete jediné číslo.
Stačí teda toto. Vypíše verziu a rovno povie, či je záplatovaná:
<?php
$zaplaty = ['8.5' => '8.5.12', '8.4' => '8.4.27', '8.3' => '8.3.36', '8.2' => '8.2.35'];
$vetva = PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;
$treba = $zaplaty[$vetva] ?? null;
echo 'PHP ' . PHP_VERSION . ': ';
if ($treba === null) {
echo 'tato vetva uz opravy nedostava, treba prejst na novsiu.';
} elseif (version_compare(PHP_VERSION, $treba, '>=')) {
echo 'zaplatovane, v poriadku.';
} else {
echo 'POD ZAPLATOU, treba aspon ' . $treba . '.';
}
Tri pravidlá k tomu a všetky tri sú dôležité:
- Dajte mu náhodný názov. Nie
info.phpanitest.php, tie sú v zoznamoch, ktoré roboty skúšajú ako prvé. Pridajte vlastné náhodné znaky, napríkladverzia-k7m2xq.php. - Zmažte ho hneď, ako si prečítate výsledok. Nie zajtra. Je to presne ten typ súboru, na ktorý sa o mesiac zabudne, a práve o takých je celý tento článok.
- Nikam naň nedávajte odkaz. Má existovať pár minút a nikto okrem vás o ňom nemá vedieť.
Ak máte web od nás, toto riešiť nemusíte, je to súčasť toho, za čo nám platíte. Ak ho máte od niekoho iného a neviete, kto sa oň dnes stará, je to presne tá otázka, ktorú má zmysel položiť ešte dnes.
Na záver
Z celej veci sa dá vybrať jednoduchý titulok o deravom PHP. Bol by nepresný. Pravdivejší je takýto: v softvéri, ktorý poháňa väčšinu internetu, ležala vyše desať rokov chyba, ktorú nikto nevedel nájsť. Našli ju obrancovia pomocou jazykových modelov a našli ju skôr než útočníci. Oprava bola vonku v ten istý deň.
Zmenilo sa len jedno, zato podstatne. Nájsť a zneužiť chybu tohto druhu už nie je práca pre špičkový tím na mesiace. Útoky, ktoré boli doteraz drahé a preto zriedkavé, budú lacnejšie a preto častejšie. Nebude to platiť len o PHP. Bude to platiť o každom softvéri, ktorý vám niečo prevádzkuje.
Z toho plynie záver, ktorý je v našej sérii stále ten istý, len pri každej téme inými slovami: rozhoduje to, či má vaše veci dnes niekto na starosti. Nie to, aký jazyk ste si pred rokmi vybrali.
Súvisiace čítanie
O tom, čo odovzdávate zo svojho telefónneho zoznamu: Volá neznáme číslo: ako fungujú služby na identifikáciu volajúceho a čo za to dáte.
O tom, čo sa stane, keď podmienky naopak chýbajú: Klon namiesto originálu: ako sa falošná stránka dostane v Google nad pravú.
A o tom, čo ste odklikli sociálnym sieťam: Čo ste odklikli TikToku a sociálnym sieťam.
Chcete vedieť, ako je na tom váš web? Náš Audit zdarma prejde stránku a ukáže, čo na nej beží a kde má slabé miesta.
Pomohol vám článok? Pošlite ho kolegovi alebo tomu, kto sa vám stará o web.
Časté otázky
Otázky k tejto téme
Je PHP bezpečný jazyk, keď sa stalo niečo takéto?
Áno. Chyba nebola v tom, ako je PHP navrhnuté, ale v tom, ako si interpreter upratoval pamäť po vážnej chybe, typicky po vyčerpaní pamäte. Taká chyba sa môže stať v akomkoľvek softvéri písanom v jazyku C, a to je väčšina toho, na čom internet stojí.
Všimnite si priebeh: chybu našli výskumníci, nie útočníci, nahlásili ju vývojárom a oprava vyšla pre všetky štyri podporované vetvy v jeden deň. To je obraz ekosystému, ktorý funguje, nie rozpadnutého.
Ako zistím, či je môj web ohrozený?
Potrebujete vedieť jedinú vec: akú verziu PHP používa váš hosting. Býva to v administrácii hostingu, prípadne stačí napísať podpore jednu vetu.
Opravené verzie sú 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Čokoľvek novšie v tej istej vetve je tiež v poriadku. Nižšie číslo znamená, že aktualizácia ešte neprebehla.
Ochráni ma automatická aktualizácia WordPressu?
Nie, a toto je bod, na ktorý doplatí najviac ľudí. Automatické aktualizácie WordPressu a doplnkov menia WordPress a doplnky. PHP je o poschodie nižšie, je to prostredie, v ktorom WordPress beží.
Verziu PHP mení hosting alebo správca servera. Ak neviete, kto to u vás je, je to otázka na podporu hostingu.
Čo keď mám starú verziu PHP, pre ktorú oprava nevyšla?
Pre PHP 8.1 a staršie už projekt opravy nevydáva, hoci sa ich chyba týka tiež, a to až po verziu 5.4. Niektoré linuxové distribúcie a hostingy si opravu pripravia samy, takže sa oplatí spýtať sa ich.
Ak takú odpoveď nedostanete, jediné skutočné riešenie je prejsť na podporovanú verziu. Zároveň si poznačte, že PHP 8.2 končí podporu 31. decembra 2026.
Naozaj tú chybu našla umelá inteligencia?
Áno, a je to na celej udalosti to najpodstatnejšie. Výskumný tím spoločnosti Wiz uvádza, že chybu objavil 19. augusta 2026 s pomocou jazykových modelov, konkrétne menuje Gemini 4 Argon a GPT-5.6 Sol popri vlastnom nástroji.
Sami to zhrnuli tak, že jediný výskumník zvládol za týždeň to, čo by predtým svetovej špičke zabralo mesiace. Mení sa tým ekonomika hľadania aj zneužívania chýb, nielen v PHP.
Útočil už na weby niekto, alebo sa vypínalo len preventívne?
Správy sa v tomto rozchádzajú a je poctivé to povedať. Cloudflare hlásil, že vidí prvé útoky. Viaceré národné agentúry naopak uviedli, že na svojich weboch nezaznamenali žiadne, a nemecká strana označila vypnutie za čisto preventívne.
Isté je, že verejne koluje kód na zneužitie a že vypnutý web je vždy menší problém než web, z ktorého niekto odnesie databázu.
Ďalšie odpovede nájdete v sekcii Časté otázky.