Sitwazzjoni attwali: PHP2Shell. Żewġ vulnerabbiltajiet kritiċi ta' PHP (CVSS 9,2) jippermettu kodiċi malizzjuż mingħajr login. Patches mill-21/10/2026.X'għandu jsir issa →

memory_limit u Out-of-Memory: x'jiġri ġewwa

X'jiġri meta skript PHP jilħaq memory_limit? Il-mekkaniżmu, il-limitu ġdid iebes tal-memorja mill-patches ta' Ottubru u r-rabta ma' CVE-2026-109618.

Stat 6 min. qariGħarfien dwar PHP

Fil-qosor: Żball PHP Out-of-Memory jinqala' meta skript irid jitlob aktar memorja minn dik li l-issettjar memory_limit jippermetti (standard: 128 MB għal kull talba). PHP imbagħad iwaqqaf it-talba b'żball fatali u jnaddaf. Eżatt din it-triq ta' waqfien u tindif kienet difettuża f'CVE-2026-109618, waħda miż-żewġ vulnerabbiltajiet ta' PHP2Shell. Minn PHP 8.5.12, 8.4.27, 8.3.36 u 8.2.35 memory_limit huwa limitu artab, imtemm bil-limitu iebes memory_hard_limit_percent.

X'tfisser “Allowed memory size exhausted”?

Il-messaġġ ta' żball magħruf jinqara bejn wieħed u ieħor: “Allowed memory size of 134217728 bytes exhausted (tried to allocate …)”. L-ewwel numru huwa l-limitu ssettjat f'bytes, hawn 128 MB. Skript għalhekk ipprova jokkupa memorja lil hinn minn dan il-limitu, pereżempju meta jgħabbi fajl kbir, mistoqsija kbira lid-database jew permezz ta' linja bla tmiem.

Importanti għal min jieħu d-deċiżjonijiet: il-limitu japplika għal kull proċess ta' PHP u kull talba, mhux għas-server kollu. Jipproteġi lis-server mill-possibbiltà li skript difettuż wieħed jikkonsma l-memorja kollha. It-tagħbija totali tirriżulta biss mill-għadd ta' workers li jaħdmu fl-istess ħin. B'20 worker ta' PHP-FPM b'limitu ta' 256 MB kull wieħed, dan jammonta matematikament għal aktar minn 5 GB.

Kif PHP jgħodd il-memorja

PHP jamministra l-memorja għat-talbiet permezz ta' memory manager proprju, iz-Zend Memory Manager. Jieħu blokok akbar mis-sistema operattiva u jqassamhom internament lil varjabbli, arrays u oġġetti. Kontra dan il-valur riżervat PHP jivverifika memory_limit. Memorja li estensjoni titlob direttament mis-sistema operattiva, skont il-manwal, ma tidhirx f'dan l-għadd.

Tistgħu tagħmlu l-valuri viżibbli fil-kodiċi:

<?php
echo memory_get_usage(), PHP_EOL;       // memorja okkupata bħalissa mill-iskript
echo memory_get_usage(true), PHP_EOL;   // riżervata mill-memory manager; kontra dan jivverifika memory_limit
$liste = range(1, 200000);
echo memory_get_peak_usage(), PHP_EOL;  // l-ogħla valur s'issa
unset($liste);
memory_reset_peak_usage();              // irrisettja l-ogħla valur, minn PHP 8.2

Kif l-għadd ta' referenzi u l-garbage collection jeħilsu l-memorja mill-ġdid tispjegah il-paġna Il-ġestjoni tal-memorja f'PHP.

X'jiġri ġewwa meta jkun hemm Out-of-Memory

