Ukratko: Ažuriranje WordPressa ne pomaže protiv PHP ranjivosti PHP2Shell, jer pogreška nije u WordPressu, nego u PHP-u, softveru na poslužitelju koji izvršava WordPress. Prema Dr. Webu WordPress.org zato ne planira ni vlastito ažuriranje. Zaštititi može samo PHP ažuriranje na poslužitelju s ponovnim pokretanjem svih PHP procesa. To u pravilu instalira Vaš pružatelj hostinga ili operater poslužitelja.
Povod: „Pa sve smo ažurirali“
Nakon prvih naslova o PHP2Shellu mnogi su operateri učinili ono što je nadohvat ruke: otvoriti WordPress nadzornu ploču, kliknuti „Ažuriraj sada“, a dodatke i teme odmah uz to. Nakon toga je sve zeleno i osjećaj govori: gotovo.
Kod ove ranjivosti osjećaj vara. Razlog nije WordPress, nego mjesto na kojem je pogreška. I Cloudflare u svojoj objavi upozorava da ažuriranje koda aplikacije ili dodataka ne otklanja ranjivosti.
WordPress ažuriranje i PHP ranjivost: model slojeva
WordPress web-stranica sastoji se od više slojeva koji se nadograđuju jedan na drugi. Svaki sloj ima vlastita ažuriranja i često vlastite odgovorne osobe:
| Sloj | Primjer | Tko tipično ažurira | Pogođen PHP2Shellom? |
|---|---|---|---|
| Operacijski sustav | Debian, Ubuntu, AlmaLinux | pružatelj hostinga ili administrator poslužitelja | ne, ali često isporučuje PHP paket |
| Web-poslužitelj | Apache, Nginx, LiteSpeed | pružatelj hostinga ili administrator poslužitelja | način rada utječe na rizik |
| PHP izvršno okruženje | PHP-FPM, mod_php | pružatelj hostinga ili administrator poslužitelja | da, ovdje je ranjivost |
| WordPress jezgra | WordPress | operater ili agencija | ne |
| Dodaci i teme | WooCommerce, page builder | operater ili agencija | ne |
Gumb za ažuriranje u nadzornoj ploči doseže samo donja dva retka. PHP izvršno okruženje leži ispod njih i WordPressu je nevidljivo. Kako se drugi sustavi oslanjaju na PHP, opisuje članak CMS-ovi i shopovi na PHP-u.
Zašto WordPress ne može zatvoriti ranjivost
Moglo bi se pomisliti da WordPress može „programirati oko toga“. Kod PHP2Shella to ne ide iz dva razloga.
Prvo, obje pogreške leže u načinu na koji PHP obrađuje zahtjeve i nakon toga čisti. To se događa neovisno o tome koji program radi u PHP-u. Drugo, PHP tim je za Apache s mod_php pokazao exploit koji djeluje prije nego što se uopće izvrši kod aplikacije. WordPress, njegovi dodaci i svaki sigurnosni dodatak tada uopće ne dolaze na red.
Iz istog razloga ne pomaže ni „dodatak za ojačavanje“ koji mijenja postavke putem ini_set(). php.net izričito odvraća od toga da se prijelazne mjere zadaju na taj način.
A kod upravljanog WordPressa?
Kod ponuda upravljanog WordPressa pružatelj se često brine ne samo o WordPress ažuriranjima nego i o poslužitelju ispod njega. Za PHP2Shell to je prednost, ali ne i automatizam. Pitajte konkretno je li PHP ažuriranje instalirano i jesu li svi PHP procesi ponovno pokrenuti. Izjava „Održavamo Vaš WordPress aktualnim“ ne odgovara na to pitanje.
Mnogo web-stranica, jedna PHP instalacija
Agencije i tvrtke s više web-stranica trebale bi znati jednu posebnost: na jednom poslužitelju mnoge WordPress instalacije često dijele istu PHP verziju. Ako je ona nezakrpana, pogođene su sve, bez obzira na to koliko je dobro održavana pojedina web-stranica. Obrnuto, PHP ažuriranje štiti sve instalacije odjednom, pod uvjetom da se nakon toga ponovno pokrenu svi pripadajući PHP procesi. Tko paralelno vodi više PHP verzija, mora svaku ažurirati zasebno.
Zelena WordPress nadzorna ploča ne govori ništa o PHP2Shellu. Odlučujuće su razina zakrpe PHP-a na poslužitelju i ponovno pokretanje svih PHP procesa.
Ispravno čitati PHP verziju u WordPressu
WordPress prikazuje PHP verziju: u nadzornoj ploči pod Alati, Zdravlje web-mjesta (Site Health), u području Info u odjeljku Poslužitelj. To je dobar prvi pokazatelj, ali ne i dokaz.
Ako tamo stoji grana poput 8.1 ili starija, to je jasan znak upozorenja, jer za nju više nema službenih ažuriranja. Ako tamo stoji 8.2.35, 8.3.36, 8.4.27 ili 8.5.12, instalirano je ispravljeno stanje. Ako tamo stoji starija oznaka podržane grane, backport ipak može biti instaliran. Distribucije i pružatelji hostinga pritom često ne mijenjaju broj. Jasnoću daje samo potvrda pružatelja hostinga ili pogled u changelog paketa. Kako to ide, navodi stranica Provjera PHP verzije i razine zakrpe.
Što bi operateri WordPressa umjesto toga trebali učiniti
- Pitati pružatelja hostinga ili operatera poslužitelja: Je li PHP zakrpan, kada i jesu li svi PHP procesi ponovno pokrenuti? Odgovor pisanim putem.
- Provjeriti PHP granu: Ako web-stranica radi na 8.1 ili starijem, planirati prelazak na podržanu granu. Koju verziju podržava Vaša verzija WordPressa, stoji u zahtjevima sustava na wordpress.org. Promjenu u izborniku za korisnike opisuje Promjena PHP verzije u korisničkom području hostinga.
- Provjeriti tragove: nove PHP datoteke u
wp-content/uploads, nepoznati administratorski računi, tuđi unosi umu-plugins. Tipična skrovišta opisuje stranica WordPress i PHP2Shell. - WordPress ipak održavati aktualnim: Jezgra, dodaci i teme zatvaraju druge ranjivosti. To ostaje obveza, samo druga.
- Razjasniti odgovornost: Ako web-stranicu vodi agencija, zabilježiti je li ona odgovorna i za PHP ili samo za WordPress.
Upravo posljednja točka često stvara praznine. Agencija održava WordPress, pružatelj hostinga poslužitelj, a svatko vjeruje da drugi ima PHP2Shell na oku.
Kako PHP SOS konkretno pomaže?
- Razjasniti slojeve: Utvrđujemo tko je kod Vaše WordPress web-stranice odgovoran za koji sloj.
- Ažurirati PHP: Na vlastitim ili upravljanim poslužiteljima instaliramo PHP ažuriranje i ponovno pokrećemo sve procese.
- Provjeriti WordPress: Tražimo tragove napada u datotekama, bazi podataka i računima.
- Dokaz: Razinu zakrpe dobivate pisanim putem, i za prosljeđivanje agenciji ili kupcima.
Postupak opisuje PHP usluga zakrpa.
Zaključak
Ažuriranje WordPressa je dobro održavanje, ali protiv PHP2Shella pogrešan sloj. Ranjivost sjedi jedan kat niže, u PHP-u na poslužitelju. Tko to razumije, postavlja pravo pitanje na pravom mjestu: Je li PHP zakrpan, ponovno pokrenut i dokazan?
Česta pitanja
Izdaje li WordPress sigurnosno ažuriranje protiv PHP2Shella?
Prema Dr. Webu WordPress.org ne planira ažuriranje protiv PHP2Shella, jer ranjivost leži u PHP interpreteru na poslužitelju. Pomaže samo PHP ažuriranje koje provodi pružatelj hostinga ili operater poslužitelja.
Gdje u WordPressu vidim PHP verziju?
U nadzornoj ploči pod Alati, Zdravlje web-mjesta (Site Health), u području Info u odjeljku Poslužitelj. Prikazani broj ipak ne govori sa sigurnošću je li zakrpa instalirana, jer pružatelji hostinga ispravke često ugrađuju kao backport bez novog broja verzije.
Štiti li sigurnosni dodatak od PHP2Shella?
Samo vrlo ograničeno. Dodatak i sam radi u PHP-u i postaje aktivan tek kad je WordPress učitan. Kod Apachea s mod_php prema PHP timu pokazan je exploit prije nego što se uopće izvrši kod aplikacije. Tamo dodatak ne može intervenirati.
Trebam li ipak ažurirati WordPress?
Da. Aktualne verzije WordPressa, tema i dodataka zatvaraju druge ranjivosti i dio su dobrog održavanja. Samo ne rješavaju problem PHP2Shell.