İçeriğe geç
~/ozhanmengucek

Komut paleti

Sayfa, yazı veya proje arayın

#php3 dk okuma

PHP'de iki kritik açık: PHP2Shell ve yapmanız gerekenler

PHP'de kimlik doğrulama gerektirmeden uzaktan kod çalıştırmaya izin veren iki kritik açık çıktı. Hangi sürümler etkileniyor, ne yapmalı, paylaşımlı hostingdeyseniz neye bakmalısınız; kısaca anlattım.

Bu hafta PHP tarafı epey hareketliydi. 20 Ekim'de PHP ekibi "yarın kritik bir güvenlik güncellemesi geliyor, hazırlıklı olun" diye önden haber verdi. Planlanan açıklama tarihinden önce detaylar sızınca güncellemeler 21 Ekim'de yayınlandı. Açıklar CVE-2026-109618 ve CVE-2026-109619 numaralarıyla geçiyor, internette de "PHP2Shell" adıyla dolaşıyor.

Neden önemli olduğunu tek cümleyle söyleyeyim: kimlik doğrulama gerekmeden, dışarıdan gönderilen bir istekle sunucuda kod çalıştırılabiliyor. İkisi de CVSS 9.2 puan almış ve PHP 5.4'ten bu yana neredeyse bütün sürümleri etkiliyor.

Ne oluyor?

Teknik detaya çok girmeyeceğim, merak eden olursa resmi duyuruların linklerini yazının sonuna ekledim. Kabaca şöyle:

CVE-2026-109618: PHP bir isteği işlerken belleği biterse, istek verisi yarım yamalak hazırlanmış halde kalabiliyor. Ardından çalışan temizlik adımı bu bozuk veriyi geçerli sanıyor. Özel hazırlanmış bir multipart istekle (dosya yükleme formlarının kullandığı türden) bu durum tetiklenebiliyor, üstelik tanımlı boyut limitlerinin içinde kalarak.

CVE-2026-109619: Bir isteğe ait iç durum, belleği serbest bırakıldıktan sonra da ortada kalabiliyor. Aynı worker'a düşen bir sonraki istek bu bayat veriyi kullanıyor. Bildiğimiz use-after-free.

En riskli kurulum Apache + mod_php. Orada saldırı, sizin uygulama kodunuz daha hiç çalışmadan tetiklenebiliyor. PHP-FPM, php-cgi, FrankenPHP ve LiteSpeed de etkilenenler listesinde. Yani "Laravel kullanıyorum" ya da "WordPress'im güncel" demek burada bir şey değiştirmiyor. Sorun uygulamada değil, PHP'nin kendisinde.

Ne yapmalı?

Kısa cevap: güncelleyin. Düzeltilmiş sürümler şunlar:

  • PHP 8.5.12
  • PHP 8.4.27
  • PHP 8.3.36
  • PHP 8.2.35

Hangi sürümü kullandığınızı terminalden görebilirsiniz:

php -v

Yalnız komut satırındaki PHP ile web sunucusunun kullandığı PHP aynı olmayabilir. En garantisi bir phpinfo() sayfasına bakmak. Baktıktan sonra o dosyayı silmeyi unutmayın.

Linux dağıtımlarına yamalar önceden verildi, PHP'yi apt ya da dnf ile kurduysanız paket güncellemesi yeterli. PHP 8.1 ve öncesi artık resmi güncelleme almıyor. Ekip istisnai olarak 7.4, 8.0 ve 8.1 için kaynak koduna yama yayınladı ama derlemek size kalıyor. Hâlâ 7.x'te çalışan projeleriniz varsa sürüm yükseltmeyi daha fazla ertelememek için iyi bir bahane bu. Bu arada 8.2'nin de desteği 31 Aralık 2026'da bitiyor.

Paylaşımlı hosting kullanıyorsanız

Kişisel siteler ve küçük kurumsal sitelerin çoğu paylaşımlı hostingde, cPanel ya da DirectAdmin arkasında çalışıyor. Orada PHP'yi siz değil hosting firması günceller. Sizin yapabileceğiniz iki şey var:

  1. Paneldeki PHP sürüm seçicide hangi sürümün seçili olduğuna bakın. 7.4, 8.0 ya da 8.1'de kaldıysanız desteklenen bir sürüme geçin. Geçmeden önce sitenizin o sürümde sorunsuz çalıştığını kontrol edin.
  2. Hosting firmanıza "PHP2Shell yamaları uygulandı mı?" diye kısa bir destek talebi açın. Ciddi firmalar bunu zaten duyurmuştur.

Hemen güncelleyemiyorsanız

Resmi duyuruda geçici önlemler de var, ama ekip açık açık "bunlar sizi güvende yapmaz, sadece bazı saldırı yollarını kapatır" diyor. Güncellemeyi beklerken php.ini'ye (ya da FPM pool ayarına) şunları ekleyebilirsiniz:

; CVE-2026-109619 için doğrulanmış session yolunu kapatır
session.upload_progress.enabled = 0
 
; Sadece PHP 8.5 kullanıyorsanız
fatal_error_backtraces = 0
 
; Sitede dosya yükleme yoksa
post_max_size = 8M

Burada dikkat edilmesi gereken birkaç şey var:

  • Bu ayarları ini_set() ile ya da .user.ini dosyasıyla yapmak işe yaramıyor, çünkü çok geç devreye giriyorlar. php.ini, FPM pool ya da sunucu yapılandırmasında olmalı. Değiştirdikten sonra bütün worker'ları yeniden başlatın.
  • Duyuruda CVE-2026-109618 için memory_limit=-1 önerisi de var. Bunu yayındaki bir sunucuda yapmadan önce iki kez düşünün. Bellek sınırını kaldırmak başka dertler açabilir, ekip de bunun tam çözüm olmadığını söylüyor.
  • 23 Ekim'de ek bir bilgilendirme geldi. Session serialize handler'ını çalışma anında değiştiren uygulamalarda bir RCE yolu daha varmış (CVE-2026-115560). Çok nadir bir durum, ama ekip bir sonraki sürüme kadar session.upload_progress.enabled=0 ayarını açık tutmayı öneriyor. Upload progress özelliğini kullanmıyorsanız (çoğumuz kullanmıyoruz) kapalı kalmasının bir zararı yok.

Şu an ortada dolaşan exploit'ler belirli işletim sistemi, PHP sürümü ve web sunucusu kombinasyonlarında çalışıyor, her yerde güvenilir değil. Ama exploit denemeleri görülmeye başlandı ve daha genel bir yöntemin çıkması an meselesi. "Bizim site küçük, kim uğraşacak" diye düşünmeyin. Bu tür açıklarda tarama otomatik yapılıyor, kimse sitenizi özellikle seçmiyor.

Bu hafta sonunun yapılacaklar listesine bir satır ekleyin: sunucudaki PHP sürümünü kontrol et, güncelle. On dakikanızı almaz.

Kaynaklar

// yorumlar

Henüz yorum yok. İlk yorumu sen yaz.

Yorum yaz

Yorumlar onaylandıktan sonra yayınlanır. E-posta adresin görünmez.

Bağlantı ve biçimlendirme gösterilmez, düz metin olarak yayınlanır.

// benzer yazılar