B'mod simplifikat, waqfien minħabba memorja jgħaddi minn dawn il-passi:

  1. L-iskript jitlob memorja, pereżempju għal element ġdid ta' array jew meta jaqra data tat-talba.
  2. Il-memory manager jivverifika jekk it-talba taqbiżx il-limitu.
  3. Jekk dan huwa l-każ, PHP iqajjem żball fatali u jħalli l-ipproċessar kurrenti immedjatament, anki f'nofs kompitu mwettaq nofsu.
  4. Funzjonijiet ta' shutdown irreġistrati għad jaħdmu; hekk ħafna applikazzjonijiet jirreġistraw l-iżball.
  5. Fl-aħħar PHP inaddaf it-talba u jeħles il-memorja tagħha. Il-worker imbagħad ikun lest għat-talba li jmiss.

Il-punt delikat huwa l-pass 5. It-tindif irid ikun jista' jittratta strutturi tad-data li fil-mument tal-waqfien kienu nofshom biss maħluqa. Waqfien ordinarju minħabba memorja ma jitqiesx, skont il-politika tas-sigurtà tal-proġett PHP, bħala vulnerabbiltà tas-sigurtà, sakemm il-limitu jirrifjuta t-talba u t-talba kurrenti biss tintemm. F'CVE-2026-109618 eżatt din is-suppożizzjoni kienet miksura: skont php.net l-istat ta' Out-of-Memory seta' jinterrompi PHP waqt li d-data interna tat-talba kienet inizjalizzata biss parzjalment, u t-tindif mbagħad ittratta data invalida bħala valida. Dettalji dwar l-isfruttament ma nippubblikawhomx; il-klassifikazzjoni tal-vulnerabbiltà tinsab taħt CVE-2026-109618.

Il-limitu l-ġdid artab u dak iebes tal-memorja

Bir-rilaxxi tas-sigurtà tal-21 ta' Ottubru 2026 il-proġett PHP biddel l-imġiba. Skont il-manwal memory_limit minn dakinhar huwa limitu artab: talba li taqbeżu tista' fil-biċċa l-kbira tal-każijiet titlesta qabel ma jiġi ż-żball fatali. Limitu iebes separat jillimita kemm dan jista' jmur.

Direttiva Standard Tista' tinbidel Tifsira
memory_limit 128M INI_ALL Limitu tal-memorja għal kull talba, -1 = l-ebda limitu
memory_hard_limit_percent mhux issettjat INI_ALL Limitu iebes bħala perċentwal ta' memory_limit, ġdid minn 8.5.12, 8.4.27, 8.3.36, 8.2.35
post_max_size 8M INI_PERDIR Daqs massimu tad-data POST
upload_max_filesize 2M INI_PERDIR Daqs massimu ta' fajl imtella'

Eżempju mill-manwal: b'memory_limit=128M u memory_hard_limit_percent=150 il-limitu iebes jinsab f'192 MB. Il-manwal isemmi d-direttiva fl-istess ħin bħala sinjal tar-rikonoxximent: jekk verżjoni ta' PHP ma tafhiex, hija affettwata minn CVE-2026-109618 u CVE-2026-109619. Test mgħaġġel għal kull verżjoni installata ta' PHP:

php -r 'var_dump(ini_get("memory_hard_limit_percent"));'
# bool(false) ifisser: direttiva mhux magħrufa

Fil-każ ta' pakketti minn distribuzzjonijiet b'backport, il-changelog tal-pakkett jibqa' l-evidenza determinanti, kif deskritt taħt Kif tivverifikaw sewwa l-verżjoni ta' PHP u l-istat tal-patches. Iċċekkjaw ukoll il-binary ta' PHP-FPM separatament, għax tista' jkollha verżjoni differenti mil-linja tal-kmand.

Limiti tal-memorja u PHP2Shell: x'għandhom jifhmu l-amministraturi issa

Il-miżuri temporanji ta' php.net għal CVE-2026-109618 kważi kollha jduru madwar il-memorja u d-daqsijiet tat-talbiet. Inaqqsu r-riskju, imma ma jieħdux post l-aġġornament:

; Pool ta' FPM, pereżempju /etc/php/8.3/fpm/pool.d/www.conf
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M        ; 32M, jekk jinħtieġu uploads
php_admin_value[upload_max_filesize] = 6M  ; żommu taħt post_max_size

