Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

Kaip teisingai patikrinti PHP versiją ir pataisų būseną

Vien rodoma PHP versija nepasako, ar PHP2Shell uždaryta. Lemia paketų būsena, atgaliniai perkėlimai ir tai, ar nauji procesai tikrai veikia.

Būsena 4 min. skaitymoPHP2Shell

Trumpai: Norint patikrinti PHP versiją, php -v nepakanka. Reikia žinoti, kurią PHP versiją žiniatinklio serveris iš tikrųjų naudoja, ar paketas turi taisymą, taip pat kaip atgalinį perkėlimą su sena versija, ir ar po atnaujinimo visi procesai paleisti iš naujo. PHP2Shell ištaisyta 8.5.12, 8.4.27, 8.3.36 ir 8.2.35 versijose.

Kodėl vien versijos numerio nepakanka

PHP2Shell turime aiškų ištaisytų versijų sąrašą. Praktikoje vis dėlto trys situacijos lemia klaidingus vertinimus:

  • Kelios diegimo versijos: komandinė eilutė rodo PHP 8.3, bet svetainė veikia per baseiną su PHP 8.1.
  • Atgaliniai perkėlimai: distribucijos ir talpintojai taisymus kartais įdiegia į esamus paketus. Tada, pavyzdžiui, Plesk toliau rodo 8.2.34, nors pataisyta.
  • Seni procesai: nauji failai guli diske, bet veikiantys darbiniai procesai (worker) yra iš ankstesnio laiko.

Vadovybei ir ne technikams padeda paprasta taisyklė: klauskite ne tik „Kokią PHP versiją turime?“, bet „Ar PHP2Shell visuose serveriuose uždaryta ir iš ko tai matome?“. Patikimas atsakymas turi tris įrodymus: versiją ar atgalinį perkėlimą, paketų būseną ir paleidimo iš naujo laiką.

Techninė patikra todėl turi tris žingsnius: versija, paketų būsena, veikiantys procesai. Toliau pateiktos komandos tik skaito. Paketų ir tarnybų pavadinimai skiriasi pagal distribuciją, PHP šaltinį ir talpinimo sąsają; pavyzdžiai remiasi PHP 8.3.

PHP versijos tikrinimas komandinėje eilutėje

php -v                                  # komandinės eilutės versija
ls /etc/php/ 2>/dev/null                # Debian/Ubuntu: įdiegtos šakos
php-fpm8.3 -v                           # FPM vykdomojo failo versija (pavadinimas priklauso nuo distribucijos)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"

RHEL, AlmaLinux ar Rocky sistemose FPM vykdomasis failas dažniausiai vadinasi php-fpm; su Software Collections ar trečiųjų šalių šaltiniais kitos versijos guli savo keliuose. Plesk ir cPanel turi savus PHP diegimus, egzistuojančius šalia sistemos PHP. Kaip ten elgtis, aprašome puslapiuose apie Plesk ir cPanel.

Kurią PHP versiją svetainė naudoja žiniatinklio kontekste, patikimiausia matyti baseino ar VirtualHost konfigūracijoje arba talpinimo sąsajoje. Tai parodo ir phpinfo puslapis; kurkite jį tik trumpam, su prieigos apsauga ir atsitiktiniu pavadinimu, ir iš karto po to ištrinkite.

Bendrame talpinime (shared hosting) komandinės eilutės prieigos dažniausiai nėra. Tada talpinimo sąsaja rodo nustatytą PHP versiją kiekvienai svetainei. Ar atgalinis perkėlimas įdiegtas ir paleistas iš naujo, ten retai nurodyta. Čia patikimas kelias yra raštiškas talpintojo patvirtinimas.

Paketų būsenos ir atgalinių perkėlimų tikrinimas

Paketų būsena rodo, ką jūsų distribucija iš tikrųjų pateikė:

# 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"

Jei pakeitimų žurnale yra vienas iš CVE numerių, atgalinis perkėlimas įdiegtame pakete yra. Jei įrašo nėra, tai dar nėra spragos įrodymas: kai kurie paketų prižiūrėtojai pakeitimų žurnalus formuluoja kitaip. Tuomet palyginkite paketo versiją su savo distribucijos saugumo pranešimais arba paklauskite teikėjo. Šios užklausos pavyzdį rasite puslapyje Kaip paklausti talpintojo apie pataisų būseną.

Svarbu: tikrinkite kiekvieną įdiegtą PHP paketą, ne tik pirmąjį. Serveriuose su keliomis šakomis dažnai viena pataisyta, o kita ne.

Ar nauja versija tikrai veikia?

Atnaujinimas veikia tik paleidus iš naujo visus PHP procesus. Palyginkite veikiančių procesų paleidimo laiką su atnaujinimo laiku:

ps -o pid,lstart,cmd -C php-fpm8.3      # FPM procesų paleidimo laikas
systemctl status php8.3-fpm             # nuo kada tarnyba veikia
needrestart -r l                        # Debian/Ubuntu, jei įdiegta: parodo pasenusius procesus

Jei paleidimo laikas ankstesnis už atnaujinimą, dar veikia seni procesai. Esant Apache su mod_php tas pats galioja Apache procesams. Kaip tvarkingai paleisti iš naujo, aprašo PHP-FPM ir visų darbinių procesų paleidimas iš naujo.

Patarimas

Rezultatą užfiksuokite raštu: serveris, PHP versija, paketo versija, CVE pakeitimų žurnale taip ar ne, paleidimo iš naujo laikas. Šios pastabos jums reikės vadovybei, draudikui ir vėlesnei pėdsakų patikrai.

Rezultato vertinimas

Radinys Vertinimas
Oficiali versija 8.5.12, 8.4.27, 8.3.36 ar 8.2.35, procesai paleisti iš naujo PHP2Shell uždaryta
Senesnis numeris, CVE numeriai paketo pakeitimų žurnale, procesai paleisti iš naujo atgalinis perkėlimas įdiegtas, uždaryta
Senesnis numeris, įrašo pakeitimų žurnale nėra, patvirtinimo nėra neaišku, išsiaiškinti pas teikėją
PHP 8.1 ar senesnė be patvirtinto atgalinio perkėlimo atvira, reikia pereinamųjų priemonių ir migracijos
Procesai senesni už atnaujinimą trūksta paleidimo iš naujo, spraga vis dar aktyvi

Jei serveris lieka „neaiškus“, traktuokite jį kaip atvirą: nustatykite pereinamąsias priemones ir sekite išsiaiškinimą, kol bus įrodymas. Visą versijų apžvalgą rasite puslapyje Kurios PHP versijos paveiktos?.

Kaip PHP SOS padeda konkrečiai?

Per PHP pataisų paslaugą perimame patikrą ir įrodymą:

  • Rasti visus diegimus, taip pat antrines versijas iš talpinimo skydelių, Software Collections ar konteinerių.
  • Įvertinti paketų būseną: oficialus leidimas, atgalinis perkėlimas ar atvira, su įrodymu iš pakeitimų žurnalo ar nuo teikėjo.
  • Kontroliuoti paleidimą iš naujo, kol nebeveikia joks procesas su senu kodu.
  • Parengti patikros protokolą, kurį galite naudoti viduje ir trečiosioms šalims.

Dažni klausimai

Kodėl php -v rodo kitą versiją nei mano svetainė?

Daugelyje serverių įdiegtos kelios PHP versijos. Komandinė eilutė naudoja vieną iš jų, žiniatinklio serveris ar FPM baseinas kitą. Todėl patikrinkite versiją, kuri iš tikrųjų veikia žiniatinklio kontekste, pavyzdžiui, per FPM vykdomąjį failą ar talpinimo sąsają.

Kaip atpažinti atgalinį perkėlimą (backport)?

Distribucijų paketuose taisymas dažnai nurodytas paketo pakeitimų žurnale (changelog), neretai su CVE numeriu. Debian ir Ubuntu padeda apt changelog, RHEL tipo sistemose rpm -q --changelog. Jei įrašo nėra, būklę išsiaiškinkite pas teikėją.

Ar PHP versiją galiu patikrinti talpinimo klientų meniu?

Taip, dauguma sąsajų rodo nustatytą versiją kiekvienai svetainei. Ar atgalinis perkėlimas įdiegtas ir paleistas iš naujo, ten dažniausiai nematyti. Tam patikimiausias kelias yra raštiškas talpintojo patvirtinimas.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba