Fil-qosor: F'Nginx b'PHP-FPM, il-vulnerabbiltà ta' PHP2Shell tinsab f'PHP-FPM, mhux f'Nginx. Ippatchjaw il-verżjonijiet kollha ta' PHP-FPM, erġgħu ibdew kull servizz FPM kompletament u pruvaw dan bil-ħinijiet tal-bidu tal-proċessi. Għas-sigurtà ta' Nginx PHP-FPM fit-tul jgħoddu pools separati, valuri li ma jistgħux jiġu sostitwiti u konfigurazzjoni ta' Nginx li ma teżegwixxix fajls li jkunu tellgħu l-utenti.
Kif jaħdmu flimkien Nginx u PHP-FPM
Nginx iservi huwa stess il-fajls statiċi u jgħaddi t-talbiet għal skripts ta' PHP lil PHP-FPM permezz ta' FastCGI. PHP-FPM jikkonsisti minn proċess master u diversi proċessi worker, miġbura f'pools. Worker jittratta ħafna talbiet wara xulxin.
Preċiżament dan huwa rilevanti għal PHP2Shell. F'CVE-2026-109619, stat intern ta' talba jista' jibqa' wara li l-memorja tiġi meħlusa u jintuża minn talba aktar tard fl-istess worker. F'CVE-2026-109618, stat ta' out-of-memory jista' jwaqqaf lil PHP f'nofs l-inizjalizzazzjoni ta' talba. Iż-żewġ vulnerabbiltajiet huma evalwati b'CVSS v4.0 9,2 u rranġati f'PHP 8.5.12, 8.4.27, 8.3.36 u 8.2.35.
Nivverifikaw l-inventarju: verżjonijiet, pools, proċessi
Ħafna servers għandhom diversi verżjonijiet ta' PHP-FPM flimkien. Il-kmandi li ġejjin jaqraw biss; l-ismijiet tal-pakketti u tas-servizzi huma eżempji għal Debian/Ubuntu u l-familja RHEL.
# Welche FPM-Dienste laufen?
systemctl list-units --type=service | grep -i fpm
# Welche Version steckt dahinter? (Beispiel Debian/Ubuntu)
php-fpm8.3 -v
# RHEL-Familie
php-fpm -v
# An welche Sockets oder Ports reicht Nginx weiter?
nginx -T 2>/dev/null | grep -E 'fastcgi_pass'
# Pools und ihre Benutzer
grep -RhE '^\[|^user|^listen' /etc/php/*/fpm/pool.d/ 2>/dev/null
Qabblu kull daħla fastcgi_pass ma' pool li jaħdem. B'hekk tarau liema verżjoni ta' PHP jaqdi liema websajt. Fil-każ ta' pakketti tad-distribuzzjoni, il-changelog bin-numri tas-CVE jippruva l-patch, mhux in-numru tal-verżjoni waħdu.
Sejba frekwenti f'inventarji bħal dawn huma servers fejn matul is-snin ġew installati diversi verżjonijiet ta' PHP, li minnhom waħda biss hija verament użata. Is-servizzi l-oħra ta' FPM jibqgħu jaħdmu xorta, spiss b'pools standard li jisimgħu fuq socket jew port lokali. Minn barra ġeneralment ma jintlaħqux direttament, imma jibqgħu riskju bla bżonn u jtawlu kull aġġornament ta' emerġenza. Iddiżattivaw u neħħu verżjonijiet li ebda websajt ma tuża, wara li tkunu vverifikaw l-assenjazzjoni permezz tad-daħliet fastcgi_pass.
Jiswa wkoll li tħarsu lejn l-utent tal-pools. Jekk il-pools kollha jaħdmu bħala www-data jew nginx, is-separazzjoni bejn il-websajts teżisti biss fuq il-karta. Min jieħu websajt f'idejh jista' mbagħad jaqra l-fajls tal-oħrajn, pereżempju fajls tal-konfigurazzjoni bil-passwords tad-database. Utenti tas-sistema separati għal kull pool u drittijiet xierqa tal-fajls joħolqu hawn fruntiera vera. Din mhijiex rimedju għal PHP2Shell, imma tillimita b'mod sinifikanti d-dannu possibbli ta' attakk b'suċċess.
Installaw il-patch u ġeddu l-workers kollha
Wara l-aġġornament tal-pakketti erġgħu ibdew kull servizz ta' PHP-FPM. Reload jissostitwixxi l-workers, imma restart sħiħ iġedded ukoll il-proċess master u huwa t-triq sigura wara aġġornamenti tas-sigurtà.
# Beispiel Debian/Ubuntu, je installierter Version
systemctl restart php8.3-fpm
# RHEL-Familie
systemctl restart php-fpm
# Kontrolle: Startzeit von Master und Workern
ps -eo pid,lstart,cmd | grep -E 'php-fpm' | grep -v grep
Kull proċess irid ikun beda wara l-aġġornament. Dan huwa deskritt fid-dettall f'Erġa' ibdew PHP-FPM u l-workers kollha.
Patch ma jneħħix malware li tkun ġiet introdotta qabel. Żommu l-logs tal-aċċess u tal-iżbalji ta' Nginx mill-20/10/2026 'il quddiem u iċċekkjaw il-websajts għal traċċi.
Nissettjaw valuri temporanji fil-pool
Sakemm verżjoni ma tkunx ippatchjata, php.net jirrakkomanda miżuri temporanji. Ma joffrux protezzjoni sħiħa. F'PHP-FPM tissettjaw il-valuri b'php_admin_value jew php_admin_flag fil-pool, u mbagħad l-applikazzjonijiet ma jistgħux jissostitwuhom permezz ta' ini_set().
; Beispiel: /etc/php/8.3/fpm/pool.d/website.conf
php_admin_flag[session.upload_progress.enabled] = off
php_admin_value[post_max_size] = 32M
php_admin_value[upload_max_filesize] = 24M
Mingħajr funzjoni ta' upload, php.net jissuġġerixxi post_max_size = 8M. Fuq PHP 8.5 jiżdied fatal_error_backtraces=0. Għall-indikazzjoni dwar memory_limit=-1 għandkom bżonn limitu tal-memorja fil-livell tal-cgroup, pereżempju permezz ta' MemoryMax f'estensjoni ta' systemd għas-servizz FPM. Fi Nginx adattaw client_max_body_size għall-post_max_size il-ġdid, biex l-utenti jirċievu messaġġi ta' żball li jinftiehmu. Wara erġgħu ibdew FPM.
Nitjiebu s-sigurtà ta' Nginx PHP-FPM fit-tul
Lil hinn mill-każ akut jgħinu xi regoli bażiċi li jillimitaw id-dannu fil-vulnerabbiltajiet futuri:
- Pool wieħed għal kull websajt b'utent tas-sistema proprju, socket proprju u fruntiera
open_basedirproprja. Aktar taħt open_basedir u iżolament għal kull websajt. - Drittijiet tas-socket issettjawhom b'mod li jkun jista' jaċċessa biss Nginx, tiftħux ports ta' FPM lejn barra.
- Eżegwixxu biss skripts eżistenti: fil-location ta' PHP issettjaw
try_files $uri =404;, biex Nginx ma jgħaddix lil PHP mogħdijiet li ma jeżistux. - Tħallux uploads jiġu eżegwiti: f'direttorji tal-upload ipprojbixxu l-eżekuzzjoni ta' PHP. Noti dwar dan jinsabu f'Kif timplimentaw uploads tal-fajls b'mod sigur.
- Ipproteġu l-paġni tal-istatus:
pm.status_pathuping.pathagħmluhom aċċessibbli biss b'mod intern.
# Beispiel: keine PHP-Ausführung im Upload-Verzeichnis
location ~* ^/uploads/.*\.php$ {
deny all;
}
Iċċekkjaw kull bidla b'nginx -t qabel ma terġgħu tgħabbu lil Nginx. Innotaw ukoll liema pools, verżjonijiet u regoli speċjali jeżistu fuq is-server. Din id-dokumentazzjoni qasira tiffranka ħin prezzjuż fil-vulnerabbiltà kritika li jmiss, għax ħadd ma jrid ifittex l-ewwel liema websajt hija marbuta ma' liema pool.
Kif tgħin PHP SOS b'mod konkret?
- Nassenjaw kull websajt għall-pool u għall-verżjoni ta' PHP tagħha u niċċekkjaw l-istat reali tal-pakketti.
- Nippatchjaw, nerġgħu nibdew is-servizzi FPM kollha u niddokumentaw il-ħinijiet tal-bidu tal-proċessi bħala prova.
- Sakemm jasal il-patch, nissettjaw il-valuri temporanji għal kull pool u nillimitaw il-memorja permezz tal-cgroup.
- Fil-qafas tat-tisħiħ tas-server nistabbilixxu sewwa l-pools, id-drittijiet u d-direttorji tal-upload.
- F'każ ta' suspett ta' dħul mhux awtorizzat nieħdu f'idejna l-Incident Response.
Mistoqsijiet frekwenti
Huwa biżżejjed systemctl reload għal PHP-FPM wara aġġornament?
Reload iġedded il-workers, imma l-proċess master jista' jżomm il-kodiċi qadim. Wara aġġornament tas-sigurtà restart sħiħ tas-servizz huwa t-triq sigura. Wara, ikkontrollaw il-ħin tal-bidu tal-master u tal-workers.
Nginx irid jerġa' jibda wara aġġornament ta' PHP?
Nginx innifsu ma fihx PHP u ma jeħtieġx restart għall-patch ta' PHP. Jridu jerġgħu jibdew is-servizzi kollha ta' PHP-FPM. Jekk fl-istess ħin tibdlu l-konfigurazzjoni ta' Nginx, ivverifikawha b'nginx -t qabel ma terġgħu tgħabbuha.
Għaliex pools separati għal kull websajt?
Kull pool jaħdem b'utent proprju u b'limiti proprji. Jekk websajt tiġi kompromessa, l-attakkant ma jilħaqx faċilment il-fajls tal-oħrajn. Barra minn hekk, il-valuri temporanji jistgħu jiġu ssettjati b'mod immirat għal kull pool.
pm.max_requests huwa protezzjoni kontra PHP2Shell?
Le, ma jissostitwixxix patch. Il-valur jillimita kemm talbiet jittratta worker qabel ma jiġi sostitwit. Dan jista' jqassar il-ħajja tal-istati fil-proċess, imma mhuwiex rimedju msemmi minn php.net.