Trumpai: WordPress atnaujinimas nepadeda nuo PHP spragos PHP2Shell, nes klaida slypi ne WordPress, o PHP, serverio programinėje įrangoje, kuri WordPress vykdo. Pasak Dr. Web, WordPress.org todėl neplanuoja ir savo atnaujinimo. Apsaugoti gali tik PHP atnaujinimas serveryje su visų PHP procesų paleidimu iš naujo. Jį paprastai įdiegia jūsų talpintojas ar serverio operatorius.
Pradžia: „Juk viską atnaujinome“
Po pirmųjų antraščių apie PHP2Shell daugelis operatorių padarė tai, kas pati savaime peršasi: atidarė WordPress valdymo skydelį, spustelėjo „Atnaujinti dabar“, o kartu ir įskiepius bei temas. Po to viskas žalia, o jausmas sako: padaryta.
Su šia spraga jausmas apgaudinėja. Tai ne WordPress kaltė, o priklauso nuo to, kur yra klaida. Ir Cloudflare savo pranešime atkreipia dėmesį, kad programos kodo ar įskiepių atnaujinimas spragų neištaiso.
WordPress atnaujinimas ir PHP spraga: sluoksnių modelis
WordPress svetainę sudaro keli vienas ant kito pastatyti sluoksniai. Kiekvienas sluoksnis turi savus atnaujinimus ir dažnai savus atsakingus asmenis:
| Sluoksnis | Pavyzdys | Kas paprastai atnaujina | Ar PHP2Shell paveikia? |
|---|---|---|---|
| Operacinė sistema | Debian, Ubuntu, AlmaLinux | talpintojas ar serverio administratorius | ne, bet dažnai pateikia PHP paketą |
| Žiniatinklio serveris | Apache, Nginx, LiteSpeed | talpintojas ar serverio administratorius | veikimo režimas veikia riziką |
| PHP vykdymo aplinka | PHP-FPM, mod_php | talpintojas ar serverio administratorius | taip, čia yra spraga |
| WordPress branduolys | WordPress | operatorius ar agentūra | ne |
| Įskiepiai ir temos | WooCommerce, puslapių kūrimo įrankis | operatorius ar agentūra | ne |
Atnaujinimo mygtukas valdymo skydelyje pasiekia tik apatines dvi eilutes. PHP vykdymo aplinka yra po jomis ir WordPress jos nemato. Kaip kitos sistemos remiasi PHP, aprašo straipsnis CMS ir parduotuvės PHP pagrindu.
Kodėl WordPress spragos uždaryti negali
Galima manyti, kad WordPress galėtų „užprogramuoti aplink“. Su PHP2Shell tai neveikia dėl dviejų priežasčių.
Pirma, abi klaidos slypi tame, kaip PHP apdoroja užklausas ir paskui sutvarko po savęs. Tai vyksta nepriklausomai nuo to, kokia programa veikia PHP. Antra, PHP komanda Apache su mod_php parodė išnaudojimą, kuris suveikia dar prieš vykdant bet kokį programos kodą. WordPress, jo įskiepiai ir bet kuris saugumo įskiepis tada išvis neprieina prie žodžio.
Dėl tos pačios priežasties nepadeda ir joks „sutvirtinimo įskiepis“, kuris nustatymus keičia per ini_set(). php.net aiškiai atkalbinėja pereinamąsias priemones taikyti šiuo keliu.
O kaip su valdomu WordPress?
Valdomo WordPress (Managed WordPress) pasiūlymuose teikėjas dažnai rūpinasi ne tik WordPress atnaujinimais, bet ir serveriu po juo. PHP2Shell atveju tai pranašumas, bet ne automatizmas. Paklauskite konkrečiai, ar PHP atnaujinimas įdiegtas ir visi PHP procesai paleisti iš naujo. Teiginys „Mes palaikome jūsų WordPress aktualų“ į šį klausimą neatsako.
Daug svetainių, vienas PHP diegimas
Agentūros ir įmonės su keliomis svetainėmis turėtų žinoti vieną ypatumą: viename serveryje daug WordPress diegimų dažnai dalijasi ta pačia PHP versija. Jei ji nepataisyta, paveikti visi, nepaisant to, kaip gerai prižiūrima kiekviena atskira svetainė. Atvirkščiai, PHP atnaujinimas apsaugo visus diegimus iš karto, jei po to visi susiję PHP procesai paleidžiami iš naujo. Kas lygiagrečiai eksploatuoja kelias PHP versijas, kiekvieną turi atnaujinti atskirai.
Žalias WordPress valdymo skydelis apie PHP2Shell nieko nesako. Lemia PHP pataisų būsena serveryje ir visų PHP procesų paleidimas iš naujo.
Kaip teisingai skaityti PHP versiją WordPress
WordPress rodo PHP versiją: valdymo skydelyje skyriuje Įrankiai, Svetainės būklė, ataskaitos dalyje, skirsnyje Serveris. Tai geras pirmas požymis, bet ne įrodymas.
Jei ten nurodyta šaka kaip 8.1 ar senesnė, tai aiškus įspėjamasis ženklas, nes joms oficialių atnaujinimų nebėra. Jei ten 8.2.35, 8.3.36, 8.4.27 arba 8.5.12, ištaisyta būsena įdiegta. Jei ten senesnis palaikomos šakos numeris, vis tiek gali būti įdiegtas atgalinis perkėlimas. Distribucijos ir talpintojai numerio dažnai nekeičia. Aiškumą suteikia tik talpintojo patvirtinimas arba žvilgsnis į paketo pakeitimų žurnalą. Kaip tai daroma, rasite skyrelyje PHP versijos ir pataisų būsenos tikrinimas.
Ką WordPress operatoriai turėtų daryti vietoj to
- Paklausti talpintojo ar serverio operatoriaus: ar PHP pataisytas, kada, ir ar visi PHP procesai paleisti iš naujo? Atsakymas raštu.
- Patikrinti PHP šaką: jei svetainė veikia su 8.1 ar senesne, planuoti perėjimą į palaikomą šaką. Kokią versiją palaiko jūsų WordPress versija, rašoma sistemos reikalavimuose wordpress.org. Perėjimą kliento meniu aprašo PHP versijos keitimas talpinimo kliento zonoje.
- Tikrinti dėl pėdsakų: nauji PHP failai
wp-content/uploads, nežinomos administratorių paskyros, svetimi įrašaimu-plugins. Tipines slėptuves aprašo puslapis WordPress ir PHP2Shell. - WordPress vis tiek laikyti aktualų: branduolys, įskiepiai ir temos uždaro kitas spragas. Tai išlieka pareiga, tik kita.
- Išsiaiškinti atsakomybę: jei svetainę prižiūri agentūra, užfiksuoti, ar ji atsako ir už PHP, ar tik už WordPress.
Būtent paskutinis punktas dažnai sukuria spragų. Agentūra prižiūri WordPress, talpintojas serverį, ir kiekvienas mano, kad PHP2Shell akiratyje turi kitas.
Kaip PHP SOS padeda konkrečiai?
- Išsiaiškinti sluoksnius: Nustatome, kas jūsų WordPress svetainėje už kurį sluoksnį atsakingas.
- Atnaujinti PHP: Nuosavuose ar valdomuose serveriuose įdiegiame PHP atnaujinimą ir iš naujo paleidžiame visus procesus.
- Patikrinti WordPress: Ieškome atakos pėdsakų failuose, duomenų bazėje ir paskyrose.
- Įrodymas: Gaunate pataisų būseną raštu, taip pat perduoti agentūrai ar klientams.
Eigą aprašo PHP pataisų paslauga.
Išvada
WordPress atnaujinimas yra gera priežiūra, bet dėl PHP2Shell netinkamas sluoksnis. Spraga sėdi aukštu žemiau, PHP serveryje. Kas tai supranta, užduoda tinkamą klausimą tinkamai vietai: ar PHP pataisytas, paleistas iš naujo ir įrodytas?
Dažni klausimai
Ar WordPress išleidžia saugumo atnaujinimą nuo PHP2Shell?
Pasak Dr. Web, WordPress.org neplanuoja atnaujinimo nuo PHP2Shell, nes spraga yra PHP interpretatoriuje serveryje. Padeda tik PHP atnaujinimas, kurį atlieka talpintojas ar serverio operatorius.
Kur WordPress matau PHP versiją?
Valdymo skydelyje skyriuje Įrankiai, Svetainės būklė (Site Health), ataskaitos dalyje, skirsnyje Serveris. Rodomas numeris tačiau tiksliai nesako, ar pataisa įdiegta, nes talpintojai taisymus dažnai įdiegia kaip atgalinį perkėlimą be naujo versijos numerio.
Ar saugumo įskiepis saugo nuo PHP2Shell?
Tik labai ribotai. Įskiepis pats veikia PHP ir aktyvuojamas tik tada, kai WordPress įkeltas. Esant Apache su mod_php, pasak PHP komandos, išnaudojimas parodytas dar prieš pradedant vykdyti programos kodą. Ten įskiepis įsikišti negali.
Ar vis tiek turėčiau atnaujinti WordPress?
Taip. Aktualios WordPress, temų ir įskiepių versijos uždaro kitas spragas ir yra geros priežiūros dalis. Jos tik neišsprendžia PHP2Shell problemos.