On avaldatud PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35 paranduste vÀljalasked ning plaastrid juba toetust mitte saavatele versioonidele PHP 7.4, PHP 8.0 ja PHP 8.1 (haavatavad versioonid alates 5.4 kuni 7.3 jÀÀvad plaastritest ilma), milles on parandatud kaks kriitilist haavatavust:
- CVE-2026-109618 â kaugkoodi tĂ”ukamine, mis on pĂ”hjustatud sellest, et kui protsessi jaoks vaba mĂ€lu on otsa saanud, vĂ”ib mĂ€lu puuduse kĂ€itleja, kasutades funktsiooni longjmp(), katkestada PHP tĂ”lgendi sellises olekus, kus on initsialiseeritud vaid osa sisemistest struktuuridest, mis on seotud pĂ€ringu töötlemisega. JĂ€rgmisel korral pöördub pĂ€ringu töötlemise lĂ”petamise funktsioon nende struktuuride poole, nagu oleks need juba initsialiseeritud, kuigi nende jaoks ei ole mĂ€lu eraldatud.
RĂŒnnaku peamine vektor on multipart-pĂ€ringute manipuleerimine, et luua tingimusi protsessi jaoks vaba mĂ€lu otsa saamiseks. post_max_size limiidi ĂŒmbersĂ”iduks ei pruugi olla mÀÀratud Content-Length pealkirja ja selle asemel edastatakse suur hulk HTTP pealkirju. Samuti on vĂ”imalik spetsiifilisi rĂŒnnakuid php-rakendustes, mis kasutavad ĂŒlemÀÀra palju mĂ€lu. Ekspluudi olemasolu on kinnitatud mod_php puhul, kuna see kutsub funktsiooni shutdown() isegi tĂ”rke korral. PHP-FPM lĂ”petab tĂ”rke korral alamprotsessi, mis raskendab rĂŒnnaku teostamist, kuid teoreetiliselt ei vĂ€lista seda.
- CVE-2026-109619 â kaugkoodi tĂ€itmine, mis on pĂ”hjustatud mĂ€lu juurde pÀÀsemisest pĂ€rast selle vabastamist valede globaalsete seisundite puhastamise tĂ”ttu, mis on seotud konkreetse pĂ€ringuga. Kui pĂ€ring katkestatakse fataalse vea, ajaĂŒlevaate vĂ”i mĂ€lu puuduse tĂ”ttu, vĂ”ib globaalne seisund jÀÀda lĂ€htestamata ja viidatud nĂ€idikud vĂ”ivad jÀÀda aktiivseks, hoolimata sellest, et mĂ€lu, millele nad viitavad, on vabastatud. JĂ€rgmise pĂ€ringu töötlemisel samas protsessis vĂ”ib vĂ€givaldne nĂ€idik viia vana globaalsete seisunditeni.
Ressurside kasutamine vĂ”ib hĂ”lmata tingimuste loomist, mis pĂ”hjustavad mĂ€luhĂ”ive ammendumise multipart-pĂ€ringute töötlemisel laadimise edenemise nĂ€itamiseks (session.upload_progress). Peamiste ja kinnitatud rĂŒnnakuvektoritena mainitakse PHP 8.5 'fatal_error_backtraces' töötlejat, mis ei nulli jĂ€lgimisolekut lĂ”petamisel. Esimesel juhul on rĂŒnnak vĂ”imalik mod_php ja PHP-FPM gegen, teisel juhul ainult mod_php. Samuti mainitakse kinnitamata vĂ”imalust rĂŒnnaku lĂ€biviimiseks seadistustes, mille konfiguratsioonis on direktiivid, mis pĂ”hjustavad hoiatuseteateid pĂ€ringute varases töötlemises (nĂ€iteks hoiatused aegunud parameetrite kasutamise kohta).
Kinnitust on leidnud, et haavatavuste tĂ€ielik blokeerimine on vĂ”imalik ainult vĂ€rskenduse installimise teel. JĂ€rgmised meetmed vĂ”ivad vĂ€hendada rĂŒnnaku Ă”nnestumise tĂ”enĂ€osust, kuid ei tee sĂŒsteemi tĂ€ielikult turvaliseks:
- php.ini parameetri âmemory_limit=-1â seadistamine, mis raskendab rĂŒndaja vĂ”imalust jĂ€lgida mĂ€lu piiride ammendumist.
- Parameetri âpost_max_size = 8Mâ seadmine, kui suuremate failide ĂŒleslaadimine pole vajalik. Parameetri âupload_max_filesizeâ vÀÀrtus peab olema vĂ€iksem parameetri âpost_max_sizeâ vÀÀrtusest.
- MĂ€lu tarbimise limiidi seadmine sĂŒsteemitase, lĂ€bi cgroup memory.max vĂ”i konteineri mĂ€lutarbimise parameetrid, kuid mitte sĂŒsteemsete limiitide RLIMIT_AS ja RLIMIT_DATA kaudu, mis lihtsalt provotseerivad probleemi 'longjmp()'.
- Kui jĂ”udlus pole oluline, vĂ”ib piirata ĂŒhe tööprotsessi poolt töödeldavate pĂ€ringute arvu PHP-FPM-is pm.max_requests=1 ja Apache httpd-s MaxRequestsPerChild abil.
- Seadistamine php.ini tasemel vĂ”i konfiguratsioonis serverid (mitte lĂ€bi ini_set() vĂ”i FPM .user.ini, kuna parameeter peab kehtima enne pĂ€ringu töötlemise algust), parameeter âsession.upload_progress.enabled=0â.
- PHP 8.5 vĂ€ljalaske kasutamisel tuleks seadistada parameeter âfatal_error_backtraces=0â.
- Ăhistele pĂ€ringutele seotud vananenud vĂ”i valede seade eemaldamine (nt assert.* ja vale teed open_basedir'is), mis pĂ”hjustavad diagnostiliste teadete kuvamist enne initsialiseerimist.
- PHP-koodis olukordade kĂ”rvaldamine, mis viivad tĂ€htaegadeni ja fataalsete vigadeni, nĂ€iteks, mis on seotud callback-kĂ€itlejate ja ĂŒleslaadimise töötlemise tĂ”rgetega.
- Vanade PHP versioonide koodis esimese haavatavuse blokeerimiseks vÔib longjmp()-kÔne asendada _exit()iga.
- Lisaks saab php.ini-s max_input_nesting_level parameetri vÀÀrtust vÀhendada ja blokeerida multipart-pÀringud, nagu eelnevalt teatatud.
Haavatavuste parandamise staatust jaotustes saab hinnata jĂ€rgmiste lehekĂŒlgede andmete pĂ”hjal: Debian, Ubuntu, SUSE, RHEL, Gentoo, Arch,
Fedora, FreeBSD.
Lisa 1: Haavatavused tuvastati AI mudelite GPTâ5.6 ja Gemini 4 Argon abil. EttevĂ”te OpenAI avaldas php2shell-checker tööriista, et kontrollida saitide ja kohalike kĂ€ivitatavate failide haavatavust, kuid see tööriist kontrollib ainult HTTP-serveri vĂ”i kĂ€su «php -v» tagastatud PHP versiooninumbrit, ilma ĂŒksikasjalikku analĂŒĂŒsi tegemata.
Lisa 2: Ekspluati prototĂŒĂŒbi autor, mis kasutab mĂ€lu kahekordse vabastamise (double-free) haavatavust, teatas, et probleem jÀÀb parandamata PHP 8.5.12 vĂ€ljaandes ja eksploit jĂ€tkab tööd. Varem on PHP esindajad vĂ€itnud, et see haavatavus ei ole seotud tulevaste parandustega ja ei ole tegelik probleem. Kuid ekspluati autor vĂ€itis, et see on hoopis teine haavatavus.
Allikas: opennet.ru
