Atklāti kritisku ievainojamību detalizējumi PHP un publicēti labojumizlaidumi

Ir izlaisti labojumi PHP 8.5.12, 8.4.27, 8.3.36 un 8.2.35, kā arī uzlabojumi jau neatbalstītām PHP 7.4, PHP 8.0 un PHP 8.1 versijām (vulnerablas versijas no 5.4 līdz 7.3 paliek bez labojumiem), kuros ir atrastas divas kritiskas ievainojamības:

  • CVE-2026-109618 — attāli izpildāma koda ievainojamÄ«ba, kas radusies, kad pieejamā procesa brÄ«vā atmiņa ir iztērēta, un atmiņas trÅ«kuma apstrādes mehānisms caur longjmp() funkcijas izpildi var pārtraukt PHP interpretatoru stāvoklÄ«, kad tiek inicializētas tikai dažas iekŔējās struktÅ«ras, kas saistÄ«tas ar pieprasÄ«juma apstrādi. Turpmāk apstrādes pabeigÅ”anas funkcija piekļūst Ŕīm struktÅ«rām, uzskatot tās par jau inicializētām, kaut arÄ« atmiņa tām nav pieŔķirta.

    Galvenais uzbrukuma virziens ir manipulācija ar multipart pieprasÄ«jumiem, lai radÄ«tu apstākļus pieejamās procesa atmiņas izsÄ«kumam. Lai apietu ierobežojumu post_max_size, var netikt norādÄ«ts Content-Length galvene un tikt var pārsÅ«tÄ«ts milzÄ«gs skaits HTTP galvenu. Ir iespējams veikt arÄ« mērÄ·tiecÄ«gus uzbrukumus konkrētām operācijām php lietojumprogrammās, kuras pārmērÄ«gi patērē atmiņu. EksplozÄ«va apstiprinājums ir saistÄ«ts ar mod_php, jo tas izsauc shutdown() funkciju pat kļūmes gadÄ«jumā. PHP-FPM, ja notiek kļūme, pabeigs apakÅ”procesu, kas apgrÅ«tina uzbrukuma veikÅ”anu, taču teorētiski to nenovērÅ”.

  • CVE-2026-109619 — attāli izpildāma koda ievainojamÄ«ba, kas radusies, piekļūstot atmiņai pēc tās atbrÄ«voÅ”anas, jo globālā stāvokļa nepareiza attÄ«rīŔana, kas saistÄ«ta ar konkrētu pieprasÄ«jumu. Ja pieprasÄ«jums tiek pārtraukts smagas kļūdas, laika vai atmiņas trÅ«kuma dēļ, globālais stāvoklis var netikt atiestatÄ«ts, un rādÄ«tāji paliek aktÄ«vi, neskatoties uz atmiņas atbrÄ«voÅ”anu, uz kuru tie atsaucas. Nākamā pieprasÄ«juma apstrādē tajā paŔā procesā var notikt piekļuve atlikuÅ”ajam rādÄ«tājam vecajam globālajam stāvoklim.

    Lai izmantotu, var radÄ«t apstākļus, vai ekspluatēt pieejamās atmiņas izsÄ«kÅ”anu multipart pieprasÄ«juma apstrādē, izmantojot kodu progresu augÅ”upielādē (session.upload_progress). Å ajā gadÄ«jumā kā galvenais un apstiprinātais uzbrukuma virziens tiek minēts fatal_error_backtraces apstrādātājs PHP 8.5, kas neslēdz izsistās kļūdas stāvokli pēc beigām. Pirmajā gadÄ«jumā uzbrukums ir iespējams uz mod_php un PHP-FPM, bet otrajā tikai uz mod_php. Tāpat tiek minēta neapstiprināta iespēja veikt uzbrukumu konfigurācijās, kur iestatÄ«jumi izraisa brÄ«dinājumu izvadīŔanu agrÄ«nā pieprasÄ«juma apstrādes posmā (piemēram, brÄ«dinājumi par novecojuÅ”iem parametriem).

