Stručne: Pod Windows s IIS beží PHP väčšinou ako php-cgi.exe cez FastCGI, teda v režime prevádzky, ktorého sa PHP2Shell výslovne týka. Aktualizácia PHP v IIS pozostáva z troch krokov: nájsť všetky inštalácie PHP, nahradiť ich opravenou verziou a recyklovať aplikačné pooly. Správu balíkov a backporty ako pod Linuxom tu spravidla nemáte.
Ako PHP beží pod IIS
Na serveroch Windows pripája IIS PHP cez modul FastCGI. Pre každú verziu PHP existuje záznam FastCGI, ktorý ukazuje na php-cgi.exe, a priradenie handlera, ktoré tam smeruje súbory s príponou .php. IIS podľa potreby spúšťa viac procesov php-cgi a drží ich aktívne pre ďalšie požiadavky.
Na rozdiel od Linuxu PHP tu väčšinou nepochádza zo správy balíkov, ale ako archív ZIP zostavení pre Windows od projektu PHP, ako súčasť odbornej aplikácie alebo cez staršie inštalátory. To znamená: aktualizácie sa nedejú automaticky a neexistujú backporty distribútora. Rozhodujúce je číslo verzie nainštalovaných súborov.
Čo PHP2Shell znamená pre servery Windows
PHP2Shell zahŕňa CVE-2026-109618 a CVE-2026-109619 v samotnom PHP, každá s CVSS v4.0 9.2. Obe umožňujú spustenie kódu bez prihlásenia. Projekt PHP uvádza php-cgi výslovne medzi dotknutými režimami prevádzky. Opravené sú PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35.
Pre PHP 8.1 a staršie už oficiálne aktualizácie neexistujú. Servery Windows s odbornými aplikáciami podľa skúseností často bežia na takých stavoch, pretože aplikácia vyžaduje konkrétnu verziu. Tu je popri prechodných opatreniach potrebné objasnenie s výrobcom aplikácie. Súvislosti k tomuto režimu prevádzky nájdete na stránke php-cgi: stará záťaž s rizikom.
Aktualizácia PHP v IIS: nájdite inštalácie
Nasledujúce príkazy PowerShell iba čítajú. Ukazujú, aké inštalácie PHP IIS používa a akú majú verziu. Cesty sú príklady.
# Záznamy FastCGI v IIS: ktorý php-cgi.exe sa používa?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi
# Verzia každej nájdenej inštalácie (cesta ako príklad)
& "C:\PHP\8.3\php.exe" -v
# Bežiace procesy php-cgi s časom spustenia
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Navyše hľadajte na všetkých jednotkách ďalšie php-cgi.exe, pretože odborné aplikácie niekedy prinášajú vlastné kópie. Pre každú inštaláciu si poznačte verziu, variant (Thread Safe alebo Non Thread Safe) a architektúru.
Nasaďte aktualizáciu a recyklujte aplikačné pooly
Stiahnite opravenú verziu z oficiálnych zostavení pre Windows od projektu PHP, ktoré sú odkazované z php.net, v rovnakom variante a architektúre. Osvedčilo sa rozbaliť novú verziu do nového adresára, prevziať existujúcu php.ini a potrebné rozšírenia a potom prepnúť záznam FastCGI na novú cestu. Starý stav tak zostane zachovaný pre cestu späť.
# Recyklovať aplikačný pool (názov ako príklad)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"
# Alternatívne reštartovať všetky služby IIS
iisreset
# Kontrola: boli všetky procesy php-cgi po aktualizácii spustené nanovo?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Každý proces php-cgi musí mať čas spustenia po aktualizácii a ukazovať na novú cestu. Potom otestujte weby. Starý adresár PHP odstráňte, len čo nový stav beží stabilne, aby sa omylom znova nepripojil.
Nové súbory v adresári PHP nestačia, kým bežia staré procesy php-cgi. Záplata je účinná až po recyklácii poolov alebo reštarte IIS.
Prechodné opatrenia v php.ini
Ak sa inštalácia nedá okamžite aktualizovať, php.net odporúča prechodné opatrenia bez úplnej ochrany. Pod IIS nastavte hodnoty v centrálnej php.ini príslušnej inštalácie. Súbory .user.ini a ini_set() podľa php.net nestačia.
; php.ini dotknutej inštalácie
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
S funkciou nahrávania php.net uvádza post_max_size = 32M. Pri PHP 8.5 pribúda fatal_error_backtraces=0. Aby weby hodnoty nemenili cez vlastné súbory .user.ini, možno v centrálnej php.ini nastaviť user_ini.filename ako prázdne; vopred skontrolujte, či sa na to aplikácie nespoliehajú. Potom recyklujte pooly. BSI (nemecký Spolkový úrad pre informačnú bezpečnosť) odporúča webové servery dočasne odpojiť od siete, ak aktualizácia nie je možná okamžite. Ďalšie nastavenia vysvetľuje stránka Bezpečná konfigurácia php.ini.
Po aktualizácii
Záplata neodstráni škodlivý softvér, ktorý bol zavlečený predtým. Uchovajte protokoly IIS od 20. 10. 2026, skontrolujte webové adresáre na nové súbory skriptov a skontrolujte plánované úlohy a lokálne používateľské účty na neznáme položky. Ak server beží v doméne, patrí k tomu aj pohľad na prihlásenia.
Dávajte navyše pozor na práva identít aplikačných poolov. Ak pool beží s účtom, ktorý má zapisovacie práva na celý webový adresár alebo dokonca administrátorské práva, môže útočník po úspešnom vlámaní napáchať podstatne viac. Zmysel má vlastná, obmedzená identita pre každý pool so zapisovacími právami iba tam, kde ich aplikácia skutočne potrebuje, napríklad v priečinku na nahrávanie alebo cache. V týchto priečinkoch by IIS nemal spúšťať súbory PHP; dá sa to upraviť cez priradenia handlerov príslušného priečinka. Skontrolujte aj to, či vo webovom adresári neležia staré testovacie a inštalačné súbory, ako sú výstupy phpinfo, a odstráňte ich.
Ako konkrétne pomáha PHP SOS?
- Nájdeme všetky inštalácie PHP na vašich serveroch Windows, aj kópie v odborných aplikáciách.
- Cez službu záplatovania PHP vymeníme PHP, recyklujeme pooly a zdokumentujeme verziu a časy procesov.
- Pri starých verziách s vami a výrobcom aplikácie vyjasníme cestu k migrácii na podporovanú verziu PHP.
- Servery skontrolujeme na stopy útoku a zabezpečíme protokoly.
Časté otázky
Akú variantu PHP potrebujem pre IIS?
Pre IIS s FastCGI sa obvykle používa variant Non-Thread-Safe (NTS). Pri aktualizácii dbajte na to, aby ste opäť zvolili ten istý variant a architektúru, aby rozšírenia naďalej pasovali.
Stačí rozbaliť nový adresár PHP?
Nie. IIS drží procesy php-cgi.exe nejaký čas aktívne. Recyklujte aplikačné pooly alebo reštartujte IIS a skontrolujte, že už nebežia staré procesy.
Môžem na jednom IIS prevádzkovať viac verzií PHP?
Áno, cez viac záznamov FastCGI a priradení handlerov pre každý web. Zvyšuje to však náročnosť údržby. Každá inštalácia vyžaduje vlastnú aktualizáciu a vlastnú kontrolu.
Týka sa PHP2Shell aj PHP pod Windows?
Zraniteľnosti sú v samotnom PHP. Pod IIS beží PHP spravidla ako php-cgi, ktoré projekt PHP výslovne počíta medzi dotknuté režimy prevádzky. Servery Windows preto riešte rovnako naliehavo ako servery Linux.