Deweloperzy PHP ogłosili, że dziś o 17:00 (MSK) zostaną opublikowane pilne poprawki (8.5.12, 8.4.27, 8.3.36 i 8.2.35), które usuną dwie krytyczne luki w zabezpieczeniach. Wszyscy administratorzy serwerów z PHP są zalecani do natychmiastowego zainstalowania poprawek na swoich systemach, zaraz po ich wydaniu. Oficjalne szczegóły zostaną ujawnione dopiero po pojawieniu się poprawek, ale według informacji, które już są powszechnie dostępne, chodzi o luki CVE-2026-109618 i CVE-2026-109619, potencjalnie pozwalające na zdalne wykonanie kodu na każdym serwerze www, który uruchamia skrypty PHP w konfiguracji domyślnej. Problemy występują we wszystkich wersjach, począwszy od PHP 5.4.
W sieci już pojawiły się prototypy exploitów (1, 2) do sprawdzenia podatności systemów na te luki. W notatce dotyczącej exploitu stwierdzono, że luki te są spowodowane dostępem do już zwolnionej pamięci w obsłudze śledzenia postępu przesyłania plików w serwer (session.upload_progress). Nie jest wymagane, aby na stronie istniała funkcjonalność do przesyłania plików, wystarczy automatyczne wywołanie w interpretrze PHP obsługi treści „multipart/form-data”. Aby skutecznie wykorzystać tę lukę, konieczne jest określenie układu struktur w pamięci procesu, który jest specyficzny dla każdej wersji (problem ten jest rozwiązywany przez przeszukiwanie w exploicie przesunięć, wcześniej obliczonych dla pakietów z różnych dystrybucji).
Jako obejście ochrony pojawiają się zalecenia, aby ustawić w php.ini parametr „session.upload_progress.enabled = off” (lub „php_admin_flag[session.upload_progress.enabled] = off” w PHP-FPM), ale przedstawiciel projektu PHP, a także autor pierwszego prototypu exploitu wskazują, że to nie wystarczy, aby zablokować obie luki. W notatce dotyczącej drugiego prototypu exploitu wspomniano, że poza wyżej wymienioną konfiguracją w php.ini, aby zapobiec atakowi bez użycia łaty, konieczne jest całkowite zablokowanie żądań z typem treści „multipart/form-data”, co uniemożliwi przesyłanie plików przez formularze webowe.
W Apache httpd, aby zablokować zapytania multipart, można użyć następującej reguły w mod_rewrite:
RewriteCond %{HTTP:Content-Type} multipart [NC]
RewriteRule ^ - [F,L]
Aby zablokować w nginx:
if ($http_content_type ~* "multipart") {
return 403;
}
Aby zablokować w Caddy:
@multipart header_regexp Content-Type (?i)multipart
respond @multipart 403
Uzupełnienie: Opublikowane zostały poprawki do PHP 8.5.12, 8.4.27, 8.3.36 i 8.2.35, a także szczegóły dotyczące naprawionych krytycznych podatności. Analiza luk oraz oficjalnie zalecane obejścia zostały opublikowane w osobnym komunikacie.
Źródło: opennet.ru
