Röviden: Windows alatt IIS-sel a PHP többnyire php-cgi.exe-ként fut FastCGI-n keresztül, és ezt az üzemmódot a PHP2Shell kifejezetten érinti. A PHP IIS frissítés három lépésből áll: megkeresni az összes PHP-telepítést, lecserélni őket egy javított verzióra, és recycle-ölni az alkalmazáskészleteket. Csomagkezelő és backportok, mint Linux alatt, itt általában nincsenek.
Hogyan fut a PHP IIS alatt
A Windows-szervereken az IIS a FastCGI-modulon keresztül köti be a PHP-t. Minden PHP-verzióhoz van egy FastCGI-bejegyzés, amely egy php-cgi.exe-re mutat, és egy kezelő-hozzárendelés, amely a .php végződésű fájlokat oda irányítja. Az IIS szükség szerint több php-cgi folyamatot indít, és a további kérésekhez aktívan tartja őket.
Linuxszal ellentétben a PHP itt többnyire nem csomagkezelőből származik, hanem a PHP-projekt Windows-buildjeinek ZIP-archívumaként, egy szakalkalmazás részeként vagy régebbi telepítőkön keresztül. Ez azt jelenti: a frissítések nem automatikusan történnek, és nincsenek disztribútori backportok. A telepített fájlok verziószáma a mérvadó.
Mit jelent a PHP2Shell a Windows-szerverekre
A PHP2Shell a CVE-2026-109618 és a CVE-2026-109619 rést jelöli magában a PHP-ban, mindkettő CVSS v4.0 9,2 értékű. Mindkettő kódfuttatást tesz lehetővé bejelentkezés nélkül. A PHP-projekt kifejezetten az érintett üzemmódok között nevezi meg a php-cgi-t. Javított a PHP 8.5.12, 8.4.27, 8.3.36 és 8.2.35.
A PHP 8.1-hez és a régebbiekhez már nincs hivatalos frissítés. A szakalkalmazásokat futtató Windows-szerverek tapasztalat szerint gyakran ilyen állapotokon futnak, mert az alkalmazás egy adott verziót követel. Itt az átmeneti intézkedések mellett tisztázásra van szükség az alkalmazás gyártójával. Az üzemmód hátterét a következő oldal tartalmazza: php-cgi: kockázatos régi örökség.
PHP IIS frissítés: a telepítések megkeresése
A következő PowerShell-parancsok csak olvasnak. Megmutatják, mely PHP-telepítéseket használja az IIS, és milyen verziójúak. Az útvonalak példák.
# FastCGI-bejegyzések az IIS-ben: melyik php-cgi.exe van használatban?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi
# Minden talált telepítés verziója (az útvonal példa)
& "C:\PHP\8.3\php.exe" -v
# Futó php-cgi folyamatok indulási idővel
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Keressen emellett az összes meghajtón további php-cgi.exe fájlokat, mert a szakalkalmazások néha saját másolatot hoznak magukkal. Jegyezze fel telepítésenként a verziót, a változatot (Thread Safe vagy Non Thread Safe) és az architektúrát.
A frissítés telepítése és az alkalmazáskészletek recycle-ölése
Töltse le a javított verziót a PHP-projekt hivatalos Windows-buildjeiből, amelyekre a php.net hivatkozik, ugyanabban a változatban és architektúrában. Bevált módszer az új verziót egy új mappába kicsomagolni, átvenni a meglévő php.ini fájlt és a szükséges kiterjesztéseket, majd a FastCGI-bejegyzést az új útvonalra átállítani. Így a régi állapot megmarad a visszalépéshez.
# Alkalmazáskészlet recycle-ölése (a név példa)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"
# Alternatívaként az összes IIS-szolgáltatás újraindítása
iisreset
# Ellenőrzés: minden php-cgi folyamat a frissítés után indult el?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Minden php-cgi folyamat indulási ideje a frissítés utáni legyen, és az új útvonalra mutasson. Utána tesztelje a weboldalakat. Távolítsa el a régi PHP-mappát, amint az új állapot stabilan fut, hogy véletlenül ne kössék be újra.
A PHP-mappában lévő új fájlok nem elegendők, amíg régi php-cgi folyamatok futnak. A javítás csak a készletek recycle-ölése vagy egy IIS-újraindítás után hatásos.
Átmeneti intézkedések a php.ini fájlban
Ha egy telepítés nem frissíthető azonnal, a php.net teljes védelem nélküli átmeneti intézkedéseket javasol. IIS alatt az értékeket az adott telepítés központi php.ini fájljában adja meg. A .user.ini fájlok és az ini_set() a php.net szerint nem elegendők.
; az érintett telepítés php.ini fájlja
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
Feltöltési funkcióval a php.net post_max_size = 32M értéket nevezi meg. A PHP 8.5-nél ehhez jön a fatal_error_backtraces=0. Hogy a weboldalak ne módosíthassák az értékeket saját .user.ini fájlokkal, a user_ini.filename értéke üresre állítható a központi php.ini fájlban; előtte ellenőrizze, hogy az alkalmazások nem függenek-e ettől. Utána recycle-ölje a készleteket. A BSI azt javasolja, hogy ha a frissítés nem lehetséges azonnal, a webszervereket átmenetileg vegyék le a hálózatról. További beállításokat magyaráz a php.ini biztonságos konfigurálása.
A frissítés után
A javítás nem távolítja el a korábban bejuttatott kártevőt. Őrizze meg az IIS-naplókat 2026. október 20-tól, ellenőrizze a webes könyvtárakat új szkriptfájlokra, és vizsgálja meg az ütemezett feladatokat és a helyi felhasználói fiókokat ismeretlen elemekre. Ha a szerver tartományban fut, ide tartozik a bejelentkezések áttekintése is.
Figyeljen emellett az alkalmazáskészlet-identitások jogosultságaira. Ha egy készlet olyan fiókkal fut, amelynek írási joga van a teljes webes könyvtárra, vagy akár adminisztrátori jogai vannak, a támadó egy sikeres betörés után lényegesen nagyobb kárt okozhat. Értelmes a készletenkénti saját, korlátozott identitás, írási joggal csak ott, ahol az alkalmazásnak ténylegesen szüksége van rá, például a feltöltési vagy gyorsítótár-mappában. Ezekben a mappákban az IIS ne futtasson PHP-fájlokat; ez az adott mappa kezelő-hozzárendelésein keresztül szabályozható. Ellenőrizze azt is, hogy régi teszt- és telepítési fájlok, például phpinfo-kimenetek nincsenek-e a webes könyvtárban, és távolítsa el őket.
Hogyan segít konkrétan a PHP SOS?
- Megkeressük az összes PHP-telepítést a Windows-szervereken, a szakalkalmazásokban lévő másolatokat is.
- A PHP-javítási szolgáltatáson keresztül kicseréljük a PHP-t, recycle-öljük a készleteket, és dokumentáljuk a verziót és a folyamatidőket.
- Régi verzióknál Önnel és az alkalmazás gyártójával tisztázzuk az utat az áttérés felé egy támogatott PHP-verzióra.
- Ellenőrizzük a szervereket támadás nyomaira, és mentjük a naplókat.
Gyakori kérdések
Melyik PHP-változatra van szükségem az IIS-hez?
Az IIS-hez FastCGI-val általában a Non-Thread-Safe változatot (NTS) használják. A frissítésnél ügyeljen arra, hogy ismét ugyanazt a változatot és architektúrát válassza, hogy a kiterjesztések továbbra is illeszkedjenek.
Elég az új PHP-mappát kicsomagolni?
Nem. Az IIS a php-cgi.exe folyamatokat egy ideig aktívan tartja. Recycle-ölje az alkalmazáskészleteket, vagy indítsa újra az IIS-t, és ellenőrizze, hogy régi folyamatok már nem futnak.
Üzemeltethetek több PHP-verziót egy IIS-en?
Igen, több FastCGI-bejegyzéssel és weboldalankénti kezelő-hozzárendeléssel. Ez azonban növeli a gondozási ráfordítást. Minden telepítésnek külön frissítésre és külön ellenőrzésre van szüksége.
Érinti a PHP2Shell a PHP-t Windows alatt?
A rések magában a PHP-ban vannak. IIS alatt a PHP általában php-cgi-ként fut, amelyet a PHP-projekt kifejezetten az érintett üzemmódok közé sorol. A Windows-szervereket ezért kezelje ugyanolyan sürgősen, mint a Linux-szervereket.