Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

PHP Windowsissa ja IIS:ssä turvalliseksi

IIS:ssä PHP toimii yleensä php-cgi.exe:nä FastCGI:n kautta. Näin löydät kaikki asennukset, vaihdat PHP:n turvallisesti, kierrätät sovelluspoolit ja tarkistat tuloksen.

Tilanne Lukuaika 4 minPalvelimet ja hosting

Lyhyesti: Windowsissa IIS:n kanssa PHP toimii yleensä php-cgi.exe:nä FastCGI:n kautta, ja PHP2Shell koskee nimenomaisesti tätä toimintatapaa. PHP IIS -päivitys koostuu kolmesta vaiheesta: löydä kaikki PHP-asennukset, korvaa ne korjatulla versiolla ja kierrätä sovelluspoolit. Paketinhallintaa ja backport-korjauksia kuten Linuxissa täällä ei yleensä ole.

Miten PHP toimii IIS:ssä

Windows-palvelimilla IIS liittää PHP:n FastCGI-moduulin kautta. Jokaiselle PHP-versiolle on FastCGI-merkintä, joka osoittaa php-cgi.exe-tiedostoon, ja käsittelijäliitos, joka ohjaa .php-päätteiset tiedostot sinne. IIS käynnistää tarvittaessa useita php-cgi-prosesseja ja pitää ne aktiivisina seuraavia pyyntöjä varten.

Toisin kuin Linuxissa, PHP ei täällä yleensä tule paketinhallinnasta vaan PHP-projektin Windows-versioiden ZIP-arkistona, osana erikoissovellusta tai vanhojen asennusohjelmien kautta. Se tarkoittaa: päivitykset eivät tapahdu automaattisesti, eikä jakelun toimittajalta ole backport-korjauksia. Ratkaiseva on asennettujen tiedostojen versionumero.

Mitä PHP2Shell tarkoittaa Windows-palvelimille

PHP2Shell koostuu haavoittuvuuksista CVE-2026-109618 ja CVE-2026-109619 itse PHP:ssä, kumpikin CVSS v4.0 9.2. Molemmat sallivat koodin suorittamisen ilman kirjautumista. PHP-projekti mainitsee php-cgi:n nimenomaisesti koskeneiden toimintatapojen joukossa. Korjatut versiot ovat PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35.

PHP 8.1:lle ja sitä vanhemmille ei ole enää virallisia päivityksiä. Windows-palvelimet erikoissovelluksineen pyörivät kokemuksen mukaan usein tällaisilla versioilla, koska sovellus vaatii tietyn version. Tässä tarvitaan väliaikaisten toimenpiteiden lisäksi selvitys sovelluksen valmistajan kanssa. Tausta tälle toimintatavalle on sivulla php-cgi: riskialtis perintö.

PHP IIS -päivitys: etsi asennukset

Seuraavat PowerShell-komennot vain lukevat. Ne näyttävät, mitä PHP-asennuksia IIS käyttää ja mikä niiden versio on. Polut ovat esimerkkejä.

# FastCGI-merkinnät IIS:ssä: mitä php-cgi.exe:tä käytetään?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi

# Jokaisen löydetyn asennuksen versio (polku esimerkkinä)
& "C:\PHP\8.3\php.exe" -v

# Käynnissä olevat php-cgi-prosessit käynnistysaikoineen
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path

Etsi lisäksi kaikilta asemilta muita php-cgi.exe-tiedostoja, sillä erikoissovellukset tuovat joskus mukanaan omat kopionsa. Kirjaa jokaisesta asennuksesta versio, variantti (Thread Safe tai Non Thread Safe) ja arkkitehtuuri.

Asenna päivitys ja kierrätä sovelluspoolit

Lataa korjattu versio PHP-projektin virallisista Windows-versioista, joihin php.net linkittää, samassa variantissa ja arkkitehtuurissa. Hyväksi on osoittautunut purkaa uusi versio uuteen kansioon, ottaa nykyinen php.ini ja tarvittavat laajennukset mukaan ja vaihtaa sitten FastCGI-merkintä uuteen polkuun. Näin vanha tila säilyy paluutietä varten.

# Kierrätä sovelluspooli (nimi esimerkkinä)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"

# Vaihtoehtoisesti käynnistä kaikki IIS-palvelut uudelleen
iisreset

# Tarkistus: onko kaikki php-cgi-prosessit käynnistetty päivityksen jälkeen?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path

Jokaisen php-cgi-prosessin käynnistysajan on oltava päivityksen jälkeinen ja sen on osoitettava uuteen polkuun. Testaa sen jälkeen verkkosivustot. Poista vanha PHP-kansio, kun uusi tila toimii vakaasti, jotta sitä ei vahingossa oteta uudelleen käyttöön.

Tärkeää

