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