Tliet punti huma deċiżivi. L-ewwel, l-ebda applikazzjoni, l-ebda direttorju u l-ebda pool ieħor ma jista' jerġa' jissettja limitu finit; php.net jeżiġi espliċitament dan il-kontroll. It-tieni, servizz b'memory_limit=-1 jeħtieġ limitu minn barra, permezz ta' container jew cgroup, skont php.net aħjar b'mod li jintemm biss il-worker affettwat. RLIMIT_AS u RLIMIT_DATA huma, skont php.net, mhux adattati. It-tielet, php.net jirrakkomanda limiti fis-server tal-web jew fil-proxy għad-daqs tat-talba, l-għadd ta' oqsma, partijiet multipart, headers u fond tal-inkaljar.

Importanti

memory_limit=-1 mingħajr limitu tal-memorja minn barra jista' jwaqqaf kompletament server taħt tagħbija għolja. Applikaw il-miżuri temporanji biss bħala pakkett u biss sal-aġġornament.

Kif tissettjaw il-limitu b'systemd tinsab taħt Limiti tal-memorja b'systemd u cgroups; is-soluzzjoni permanenti għall-ħajja ta' kuljum tiddeskrivihom Kif tissettjaw memory_limit sew.

Kif jgħin PHP SOS konkretament?

Permezz tas-Servizz ta' patch għal PHP nipproċedu hekk:

  • Verifika tal-istokk: Nirreġistraw kull verżjoni ta' PHP fuq is-server, separata skont CLI, FPM u modulu ta' Apache, u nittestjaw jekk il-verżjoni bil-korrezzjoni tkunx qed taħdem.
  • Nirranġaw il-limiti tal-memorja: Niċċekkjaw fejn jiġi ssettjat memory_limit kullimkien u nwaqqfu limiti tal-pool u tas-sistema li jaqblu flimkien.
  • Nassiguraw it-tranżizzjoni: Fejn l-aġġornament għadu mblukkat, napplikaw il-miżuri ta' php.net kompletament u mblukkati kontra s-sostituzzjoni.
  • Nagħtu evidenza: Tirċievu bil-miktub verżjonijiet, stati tal-pakketti u konfigurazzjoni qabel u wara l-intervent.

Mistoqsijiet frekwenti

X'tfisser il-messaġġ “Allowed memory size exhausted”?

Skript ried jitlob aktar memorja minn dik li memory_limit jippermetti. PHP imbagħad iwaqqaf it-talba kurrenti b'żball fatali. Talbiet oħra u s-server innifsu jibqgħu jaħdmu.

memory_limit japplika għas-server kollu?

Le, il-limitu japplika għal kull proċess ta' PHP u kull talba. Jekk jaħdmu 20 worker ta' FPM b'limitu ta' 256 MB kull wieħed, flimkien jistgħu teoretikament jokkupaw aktar minn 5 GB. Il-limitu totali għalhekk irid jiġi ssettjat permezz tad-daqs tal-pool, systemd jew container.

X'inhi memory_hard_limit_percent?

Direttiva ġdida li daħlet ma' PHP 8.5.12, 8.4.27, 8.3.36 u 8.2.35. Tistabbilixxi limitu iebes bħala perċentwal ta' memory_limit li qatt ma jinqabeż. memory_limit nnifsu minn dakinhar huwa limitu artab.

memory_limit=-1 jipproteġi minn PHP2Shell?

Parzjalment biss. php.net isemmi l-issettjar bħala miżura temporanja kontra CVE-2026-109618, espliċitament mingħajr protezzjoni sħiħa. Jeħtieġ bil-fors limitu tal-memorja minn barra, u l-aġġornament jibqa' obbligatorju.

Sorsi

Kuntatt immedjat

Kull siegħa tgħodd. Iktbu lilna issa.

Iddeskrivu fil-qosor is-sistema, il-verżjoni ta' PHP u dak li osservajtu. Nikkuntattjawkom, niċċaraw is-sitwazzjoni u naħdmu mill-bogħod sakemm l-inċident jingħalaq u jiġi ddokumentat.

Għajnuna immedjata