Janë publikuar versionet korrigjuese PHP 8.5.12, 8.4.27, 8.3.36 dhe 8.2.35, si dhe patches për degët që nuk mbështeten më PHP 7.4, PHP 8.0 dhe PHP 8.1 (versionet e prekura nga 5.4 deri në 7.3 nuk kanë patches), në të cilat janë korrigjuar dy vulnerabilitete kritike:
- CVE-2026-109618 â ekzekutimi i kodit nĂ« distancĂ«, i shkaktuar nga fakti se, kur memorizimi i lirĂ« i procesit pĂ«rfundon, trajtuesi i mungesĂ«s sĂ« memories pĂ«rmes funksionit longjmp() mund tĂ« ndalĂ« interpretuesin PHP nĂ« njĂ« gjendje kur janĂ« inicializuar vetĂ«m njĂ« pjesĂ« e strukturave tĂ« brendshme lidhur me trajtimin e kĂ«rkesĂ«s. MĂ« pas, funksioni i pĂ«rfundimit tĂ« trajtimit tĂ« kĂ«rkesĂ«s i referohet kĂ«tyre strukturave si tĂ« inicializuara, megjithĂ«se memoria pĂ«r to nuk Ă«shtĂ« alokuar.
Vektori kryesor i sulmit është manipulimi i kërkesave multipart për të krijuar kushte për përfundimin e memories së disponueshme për procesin. Për të anashkaluar kufirin post_max_size, mund të mos përmendet header-i Content-Length dhe të dërgohen një numër i madh HTTP header-ash. Mund të kryhen gjithashtu sulme të precizuara në operacione specifike në aplikacionet php, që konsumojnë tepër memorie. Prania e një exploiti është konfirmuar për mod_php, pasi ai thërret funksionin shutdown() edhe në rast të dështimit. PHP-FPM në rast dështimi do të përfundojë procesin fëmijë, çka e vështirëson zhvillimin e sulmit, por teorikisht nuk e përjashton atë.
- CVE-2026-109619 â ekzekutimi i kodit nĂ« distancĂ«, i shkaktuar nga referimi nĂ« memorie pas lirimit tĂ« saj pĂ«r shkak tĂ« pastrimit tĂ« papĂ«rshtatshĂ«m tĂ« gjendjes globale, tĂ« lidhur me njĂ« kĂ«rkesĂ« tĂ« caktuar. NĂ« rast se kĂ«rkesa pritet pĂ«r shkak tĂ« njĂ« gabimi fatal, njĂ« skadencĂ« ose mungesĂ« memories, gjendja globale mund tĂ« mbetet e papastruar dhe treguesit do tĂ« mbeten aktivĂ«, megjithĂ«se memoria pĂ«r tĂ« cilĂ«n tregojnĂ« Ă«shtĂ« liruar. GjatĂ« pĂ«rpunimit tĂ« kĂ«rkesĂ«s tjetĂ«r nĂ« tĂ« njĂ«jtin proces, mund tĂ« ndodhi referimi nga treguesi i mbetur nĂ« gjendjen globale tĂ« vjetĂ«r.
Për funksionimin e sistemit, mund të përdoret krijimi i kushteve të shterimit të memories së disponueshme gjatë përpunimit të kërkesave multipart në kodin për tregimin e përparimit të ngarkimit (session.upload_progress). Në këtë rast, si vektori kryesor dhe i konfirmuar i sulmit përmendet menaxheri fatal_error_backtraces në PHP 8.5, i cili nuk e rikthen gjendjen e drejtimit pas përfundimit. Në rastin e parë, sulmi është i mundshëm mbi mod_php dhe PHP-FPM, ndërsa në të dytin vetëm mbi mod_php. Po ashtu, përmendet mundësia jo e konfirmuar e zhvillimit të një sulmi në konfigurime, ku ka drejtime që çojnë në shfaqjen e paralajmërimeve në fazën e hershme të përpunimit të kërkesës (p.sh., paralajmërimet për përdorimin e parametrave të skaduar).
Shtrohet se bllokimi i plotë i dobësive është e mundur vetëm përmes instalimit të përditësimeve. Masat e mëposhtme lejojnë uljen e probabilitetit të realizimit të sulmeve, por nuk e bëjnë sistemin plotësisht të sigurt:
- Përcaktimi në php.ini i parametrave "memory_limit=-1", i cili e pamundëson sulmuesin të kontrollojë shterimin e limiteve të memories.
- Përcaktimi i parametrave "post_max_size = 8M", nëse nuk ka nevojë për ngarkim të skedareve të mëdha. Vlera e parametrave "upload_max_filesize" duhet të jetë më e vogël se ajo e "post_max_size".
- Vendosja e një limiti për konsumin e memories në nivel sistemor, përmes cgroup memory.max ose parametrave të konsumit të memories nga kontejneri, por jo përmes limiteve sistemore RLIMIT_AS dhe RLIMIT_DATA, të cilat vetëm provokojnë thirrjen problematike longjmp().
- Nëse aktivizimi i performancës nuk është i rëndësishëm, mund të kufizohet numri i kërkesave që një proces punues i trajton përmes pm.max_requests=1 në PHP-FPM dhe MaxRequestsPerChild në Apache httpd.
- Përcaktimi në nivel php.ini ose konfigurimi serverë (jo përmes ini_set() ose FPM .user.ini, pasi parametri duhet të ketë efekt para fillimit të përpunimit të kërkesës) i parametrave "session.upload_progress.enabled=0.
- Për përdorimin e versionit PHP 8.5, duhet të vendoset parametri "fatal_error_backtraces=0".
- Heqja e konfigurimeve të skaduara ose të gabuara të lidhura me kërkesa të veçanta (siç janë assert.* dhe rrugë të gabuara në open_basedir), të cilat çojnë në shfaqjen e mesazheve diagnostike para iniciasionit.
- Eliminimi në kodin PHP i situatave që çojnë në arritjen e kohëve të pritjes dhe gabimeve fatale, për shembull, lidhur me dështimet në menaxherët callback dhe përpunimin e ngarkesave.
- Për të bllokuar vulnerabilities e para në kodin e versioneve të vjetra të PHP, mund të zëvendësoni thirrjen longjmp() në trajtuesin e konsumit të memories me _exit().
- Për më tepër, mund të zvogëloni vlerën e parametrave max_input_nesting_level në php.ini dhe të bllokoni kërkesat multipart, siç u tregua në njoftimin paraprak.
Statusi i zbatimit të vulnerabiliteteve në shpërndarje mund të vlerësohet në këto faqe: Debian, Ubuntu, SUSE, RHEL, Gentoo, Arch,
Fedora, FreeBSD.
ShtesĂ« 1: Vulnerabilitetet janĂ« identifikuar me modelet AI GPTâ5.6 dhe Gemini 4 Argon. Kompania OpenAI publikoi utilitarin php2shell-checker pĂ«r tĂ« verifikuar pĂ«r hiç infrastruktura dhe skedarĂ« tĂ« ekzekutueshĂ«m lokalĂ«, por ky utilitar vetĂ«m kontrollon numrin e versionit PHP qĂ« kthehet nga serveri HTTP ose komanda "php -v", pa analizĂ« tĂ« detajuar.
Shtesë 2: Autori i prototipit të eksploitatit që përdor vulnerabilitetin e shkaktuar nga çlirimi i dyfishtë i memories, njoftoi se problemi mbetet pa u rregulluar në publikimin PHP 8.5.12 dhe eksploiti vazhdon të funksionojë. Më parë, përfaqësuesit e PHP thanë se ky vulnerabilitet nuk është i lidhur me rregullimet e pritshme dhe nuk është një problem real. Sidoqoftë, autori i eksploitatit pretendoi se është një vulnerabilitet krejtësisht ndryshe.
Burimi: opennet.ru