Uudet tiedostot PHP-kansiossa eivät riitä, niin kauan kuin vanhat php-cgi-prosessit pyörivät. Vasta poolien kierrätyksen tai IIS:n uudelleenkäynnistyksen jälkeen korjaus on voimassa.

Väliaikaiset toimenpiteet php.ini-tiedostossa

Jos asennusta ei voi päivittää heti, php.net suosittelee väliaikaisia toimenpiteitä ilman täydellistä suojaa. IIS:ssä asetat arvot kyseisen asennuksen keskitetyssä php.ini-tiedostossa. .user.ini-tiedostot ja ini_set() eivät php.net:n mukaan riitä.

; kyseisen asennuksen php.ini
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M

Latausominaisuuden kanssa php.net mainitsee arvon post_max_size = 32M. PHP 8.5:ssä lisätään fatal_error_backtraces=0. Jotta verkkosivustot eivät muuta arvoja omilla .user.ini-tiedostoillaan, user_ini.filename voidaan jättää tyhjäksi keskitetyssä php.ini-tiedostossa; tarkista ensin, ovatko sovellukset siitä riippuvaisia. Sen jälkeen kierrätä poolit. BSI (Saksan liittovaltion tietoturvavirasto) suosittelee ottamaan verkkopalvelimet tilapäisesti pois verkosta, jos päivitystä ei voi tehdä heti. Lisäasetuksia selittää sivu php.ini turvalliseksi.

Päivityksen jälkeen

Korjaus ei poista haittaohjelmaa, joka on asennettu aiemmin. Säilytä IIS-lokit 20.10.2026 alkaen, tarkista verkkohakemistot uusien skriptitiedostojen varalta ja tarkasta ajastetut tehtävät ja paikalliset käyttäjätilit tuntemattomien varalta. Jos palvelin toimii toimialueessa, myös kirjautumisten tarkastelu kuuluu asiaan.

Kiinnitä lisäksi huomiota sovelluspoolien identiteettien oikeuksiin. Jos pooli toimii tilillä, jolla on kirjoitusoikeus koko verkkohakemistoon tai jopa ylläpitäjän oikeudet, hyökkääjä voi onnistuneen murron jälkeen aiheuttaa selvästi enemmän vahinkoa. Järkevää on oma, rajoitettu identiteetti poolia kohden, ja kirjoitusoikeudet vain siellä, missä sovellus niitä todella tarvitsee, esimerkiksi lataus- tai välimuistikansiossa. Näissä kansioissa IIS:n ei pidä suorittaa PHP-tiedostoja; sen voi säätää kyseisen kansion käsittelijäliitoksilla. Tarkista myös, onko verkkohakemistossa vanhoja testi- ja asennustiedostoja, kuten phpinfo-tulosteita, ja poista ne.

Miten PHP SOS auttaa konkreettisesti?

  • Löydämme kaikki PHP-asennukset Windows-palvelimiltanne, myös erikoissovellusten sisältämät kopiot.
  • PHP-korjauspalvelun kautta vaihdamme PHP:n, kierrätämme poolit ja dokumentoimme version ja prosessiajat.
  • Vanhojen versioiden kohdalla selvitämme kanssanne ja sovelluksen valmistajan kanssa tien siirtymään tuettuun PHP-versioon.
  • Tarkistamme palvelimet hyökkäyksen jälkien varalta ja turvaamme lokit.

Usein kysytyt kysymykset

Mitä PHP-varianttia tarvitsen IIS:ään?

IIS:ssä FastCGI:n kanssa käytetään yleensä Non-Thread-Safe-varianttia (NTS). Huolehdi päivityksessä siitä, että valitset taas saman variantin ja arkkitehtuurin, jotta laajennukset sopivat edelleen.

Riittääkö uuden PHP-kansion purkaminen?

Ei. IIS pitää php-cgi.exe-prosesseja jonkin aikaa aktiivisina. Kierrätä sovelluspoolit tai käynnistä IIS uudelleen ja tarkista, ettei vanhoja prosesseja enää pyöri.

Voinko ajaa useita PHP-versioita yhdellä IIS:llä?

Kyllä, useiden FastCGI-merkintöjen ja verkkosivustokohtaisten käsittelijäliitosten kautta. Se kuitenkin lisää ylläpidon työmäärää. Jokainen asennus tarvitsee oman päivityksen ja oman tarkistuksen.

Koskeeko PHP2Shell PHP:tä Windowsissa?

Haavoittuvuudet ovat itse PHP:ssä. IIS:ssä PHP toimii yleensä php-cgi:nä, jonka PHP-projekti lukee nimenomaisesti koskeneisiin toimintatapoihin. Kohtele siksi Windows-palvelimia yhtä kiireellisesti kuin Linux-palvelimia.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu