PHP-ove funkcije za obradu slika ranjive na napade preko zloupotrebljenih JPEG datoteka
Dvije kritične ranjivosti u PHP funkcijama za obradu slika omogućavaju napadačima curenje podataka i DoS napade preko zlonamjernih JPEG datoteka.
Šta se desilo?
Otkrivene su dve kritične ranjivosti u PHP-u koje omogućavaju napadačima da izazovu curenje podataka iz memorije ili izvedu denial-of-service napade. Problemi postoje u funkcijama getimagesize i iptcembed koje koriste JPEG datoteke sa specijalnom strukturom. Ranjena verzija je preko milijarde PHP instalacija trenutno u upotrebi na svetskoj mreži.
Koga pogađa?
Rizik je posebno visok za veb-aplikacije koje dozvoljavaju korisnicima da učitavaju slike - platforme za deljenje sadržaja, sistemi za upravljanje sadržajem, web-mail servise, CDN servise koji analitički obrađuju slike, kao i bilo koji server koji koristi PHP verzije 8.1 pre 8.1.34, 8.2 pre 8.2.30, 8.3 pre 8.3.29, 8.4 pre 8.4.16 i 8.5 pre 8.5.1.
Kako se zaštititi?
- Hitno ažurirajte PHP na preporučene verzije koje sadrže zakrpe
- Ako ažuriranje nije moguće, onemogućite funkcije getimagesize i iptcembed ili ograničite pristup samo pouzdanim JPEG datotekama
- Implementirajte strogu validaciju JPEG datoteka pre nego što ih obradite
- Monitorujte log datoteke za neobične greške pri obradi slika
- Razmotrite upotrebu Web Application Firewall-a koji filtrira zloupotrebljene JPEG strukture
Tehnički detalji
Prva ranjivost (CVE-2025-14177, CVSS 6.3) pogađa funkciju getimagesize koja nepravilno obrađuje JPEG APP segmente tokom čitanja po delovima. Greška je u php_read_stream_all_chunks funkciji koja ne pomera pokazivač buffer-a nakon svakog čitanja, što dovodi do prepisivanja početka buffer-a i ostavljanja neinicijalizovane memorije koja sadrži osetljive podatke procesa. Pogođeni su PHP 8.1.* (pre 8.1.34), 8.2.* (pre 8.2.30), 8.3.* (pre 8.3.29), 8.4.* (pre 8.4.16) i 8.5.* (pre 8.5.1).
Druga ranjivost pogađa funkciju iptcembed i predstavlja klasičan buffer overflow. Funkcija dodeljuje buffer memorije na osnovu jedne fstat provere, ali nastavlja da čita podatke do kraja datoteke bez provere kapaciteta. Kod ne-standardnih tipova datoteka kao što su FIFO-ovi i socket-i, st_size polje je 0, što dovodi do premale alokacije memorije i mogućnosti pisanja van granica buffer-a.
Preporuka Sajber Radara
Ove ranjivosti predstavljaju ozbiljan rizik jer JPEG datoteke mogu doći iz bilo kog izvora. Administratori moraju da prioritizuju ažuriranje PHP-a na sigurne verzije što je pre moguće, jer je izloženost veoma velika na servererima koji to dozvoljavaju.