Tiek apgalvots, ka pilnÄ«ga ievainojamÄ«bas bloķēŔana ir iespējama tikai, ja tiek uzstādÄ«ts jauninājums. Nākamie pasākumi samazina veiksmÄ«gu uzbrukumu varbÅ«tÄ«bu, taču nepadara sistēmu pilnÄ«gi droÅ”u:

  • AtzÄ«mēŔana php.ini parametra "memory_limit=-1", kas apgrÅ«tina uzbrucēja iespēju kontrolēt atmiņas ierobežojumu izsmeļamÄ«bu.
  • AtzÄ«mēŔana parametra "post_max_size = 8M", ja nav nepiecieÅ”ams augstu failu augÅ”upielāde. Parametra "upload_max_filesize" vērtÄ«bai jābÅ«t mazākai par parametra "post_max_size" vērtÄ«bu.
  • Iestata pieļaujamo atmiņas lietoÅ”anas limitu sistēmas lÄ«menÄ«, izmantojot cgroup memory.max vai konteineru atmiņas lietoÅ”anas parametrus, bet ne caur sistēmas limitēm RLIMIT_AS un RLIMIT_DATA, kas tikai provocē problēmu ar longjmp().
  • Ja sniegums nav svarÄ«gs, var ierobežot pieprasÄ«jumu skaitu, ko apstrādā viens darba process, izmantojot pm.max_requests=1 PHP-FPM un MaxRequestsPerChild Apache httpd.
  • Iestatot php.ini vai konfigurācijas lÄ«menÄ« serveris (ne caur ini_set() vai FPM .user.ini, jo parametram jādarbojas pirms pieprasÄ«juma apstrādes) parametrs "session.upload_progress.enabled=0.
  • Izmantojot PHP 8.5 versiju, ieteicams iestatÄ«t parametru "fatal_error_backtraces=0".
  • Noņemiet ar atseviŔķiem pieprasÄ«jumiem saistÄ«tās novecojuÅ”as vai nepareizas iestatÄ«jumus (piemēram, assert.* un nepareizi ceļi open_basedir), kas izraisa diagnostikas ziņojumu izvadīŔanu lÄ«dz inicializācijai.
  • Novērst PHP kodā situācijas, kas izraisa laika izsistienus un fatālas kļūdas, piemēram, kas saistÄ«tas ar kļūdām callback apstrādātājos un augÅ”upielāžu apstrādē.
  • Lai bloķētu pirmo ievainojamÄ«bu veco PHP versiju kodā, var aizvietot longjmp() izsaukumu atmiņas izsniegÅ”anas apstrādātājā ar _exit().
  • Papildus var samazināt max_input_nesting_level parametra vērtÄ«bu php.ini un bloķēt multipart pieprasÄ«jumus, kā tika parādÄ«ts iepriekŔējā paziņojumā.

IevainojamÄ«bu novērÅ”anas statuss pakotnēs ir pieejams Å”ajās lapās: Debian, Ubuntu, SUSE, RHEL, Gentoo, Arch,
Fedora, FreeBSD.

Pielikums 1: IevainojamÄ«bas noteiktas, izmantojot AI modeļus GPT‑5.6 un Gemini 4 Argon. Uzņēmums OpenAI ir publicējis rÄ«ku php2shell-checker vietņu un lokālo izpildāmo failu ievainojamÄ«bas pārbaudei, taču Å”is rÄ«ks tikai pārbauda PHP versijas numuru, ko atgriež HTTP serveris vai komanda "php -v", bez detalizētas analÄ«zes.

Pielikums 2: Prototipa eksploitācijas autora, kurÅ” izmanto ievainojamÄ«bu, ko izraisa dubultā atbrÄ«voÅ”ana (double-free), teikts, ka problēma paliek neatrisināta PHP 8.5.12 laidienā, un eksploitācija joprojām darbojas. Agrāk PHP pārstāvji apgalvoja, ka Ŕī ievainojamÄ«ba nav saistÄ«ta ar plānotajiem labojumiem un nav reāla problēma. Eksploitācijas autors apgalvoja, ka tā ir pavisam cita ievainojamÄ«ba.

Avots: opennet.lv

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster