Īsi: CVE-2026-109619 ir otrā ievainojamība aiz PHP2Shell. Iekšējais stāvoklis, kas pieder pieprasījumam, pēc atmiņas atbrīvošanas var saglabāties; vēlāks pieprasījums tajā pašā darbprocesā to var izmantot, pirms tas ir atiestatīts. Sekas ir koda izpilde bez pieteikšanās. Pretlīdzeklis: atjauninājums uz PHP 8.5.12, 8.4.27, 8.3.36 vai 8.2.35 un visu darbprocesu pārstartēšana.
Kas ir CVE-2026-109619?
CVE-2026-109619 (GitHub identifikators GHSA-6wmf-4rv5-p3rp) novērtēta ar CVSS v4.0 9.2. Kopā ar CVE-2026-109618 tā veido PHP2Shell. Abas ievainojamības ir pašā PHP, nevis lietojumprogrammā.
Iedarbība ir tāda pati kā māsas ievainojamībai: uzbrucējs no attāluma, bez paroles un bez lietotāja konta, var izpildīt kodu serverī. Taču cēlonis ir cits.
Kāpēc novecojis stāvoklis darbprocesā ir bīstams
PHP tīmekļa serveris katram pieprasījumam nestartē jaunu procesu. PHP-FPM, Apache ar mod_php, LiteSpeed vai FrankenPHP gadījumā viens darbprocess pēc kārtas apstrādā daudzus pieprasījumus. Starp diviem pieprasījumiem PHP atiestata savu iekšējo stāvokli, lai nekas no pieprasījuma A nenonāktu pieprasījumā B.
CVE-2026-109619 gadījumā šī atiestatīšana nenotiek pilnībā. Saskaņā ar php.net pieprasījumam piederošs iekšējais stāvoklis pēc atmiņas atbrīvošanas var saglabāties. Vēlāks pieprasījums tajā pašā darbprocesā var izmantot šo novecojušo stāvokli, pirms tas ir atiestatīts. Vienkāršoti sakot: tiek lietots kas tāds, kas patiesībā jau vairs nav derīgs.
Darbības skatījumā tas ir ievērības cienīgi. Darbprocesu atkārtota izmantošana ir vēlama, jo tā padara tīmekļa serverus ātrus: darbprocesam nav katram pieprasījumam jāstartē no jauna, jāielādē paplašinājumi un jāizveido atmiņa. Ievainojamība tātad skar īpašību, kāda ir praktiski katrai produkcijas PHP instalācijai. php.net nemin konfigurāciju, kas problēmu pilnībā novērstu; tāpēc ceļš ved caur atjauninājumu.
Ekspluatācijas detaļas mēs nepublicējam. Operatoriem svarīgi: jāpatur redzeslokā katrs darbības režīms, kurā darbprocesi apkalpo vairākus pieprasījumus, un tieši šie režīmi ir ierastie.
Abas PHP2Shell ievainojamības salīdzinājumā
| Pazīme | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| GitHub identifikators | GHSA-w8hw-w9fx-j79w | GHSA-6wmf-4rv5-p3rp |
| Vērtējums | CVSS v4.0 9.2 | CVSS v4.0 9.2 |
| Izraisītājs | Out-of-Memory pieprasījuma datu inicializācijas laikā | Iekšējais stāvoklis saglabājas pēc atbrīvošanas |
| Iedarbība | Koda izpilde bez pieteikšanās | Koda izpilde bez pieteikšanās |
| Labots versijās | 8.5.12, 8.4.27, 8.3.36, 8.2.35 | 8.5.12, 8.4.27, 8.3.36, 8.2.35 |
Skarti ir PHP-FPM, Apache ar mod_php, php-cgi, FrankenPHP un LiteSpeed. Augstāko risku PHP komanda saskata mod_php gadījumā; kāpēc, izskaidrojam rakstā Kāpēc mod_php rada augstāko risku.
CVE-2026-109619 aizvēršana: atjauninājums, tad visu darbprocesu pārstartēšana
Tieši šai ievainojamībai pārstartēšana ir izšķiroša. Kamēr atmiņā darbojas veci darbprocesi, serveris turpina strādāt ar kļūdaino kodu, kaut gan jaunie faili jau sen atrodas diskā.
Pārbaudiet versiju un pakotnes stāvokli. Pakotņu nosaukumi atšķiras pa distributīviem un hostinga saskarnēm:
php -v
php-fpm8.3 -v # FPM binārajam failam var būt cita versija nekā CLI
apt policy php8.3-fpm # Debian/Ubuntu
dnf info php-fpm # RHEL saime
rpm -q --changelog php-fpm | grep -i "CVE-2026-109619"
Pēc tam pārstartējiet visus skartos pakalpojumus:
sudo systemctl restart php8.3-fpm # katrai instalētajai PHP versijai
sudo systemctl restart apache2 # mod_php gadījumā; RHEL sistēmās pakalpojumu sauc httpd
Ja jūsu distributīvs vai hostinga sniedzējs ievieš backport labojumu, redzamais versijas numurs var palikt tāds pats. Tad noteicošais ir pakotnes changelog un sniedzēja rakstisks apstiprinājums. Soli pa solim pārbaudi atradīsiet lapā PHP-FPM un visu darbprocesu pārstartēšana.
Pierakstiet pārstartēšanas datumu un laiku. Vēlākai vērtēšanai, vai uzbrukums notika pirms vai pēc ielāpa, šis laiks ir svarīgākais atskaites punkts.
Kas pēc ielāpa vēl jāizdara
Ielāps nepierāda, ka iepriekš nekas nav noticis. Saskaņā ar plašsaziņas līdzekļu ziņojumiem pirmais uzbrukuma mēģinājums tika novērots 17. oktobrī, četras dienas pirms ielāpiem. Saglabājiet servera žurnālus no 20. oktobra, kā to iesaka speciālistu prese, un pārbaudiet serveri uz neparastām pazīmēm. Norādes sniedz lapa Vai mani jau ir uzlauzuši?.
Domājiet arī par darbības rādiusu: sekmīgas koda izpildes gadījumā uzbrucējam ir PHP procesa tiesības. Viņš var nolasīt to, ko drīkst nolasīt lietojumprogramma, piemēram, konfigurācijas failus ar datubāzes piekļuvēm vai API atslēgām. Ja incidents apstiprinās, šīs piekļuves pēc attīrīšanas jāatjauno.
Kā PHP SOS palīdz konkrēti?
Ar PHP ielāpu pakalpojumu mēs labojumu ieviešam izsekojami:
- Apkopot: Kuras PHP versijas un darbības režīmi darbojas kuros serveros un kāds pakotņu avots tos piegādā?
- Ielāpot: Atjauninājums no pareizā avota vai pagaidu pasākumi pēc php.net, kur atjauninājums vēl ir bloķēts.
- Kontrolēt pārstartēšanu: Mēs process pēc procesa pārbaudām, ka darbojas tikai labotā versija.
- Dokumentēt: Versijas, pakotņu stāvokli un pārstartēšanas laiku, lai jūs varētu apliecināt stāvokli.
Biežāk uzdotie jautājumi
Ar ko CVE-2026-109619 atšķiras no CVE-2026-109618?
CVE-2026-109618 rodas, kad Out-of-Memory stāvoklis pārtrauc pieprasījumu inicializācijas vidū. CVE-2026-109619 attiecas uz stāvokli, kas pēc pieprasījuma beigām paliek darbprocesā. Abas noved pie koda izpildes bez pieteikšanās un ir novērstas vienās un tajās pašās PHP versijās.
Vai palīdz PHP-FPM darbprocesu biežāka pārstartēšana?
Kā atjauninājuma aizstājējs tas nav piemērots. php.net biežāku darbprocesu pārstartēšanu kā pagaidu pasākumu nemin. Taču pēc atjauninājuma darbprocesi jāpārstartē, lai labotā versija vispār darbotos.
Vai ar CMS atjauninājumu esmu aizsargāts pret CVE-2026-109619?
Nē. Ievainojamība ir PHP, nevis WordPress, Shopware, TYPO3 vai citā sistēmā. To aizver tikai PHP atjauninājums vai sniedzēja apstiprināts backport.
Vai ir zināmas uzbrukuma pēdas caur CVE-2026-109619?
Apstiprināti Indicators of Compromise līdz šim nav publicēti. Atpazīšana balstās uz uzvedības analīzi, piemēram, jauniem PHP failiem, neparastiem izejošiem savienojumiem vai nezināmiem cron uzdevumiem.