Pe scurt: Pe Windows cu IIS, PHP rulează de obicei ca php-cgi.exe prin FastCGI, un mod de operare afectat explicit de PHP2Shell. O actualizare PHP IIS constă în trei pași: găsiți toate instalările PHP, le înlocuiți cu o versiune remediată și reciclați application pool-urile. Gestionare de pachete și backporturi ca pe Linux nu există aici, de regulă.
Cum rulează PHP sub IIS
Pe serverele Windows, IIS conectează PHP prin modulul FastCGI. Pentru fiecare versiune PHP există o intrare FastCGI care indică un php-cgi.exe și o atribuire de handler care direcționează acolo fișierele cu extensia .php. IIS pornește la nevoie mai multe procese php-cgi și le menține active pentru cererile următoare.
Spre deosebire de Linux, PHP nu provine aici de obicei dintr-un gestionar de pachete, ci dintr-o arhivă ZIP a build-urilor Windows ale proiectului PHP, ca parte a unei aplicații specializate sau prin instalatoare mai vechi. Aceasta înseamnă: actualizările nu au loc automat și nu există backporturi ale unui distribuitor. Decisivă este versiunea fișierelor instalate.
Ce înseamnă PHP2Shell pentru serverele Windows
PHP2Shell cuprinde CVE-2026-109618 și CVE-2026-109619 din PHP însuși, fiecare cu CVSS v4.0 9.2. Ambele permit executarea de cod fără autentificare. Proiectul PHP menționează explicit php-cgi printre modurile de operare afectate. Sunt remediate PHP 8.5.12, 8.4.27, 8.3.36 și 8.2.35.
Pentru PHP 8.1 și mai vechi nu mai există actualizări oficiale. Serverele Windows cu aplicații specializate rulează, din experiență, adesea pe astfel de versiuni, deoarece aplicația cere o anumită versiune. Aici, pe lângă măsurile provizorii, este necesară o clarificare cu producătorul aplicației. Contextul acestui mod de operare găsiți la php-cgi: o moștenire cu risc.
Actualizare PHP IIS: găsiți instalările
Comenzile PowerShell următoare doar citesc. Ele arată ce instalări PHP folosește IIS și ce versiune au. Căile sunt exemple.
# Intrările FastCGI din IIS: ce php-cgi.exe este folosit?
& "$env:windir\system32\inetsrv\appcmd.exe" list config -section:system.webServer/fastCgi
# Versiunea fiecărei instalări găsite (calea ca exemplu)
& "C:\PHP\8.3\php.exe" -v
# Procesele php-cgi în execuție, cu ora de pornire
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Căutați suplimentar pe toate unitățile alte php-cgi.exe, deoarece aplicațiile specializate aduc uneori copii proprii. Notați pentru fiecare instalare versiunea, varianta (Thread Safe sau Non Thread Safe) și arhitectura.
Instalați actualizarea și reciclați application pool-urile
Descărcați versiunea remediată din build-urile oficiale Windows ale proiectului PHP, la care trimite php.net, în aceeași variantă și arhitectură. S-a dovedit util să dezarhivați noua versiune într-un folder nou, să preluați php.ini existent și extensiile necesare și apoi să treceți intrarea FastCGI pe noua cale. Astfel, vechea stare rămâne disponibilă pentru o eventuală revenire.
# Reciclați application pool-ul (numele ca exemplu)
Import-Module WebAdministration
Restart-WebAppPool -Name "Intranet"
# Alternativ, reporniți toate serviciile IIS
iisreset
# Control: au pornit toate procesele php-cgi după actualizare?
Get-Process php-cgi -ErrorAction SilentlyContinue | Select-Object Id, StartTime, Path
Fiecare proces php-cgi trebuie să aibă o oră de pornire ulterioară actualizării și să indice noua cale. Testați apoi site-urile. Eliminați vechiul folder PHP imediat ce noua stare rulează stabil, pentru ca el să nu fie atașat din nou din greșeală.
Fișierele noi din folderul PHP nu sunt suficiente cât timp procese php-cgi vechi rulează. Abia după reciclarea pool-urilor sau după o repornire IIS, patchul este eficient.
Măsuri provizorii în php.ini
Dacă o instalare nu poate fi actualizată imediat, php.net recomandă măsuri provizorii fără protecție completă. Sub IIS setați valorile în php.ini central al instalării respective. Fișierele .user.ini și ini_set() nu sunt suficiente, potrivit php.net.
; php.ini al instalării afectate
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
Cu funcție de încărcare, php.net indică post_max_size = 32M. Pe PHP 8.5 se adaugă fatal_error_backtraces=0. Pentru ca site-urile să nu modifice valorile prin fișiere proprii .user.ini, user_ini.filename poate fi lăsat gol în php.ini central; verificați înainte dacă aplicațiile depind de el. Apoi reciclați pool-urile. BSI (Oficiul Federal German pentru Securitatea Informațiilor) recomandă scoaterea temporară din rețea a serverelor web dacă actualizarea nu este posibilă imediat. Alte setări explică articolul Configurarea sigură a php.ini.
După actualizare
Un patch nu elimină programele malițioase introduse anterior. Păstrați jurnalele IIS începând cu 20.10.2026, verificați directoarele web pentru fișiere script noi și controlați sarcinile programate și conturile locale de utilizator pentru elemente necunoscute. Dacă serverul rulează într-un domeniu, face parte din verificare și o privire asupra autentificărilor.
Fiți atenți suplimentar la drepturile identităților application pool-urilor. Dacă un pool rulează cu un cont care are drepturi de scriere asupra întregului director web sau chiar drepturi administrative, un atacator poate produce mult mai multă pagubă după o intruziune reușită. Util este o identitate proprie, restricționată, pentru fiecare pool, cu drepturi de scriere doar acolo unde aplicația chiar are nevoie de ele, de exemplu în folderul de încărcare sau de cache. În aceste foldere, IIS nu ar trebui să execute fișiere PHP; aceasta se poate reglementa prin atribuirile de handleri ale folderului respectiv. Verificați și dacă în directorul web se găsesc fișiere vechi de test și de instalare, precum rezultate phpinfo, și eliminați-le.
Cum ajută PHP SOS concret?
- Găsim toate instalările PHP de pe serverele dumneavoastră Windows, inclusiv copiile din aplicațiile specializate.
- Prin serviciul de patch PHP înlocuim PHP, reciclăm pool-urile și documentăm versiunea și orele proceselor.
- La versiuni vechi clarificăm împreună cu dumneavoastră și cu producătorul aplicației calea către migrarea la o versiune PHP acceptată.
- Verificăm serverele pentru urme ale unui atac și salvăm jurnalele.
Întrebări frecvente
Ce variantă PHP am nevoie pentru IIS?
Pentru IIS cu FastCGI se folosește de obicei varianta Non-Thread-Safe (NTS). La actualizare, aveți grijă să alegeți din nou aceeași variantă și arhitectură, pentru ca extensiile să se potrivească în continuare.
Este suficient să dezarhivez noul folder PHP?
Nu. IIS menține active procesele php-cgi.exe o vreme. Reciclați application pool-urile sau reporniți IIS și verificați că nu mai rulează procese vechi.
Pot rula mai multe versiuni PHP pe un IIS?
Da, prin mai multe intrări FastCGI și atribuiri de handleri pentru fiecare site. Aceasta crește însă efortul de întreținere. Fiecare instalare are nevoie de propria actualizare și de propriul control.
Este PHP pe Windows afectat de PHP2Shell?
Vulnerabilitățile se află în PHP însuși. Sub IIS, PHP rulează de regulă ca php-cgi, pe care proiectul PHP îl include explicit printre modurile de operare afectate. Tratați de aceea serverele Windows la fel de urgent ca pe cele Linux.