Trumpai: Virtualus pataisymas PHP aplinkai užpildo laiką, kol įdiegiamas tikrasis atnaujinimas. Tam derename žiniatinklio programų ugniasienės (WAF) taisykles su pereinamosiomis priemonėmis, kurias php.net paskelbė dėl PHP2Shell, ir iš karto nustatome kelią iki įprastos pataisos. Visiškos apsaugos tai nesuteikia, bet pereinamuoju laikotarpiu riziką sumažina.
Kada virtualus pataisymas PHP aplinkai prasmingas
BSI dėl PHP2Shell rekomenduoja nedelsiant atnaujinti, o jei tai neįmanoma, žiniatinklio serverius laikinai atjungti nuo tinklo. Daugeliui įmonių nė viena iš šių galimybių iš karto nėra įgyvendinama: parduotuvė turi likti pasiekiama, nuosavam sprendimui prieš atnaujinimą reikia bandymo arba serveris veikia su PHP 8.1 ar senesne versija, kuriai oficialių atnaujinimų nebėra.
Šiais atvejais virtualus pataisymas yra tiltas. Jis nepakeičia sprendimo, ar tikslingiau būtų dirbti be tinklo. Šį svarstymą atliekate jūs, mes pateikiame techninį vertinimą.
Kodėl vien WAF nepakanka
Cloudflare pranešė apie pastebėtus atakos bandymus ir išleido apsaugos taisykles, bet perspėja, kad vien taisyklių pagal užklausos duomenis nepakanka. Priežastis glūdi spragų pobūdyje. Esant CVE-2026-109618, atminties pritrūkimo (Out-of-Memory) būsena gali nutraukti PHP, kai užklausos duomenys inicializuoti tik iš dalies. Esant CVE-2026-109619, vidinė būsena gali išlikti atlaisvinus atmintį ir būti panaudota vėlesnės užklausos tame pačiame darbiniame procese (worker). Tokios klaidos priklauso nuo serverio būsenos, o ne vien nuo pavienės užklausos turinio.
Todėl remiamės keliais sluoksniais: WAF taisyklės prieš serverį, pereinamosios priemonės pačiame PHP ir sustiprinta serverio stebėsena. Kiekvienas sluoksnis sulaiko dalį, nė vienas vienas nepakanka. Kartu jie suteikia laiko tvarkingai įdiegti atnaujinimą.
Pereinamosios priemonės pagal php.net
php.net nurodo kelis nustatymus, mažinančius riziką, aiškiai nesuteikdami visiškos apsaugos. Svarbu, kad programos šių reikšmių negalėtų perrašyti. Pavyzdys PHP-FPM baseinui su įkėlimais:
; PHP2Shell pereinamosios priemonės (ne visiška apsauga), po to paleisti iš naujo visus darbinius procesus
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 32M
php_admin_value[upload_max_filesize] = 30M
php_admin_flag[session.upload_progress.enabled] = off
; tik PHP 8.5:
php_admin_flag[fatal_error_backtraces] = off
Be įkėlimų php.net rekomenduoja post_max_size = 8M. Kadangi memory_limit panaikinamas, privaloma nustatyti atminties ribą konteinerio ar cgroup lygiu, o ne per RLIMIT_AS ar RLIMIT_DATA. Nustatymą session.upload_progress.enabled=0 reikia rašyti į php.ini, FPM baseiną ar serverio konfigūraciją, o ne į ini_set() ar .user.ini. Tai kartu yra priemonė pastabai dėl CVE-2026-115560. Visos priemonės apžvelgiamos puslapyje Skubios priemonės, kai dar negalite pataisyti.
Pereinamosios priemonės veikia tik po visų PHP darbinių procesų paleidimo iš naujo. Be to, jos saugo tik nuo būsimų atakų: ar anksčiau kas nors jau įsilaužė, jos neatsako.
Kada geriau dirbti be tinklo
Virtualus pataisymas ne kiekvienoje situacijoje yra tinkamas atsakymas. Esant kai kurioms aplinkybėms patariame sekti BSI ir žiniatinklio serverį laikinai atjungti nuo tinklo, kol pataisoma:
- serveris veikia su Apache ir mod_php, kur PHP komanda riziką vertina didžiausią ir išnaudojimas parodytas dar prieš pradedant vykdyti programos kodą
- serveryje yra ypač saugotini duomenys, pavyzdžiui, sveikatos, mandantų ar mokėjimo duomenys
- nėra galimybės pereinamųjų priemonių nustatyti tvirtai serverio konfigūracijoje, pavyzdžiui, esant tam tikriems bendro talpinimo paketams
- jau yra požymių, kad serveris buvo užpultas
Laikinas darbas be tinklo nereiškia, kad jūsų svetainė nulaužta. Kai kurie teikėjai svetaines atjungė iš atsargumo. Trumpas, dalykiškas informacinis puslapis lankytojams tuomet dažniausiai geresnis sprendimas nei nepaaiškintas sutrikimas.
Kaip PHP SOS padeda konkrečiai?
- Patikrinti padėtį: Surašome PHP versijas, veikimo režimus ir esamus apsaugos sluoksnius, tokius kaip CDN, WAF ar atvirkštinis tarpinis serveris (reverse proxy). Esant mod_php nurodome padidėjusią riziką, kurią ten mato PHP komanda.
- Sukurti sluoksnius: Įjungiame arba papildome WAF taisykles, pereinamąsias priemones nustatome tvirtai serverio konfigūracijoje ir atmintį ribojame per konteinerį ar cgroup. Nginx konfigūracijoms remiamės puslapiu Nginx su PHP-FPM apsauga.
- Paleisti iš naujo ir išbandyti: Visi PHP procesai paleidžiami iš naujo, po to tikriname įkėlimus, formas, prisijungimą ir kasą.
- Stebėti: Pereinamuoju laikotarpiu sustiprintai stebime darbinių procesų strigtis, atminties šuolius ir neįprastus procesus.
- Planuoti pataisą: Nustatome, kada ir kaip bus įdiegtas įprastas atnaujinimas, ir jį įgyvendiname per PHP pataisų paslaugą.
Ką gausite, ko mums reikia ir ko neapsiimame
Gaunate visų nustatytų taisyklių ir nustatymų dokumentaciją su pagrindimu, bandymų rezultatus ir terminų bei priemonių planą tikrajai pataisai. Iš jūsų mums reikia serverio ar skydelio prieigos, prieigos prie CDN ar WAF, jei yra, techninio kontaktinio asmens ir duomenų apie jūsų programų įkėlimo funkcijas.
Neapsiimame, kad virtualus pataisymas užkirs kelią atakai. Jis riziką sumažina ribotam laikui. Esant PHP 8.1 ir senesnėms versijoms tai nėra nuolatinė būsena; čia į planą priklauso perėjimas prie palaikomos versijos.
Dažni klausimai
Kas yra virtualus pataisymas?
Virtualus pataisymas reiškia žinomą spragą apsaugoti prieš programą, užuot keitus patį kodą. Dažniausiai tai daroma per žiniatinklio programų ugniasienę (WAF) arba konfigūracijos pakeitimus. Tai pereinamoji priemonė, o ne atnaujinimo pakaitalas.
Ar mano CDN teikėjo WAF pakanka prieš PHP2Shell?
Vienos paprastai nepakanka. Cloudflare išleido apsaugos taisykles, bet pats perspėja, kad vien taisyklių pagal užklausos duomenis nepakanka. WAF yra papildomas sluoksnis šalia pereinamųjų priemonių ir pataisos.
Kiek laiko galiu pasikliauti virtualiu pataisymu?
Kuo trumpiau. Jis turi užpildyti laiką iki įprasto atnaujinimo, pavyzdžiui, kol atsiras laisvas priežiūros langas arba bus išbandyta programa. Esant PHP 8.1 ir senesnėms versijoms prie to priklauso ir migracijos planas.
Ar pereinamosios priemonės gali sutrikdyti mano svetainę?
Taip, tai įmanoma. Mažesnės įkėlimo ribos gali neleisti įkelti didelių failų, o sesijos įkėlimo eigos (session upload progress) išjungimas veikia įkėlimo eigos rodiklius. Po kiekvieno pakeitimo išbandome svarbiausias funkcijas.