PHP’de yeni dert: Bir istek, iki açık ve sunucuya kadar uzanan yol
Eski bir tema, güncellenmemiş bir eklenti ya da sunucuda unutulmuş bir PHP dosyası derken bu sefer sorun PHP’nin kendisinde.
21 Ekim’de PHP ekibi CVE-2026-109618 ve CVE-2026-109619 olarak takip edilen iki kritik açık için güncelleme yayımladı. PHP2Shell olarak da anılan bu açıklar, uygun koşullarda saldırganın giriş yapmasına gerek kalmadan sunucuda kod çalıştırmasına yol açabiliyor.
İki açığın da CVSS puanı 9.2. Bu defa iş biraz ciddi...
Açıklar WordPress, Laravel veya belirli bir eklentide değil. PHP’nin web isteklerini işleyen kısmında. Yani PHP’nin etkilenen sürümlerini kullanan farklı uygulamalar da risk altında.
PHP ekibi, PHP-FPM, Apache mod_php, php-cgi, FrankenPHP ve LiteSpeed gibi web isteği alan ortamların etkilendiğini belirtiyor. Özellikle mod_php için risk daha yüksek; uygulamanın kendi kodu çalışmadan önce tek bir istekle saldırının tetiklendiği gösterilmiş.
Nasıl çalışıyor?
İlk açık, PHP’nin bellek sınırı aşıldığında yaptığı temizlik sırasında ortaya çıkıyor.
Bir istek memory_limit sınırını aşınca PHP işlemi durduruyor. Ancak bu sırada isteğe ait bazı veriler henüz tam hazırlanmamış olabiliyor. PHP temizlik yaparken bu verileri geçerliymiş gibi kullanınca bellek bozulması oluşabiliyor.
İkinci açıkta ise bir isteğe ait dahili durum, kullandığı bellek serbest bırakıldıktan sonra geride kalabiliyor. Aynı worker daha sonra başka bir istek işlediğinde, bu eski durumu sıfırlanmadan kullanabiliyor.
Yani biri yarım kalmış verilerle temizlik yapıyor, diğerinde ise eski isteğin geride bıraktığı durum sonraki isteğe karışıyor. İkisi de uygun koşullarda uzaktan kod çalıştırmaya kadar gidebiliyor.
Hangi sürümler etkileniyor?
PHP ekibi düzeltmeleri şu sürümlerde yayımladı:
PHP 8.5 için 8.5.12
PHP 8.4 için 8.4.27
PHP 8.3 için 8.3.36
PHP 8.2 için 8.2.35
Bu dalların daha eski sürümleri etkileniyor. PHP 8.1 ve öncesi de etkileniyor fakat bu sürümler yaşam döngüsünü tamamladığı için PHP projesi bunlara düzeltme yayımlamıyor.
PHP 8.2’nin güvenlik desteği de 31 Aralık 2026’da sona eriyor. Hâlâ eski bir sürümde bekleyen projeler varsa geçişi daha fazla ertelememekte fayda var.
Ne yapmak gerekiyor?
İlk iş, sitenin gerçekten hangi PHP sürümüyle çalıştığını kontrol etmek. SSH erişiminiz varsa php -v ile terminaldeki sürümü görebilirsiniz.
Ama terminalde görünen sürüm ile sitenin kullandığı sürüm aynı olmak zorunda değil. Hosting panelinden siteye atanmış sürümü de kontrol edin. Docker veya başka bir yönetilen servis kullanıyorsanız oradaki sürüme ve sağlayıcının güvenlik duyurusuna da bakın.
Bazı sağlayıcılar düzeltmeyi kendi paketlerine geri taşıyabiliyor. Bu durumda yalnızca sürüm numarasına bakmak yanıltıcı olabilir. Güncellemenin uygulanıp uygulanmadığını sağlayıcınızdan doğrulayın.
Ardından PHP’yi düzeltilmiş sürüme güncelleyin ve web isteklerini karşılayan servislerin yeni sürümle çalıştığından emin olun. PHP ekibi, açıklar için tam koruma sağlayan bir geçici önlem bulunmadığını belirtiyor.
Hemen güncellenemeyen internete açık sistemlerde erişimi kısıtlamak veya sistemi geçici olarak internetten izole etmek de değerlendirilebilir.
Bir de güncelleme yapmak daha önce sisteme bırakılmış bir backdoor’u temizlemiyor. Şüpheli bir durum varsa logları, beklenmedik dosyaları ve hesapları ayrıca kontrol etmek gerekiyor.