Trumpai: Sistemoje Windows su IIS PHP dažniausiai veikia kaip php-cgi.exe per FastCGI, t. y. veikimo režimu, kurį PHP2Shell aiškiai paveikia. PHP IIS atnaujinimą sudaro trys žingsniai: rasti visus PHP diegimus, pakeisti juos ištaisyta versija ir perkrauti programų baseinus. Paketų tvarkyklės ir backport, kaip Linux, čia paprastai nėra.
Kaip PHP veikia IIS
Windows serveriuose IIS PHP prijungia per FastCGI modulį. Kiekvienai PHP versijai yra FastCGI įrašas, nurodantis į php-cgi.exe, ir tvarkyklės priskyrimas, nukreipiantis failus su plėtiniu .php ten. IIS pagal poreikį paleidžia kelis php-cgi procesus ir laiko juos aktyvius tolesnėms užklausoms.
Skirtingai nei Linux, PHP čia dažniausiai ateina ne iš paketų tvarkyklės, o kaip PHP projekto Windows kūrinių ZIP archyvas, kaip specializuotos programos dalis arba per senesnes diegimo programas. Tai reiškia: atnaujinimai nevyksta automatiškai ir platintojo backport nėra. Lemia įdiegtų failų versijos numeris.
Ką PHP2Shell reiškia Windows serveriams
PHP2Shell apima CVE-2026-109618 ir CVE-2026-109619 pačiame PHP, kiekvienas su CVSS v4.0 9,2. Abu leidžia vykdyti kodą be prisijungimo. PHP projektas php-cgi aiškiai nurodo tarp paveiktų veikimo režimų. Ištaisyti PHP 8.5.12, 8.4.27, 8.3.36 ir 8.2.35.
PHP 8.1 ir senesnėms versijoms oficialių atnaujinimų nebėra. Windows serveriai su specializuotomis programomis, kaip rodo patirtis, dažnai veikia su tokiomis versijomis, nes programa reikalauja konkrečios versijos. Čia greta pereinamųjų priemonių reikia išsiaiškinti situaciją su programos gamintoju. Šio veikimo režimo pagrindą rasite puslapyje php-cgi: rizikinga sena našta.
PHP IIS atnaujinimas: raskite diegimus
Toliau pateiktos PowerShell komandos tik skaito. Jos parodo, kuriuos PHP diegimus naudoja IIS ir kokios jų versijos. Keliai yra pavyzdžiai.
# FastCGI įrašai IIS: kuris php-cgi.exe naudojamas?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi
# Kiekvieno rasto diegimo versija (kelias kaip pavyzdys)
& "C:\PHP\8.3\php.exe" -v
# Veikiantys php-cgi procesai su paleidimo laiku
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Papildomai ieškokite visuose diskuose kitų php-cgi.exe, nes specializuotos programos kartais atsineša savas kopijas. Prie kiekvieno diegimo užsirašykite versiją, variantą (Thread Safe ar Non Thread Safe) ir architektūrą.
Įdiekite atnaujinimą ir perkraukite programų baseinus
Ištaisytą versiją atsisiųskite iš oficialių PHP projekto Windows kūrinių, nurodytų iš php.net, to paties varianto ir architektūros. Pasiteisino naują versiją išpakuoti į naują aplanką, perimti esamą php.ini ir reikalingus plėtinius, o tada FastCGI įrašą perjungti į naują kelią. Taip senoji būsena lieka kelyje atgal.
# Perkraukite programų baseiną (pavadinimas kaip pavyzdys)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"
# Arba iš naujo paleiskite visas IIS tarnybas
iisreset
# Kontrolė: ar visi php-cgi procesai paleisti po atnaujinimo?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Kiekvieno php-cgi proceso paleidimo laikas turi būti vėlesnis nei atnaujinimas, o procesas turi rodyti į naują kelią. Po to išbandykite svetaines. Seną PHP aplanką pašalinkite, kai tik naujoji būsena veiks stabiliai, kad jis netyčia nebūtų vėl prijungtas.
Nauji failai PHP aplanke nepakanka, kol veikia seni php-cgi procesai. Tik perkrovus baseinus arba paleidus IIS iš naujo pataisa pradeda veikti.
Pereinamosios priemonės php.ini
Jei diegimo negalima atnaujinti nedelsiant, php.net rekomenduoja pereinamąsias priemones be visiškos apsaugos. IIS reikšmes nustatykite atitinkamo diegimo centriniame php.ini. .user.ini failų ir ini_set() pasak php.net nepakanka.
; paveikto diegimo php.ini
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
Su įkėlimo funkcija php.net nurodo post_max_size = 32M. PHP 8.5 papildomai nustatoma fatal_error_backtraces=0. Kad svetainės reikšmių nekeistų per savus .user.ini failus, centriniame php.ini user_ini.filename galima palikti tuščią; prieš tai patikrinkite, ar programos nuo to nepriklauso. Po to perkraukite baseinus. BSI (Vokietijos Federalinė informacijos saugumo tarnyba) rekomenduoja laikinai atjungti žiniatinklio serverius nuo tinklo, jei atnaujinimas nedelsiant neįmanomas. Kitus nustatymus paaiškina php.ini saugi konfigūracija.
Po atnaujinimo
Pataisa nepašalina kenkėjiškos programinės įrangos, įterptos anksčiau. Išsaugokite IIS protokolus nuo 2026-10-20, patikrinkite žiniatinklio katalogus dėl naujų skriptų failų ir patikrinkite suplanuotas užduotis bei vietines naudotojų paskyras dėl nežinomų. Jei serveris veikia domene, verta pažvelgti ir į prisijungimus.
Papildomai atkreipkite dėmesį į programų baseinų tapatybių teises. Jei baseinas veikia su paskyra, turinčia rašymo teises visame žiniatinklio kataloge ar net administravimo teises, užpuolikas po sėkmingo įsilaužimo gali padaryti gerokai daugiau žalos. Prasminga turėti atskirą, apribotą tapatybę kiekvienam baseinui su rašymo teisėmis tik ten, kur programa jų tikrai reikia, pavyzdžiui, įkėlimų ar talpyklos aplanke. Šiuose aplankuose IIS neturėtų vykdyti PHP failų; tai galima sureguliuoti atitinkamo aplanko tvarkyklių priskyrimais. Patikrinkite ir tai, ar žiniatinklio kataloge nėra senų bandomųjų ir diegimo failų, pavyzdžiui, phpinfo išvesčių, ir juos pašalinkite.
Kaip PHP SOS padeda konkrečiai?
- Randame visus PHP diegimus jūsų Windows serveriuose, taip pat kopijas specializuotose programose.
- Per PHP pataisų paslaugą pakeičiame PHP, perkraunome baseinus ir dokumentuojame versiją bei procesų laikus.
- Esant senoms versijoms kartu su jumis ir programos gamintoju išsiaiškiname kelią į perėjimą prie palaikomos PHP versijos.
- Tikriname serverius dėl atakos pėdsakų ir išsaugome protokolus.
Dažni klausimai
Kokio PHP varianto reikia IIS?
IIS su FastCGI paprastai naudojamas Non-Thread-Safe variantas (NTS). Atnaujindami pasirūpinkite, kad vėl pasirinktumėte tą patį variantą ir architektūrą, kad plėtiniai toliau tiktų.
Ar pakanka išpakuoti naują PHP aplanką?
Ne. IIS php-cgi.exe procesus kurį laiką laiko aktyvius. Perkraukite programų baseinus arba iš naujo paleiskite IIS ir patikrinkite, ar nebeveikia seni procesai.
Ar viename IIS galiu valdyti kelias PHP versijas?
Taip, per kelis FastCGI įrašus ir tvarkyklių priskyrimus kiekvienai svetainei. Tačiau tai didina priežiūros apimtį. Kiekvienam diegimui reikia savo atnaujinimo ir savo kontrolės.
Ar PHP2Shell paveikia PHP sistemoje Windows?
Pažeidžiamumai yra pačiame PHP. IIS PHP paprastai veikia kaip php-cgi, kurį PHP projektas aiškiai priskiria paveiktiems veikimo režimams. Todėl Windows serverius traktuokite taip pat skubiai kaip Linux serverius.