Ukratko: Za provjeru verzije PHP-a nije dovoljno pokrenuti php -v. Morate znati koju verziju PHP-a web-poslužitelj zaista koristi, sadrži li paket ispravak, i kao backport sa starim brojem, te jesu li nakon ažuriranja svi procesi ponovno pokrenuti. PHP2Shell je ispravljen u 8.5.12, 8.4.27, 8.3.36 i 8.2.35.
Zašto sam broj verzije nije dovoljan
Za PHP2Shell postoji jasan popis ispravljenih verzija. U praksi do pogrešne procjene ipak vode tri situacije:
- Više instalacija: Naredbeni redak prikazuje PHP 8.3, ali web-stranica radi preko poola s PHP-om 8.1.
- Backportovi: Distribucije i pružatelji hostinga ponekad ugrađuju ispravke u postojeće pakete. Tada primjerice Plesk i dalje prikazuje 8.2.34 iako je zakrpano.
- Stari procesi: Nove datoteke leže na disku, ali pokrenuti workeri potječu još od prije.
Za upravu i netehničke osobe pomaže jednostavno pravilo: ne pitajte samo „Koju verziju PHP-a imamo?“, nego „Je li PHP2Shell zatvoren na svim poslužiteljima i po čemu to vidimo?“. Pouzdan odgovor sadrži tri dokaza: verziju ili backport, stanje paketa i trenutak ponovnog pokretanja.
Tehnička provjera zato ima tri koraka: verzija, stanje paketa, pokrenuti procesi. Naredbe u nastavku su isključivo čitajuće. Nazivi paketa i usluga razlikuju se po distribuciji, izvoru PHP-a i hosting sučelju; primjeri polaze od PHP-a 8.3.
Provjera verzije PHP-a u naredbenom retku
php -v # verzija naredbenog retka
ls /etc/php/ 2>/dev/null # Debian/Ubuntu: instalirane grane
php-fpm8.3 -v # verzija FPM binarne datoteke (naziv ovisi o distribuciji)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"
Na RHEL-u, AlmaLinuxu ili Rockyju FPM binarna datoteka obično se zove php-fpm; kod Software Collections ili vanjskih izvora dodatne verzije leže u vlastitim putanjama. Plesk i cPanel donose vlastite PHP instalacije koje postoje uz sistemski PHP. Kako tamo postupiti, opisujemo na stranicama za Plesk i cPanel.
Koju verziju PHP-a web-stranica koristi u web kontekstu, najpouzdanije vidite u konfiguraciji poola ili VirtualHosta ili u hosting sučelju. Prikazuje je i phpinfo stranica; postavite je samo nakratko, sa zaštitom pristupa i slučajnim imenom te je odmah nakon toga obrišite.
Na shared hostingu obično nemate pristup naredbenom retku. Tada hosting sučelje prikazuje postavljenu verziju PHP-a po web-stranici. Je li backport ugrađen i ponovno pokrenut, tamo se rijetko vidi. Ovdje je pouzdan put pisana potvrda pružatelja hostinga.
Provjera stanja paketa i backportova
Stanje paketa pokazuje što je Vaša distribucija zaista isporučila:
# Debian/Ubuntu
apt policy php8.3-fpm
apt changelog php8.3-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
# RHEL, AlmaLinux, Rocky, Fedora
dnf info php-fpm
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
Ako je jedan od CVE brojeva u changelogu, backport je sadržan u instaliranom paketu. Ako unosa nema, to još nije dokaz ranjivosti: neki održavatelji paketa drukčije formuliraju changelogove. Tada usporedite verziju paketa sa sigurnosnim objavama Vaše distribucije ili pitajte pružatelja. Predložak za taj upit pronaći ćete na stranici Kako pitati pružatelja hostinga za stanje zakrpe.
Važno: provjerite svaki instalirani PHP paket, a ne samo prvi. Na poslužiteljima s više grana često je jedna zakrpana, a druga nije.
Radi li nova verzija doista?
Ažuriranje djeluje tek kad su svi PHP procesi ponovno pokrenuti. Usporedite vrijeme pokretanja pokrenutih procesa s trenutkom ažuriranja:
ps -o pid,lstart,cmd -C php-fpm8.3 # vrijeme pokretanja FPM procesa
systemctl status php8.3-fpm # otkad usluga radi
needrestart -r l # Debian/Ubuntu, ako je instaliran: prikazuje zastarjele procese
Ako je vrijeme pokretanja prije ažuriranja, još rade stari procesi. Kod Apachea s mod_php isto vrijedi za Apache procese. Kako ispravno ponovno pokrenuti, opisuje Ponovno pokretanje PHP-FPM-a i svih workera.
Rezultat zabilježite pisano: poslužitelj, verzija PHP-a, verzija paketa, CVE u changelogu da ili ne, trenutak ponovnog pokretanja. Ta bilješka treba Vam za upravu, osiguravatelja i kasniju provjeru tragova.
Procjena rezultata
| Nalaz | Ocjena |
|---|---|
| Službena verzija 8.5.12, 8.4.27, 8.3.36 ili 8.2.35, procesi ponovno pokrenuti | PHP2Shell zatvoren |
| Starija oznaka, CVE brojevi u changelogu paketa, procesi ponovno pokrenuti | Backport ugrađen, zatvoreno |
| Starija oznaka, nema unosa u changelogu, nema potvrde | nejasno, razjasniti kod pružatelja |
| PHP 8.1 ili stariji bez potvrđenog backporta | otvoreno, potrebne su privremene mjere i migracija |
| Procesi stariji od ažuriranja | nedostaje ponovno pokretanje, ranjivost je i dalje aktivna |
Ako poslužitelj ostane u stanju „nejasno“, tretirajte ga kao otvorenog: postavite privremene mjere i pratite razjašnjenje dok ne postoji dokaz. Cjelovit pregled verzija je na stranici Koje su verzije PHP-a pogođene?.
Kako PHP SOS konkretno pomaže?
Uz uslugu PHP zakrpe preuzimamo provjeru i dokaz:
- Pronaći sve instalacije, i druge verzije iz hosting panela, Software Collections ili kontejnera.
- Ocijeniti stanje paketa: službeno izdanje, backport ili otvoreno, s dokazom iz changeloga ili od pružatelja.
- Kontrolirati ponovno pokretanje dok više ne radi nijedan proces sa starim kodom.
- Izraditi protokol provjere koji možete koristiti interno i prema trećim stranama.
Česta pitanja
Zašto php -v prikazuje drugu verziju od moje web-stranice?
Na mnogim poslužiteljima instalirano je više verzija PHP-a. Naredbeni redak koristi jednu, web-poslužitelj ili FPM pool drugu. Zato provjerite verziju koja stvarno radi u web kontekstu, primjerice putem FPM binarne datoteke ili hosting sučelja.
Kako prepoznajem backport?
Kod paketa distribucija ispravak je često u changelogu paketa, često s CVE brojem. Na Debianu i Ubuntuu pomaže apt changelog, na sustavima tipa RHEL rpm -q --changelog. Ako unosa nema, razjasnite stanje kod pružatelja.
Mogu li verziju PHP-a provjeriti u izborniku klijenta hostinga?
Da, većina sučelja prikazuje postavljenu verziju po web-stranici. Je li backport ugrađen i ponovno pokrenut, tamo obično ne vidite. Za to je pouzdan put pisana potvrda pružatelja hostinga.