PHP2Shell, PHP çekirdeğinde kimlik doğrulaması gerektirmeyen iki kritik uzaktan kod çalıştırma (RCE) açığının adıdır. Etkilenen sürümleri, yama planını ve yamayı hemen uygulayamayanlar için geçici önlemleri savunma bakışıyla anlatıyoruz.
Önemli Çıkarım
PHP2Shell, Ekim 2026'da açıklanan iki kritik PHP çekirdek açığıdır: CVE-2026-109618 ve CVE-2026-109619. İkisi de kimlik doğrulaması gerekmeden uzaktan kod çalıştırmaya (RCE) izin verebilir ve CVSS v4.0'da 9.2 puanla derecelendirilmiştir. Birinci ve tek kesin çözüm PHP'yi yamalı sürüme güncellemektir.
- PHP2Shell bir ürün değil; PHP çekirdeğindeki iki kritik RCE açığının ortak adıdır.
- CVE-2026-109618: bellek bozulmasına (OOM/Zend motoru) dayalı RCE. CVE-2026-109619: eski küresel durum (stale global state) üzerinden RCE; bir saldırı yolu session.upload_progress ile ilişkilidir.
- PHP ekibi 21 Ekim 2026'da yamaları yayımladı: 8.5.12, 8.4.27, 8.3.36 ve 8.2.35.
- Yamalama her şeyin önündedir. Geçici önlemler (session.upload_progress kapatma, WAF kuralı) yamayı geciktiremediğiniz durumlar içindir, kalıcı çözüm değildir.
PHP2Shell nedir?
PHP2Shell, PHP programlama dilinin çekirdeğinde bulunan iki ayrı güvenlik açığına verilen isimdir. Açıklar PHP'nin kendisinde olduğu için, PHP ile çalışan WordPress, Drupal, Joomla ve özel yazılımlar dâhil çok geniş bir yüzey etkilenir. En tehlikeli yanı, saldırının kimlik doğrulaması gerektirmemesidir: saldırganın geçerli bir kullanıcı hesabına ihtiyacı yoktur.
Başarılı bir istismar, saldırgana sunucuda komut çalıştırma (RCE) imkânı verir. Buradan dosya okuma, veri sızıntısı, yeni kullanıcı açma ve fidye yazılımı için zemin hazırlama gibi adımlar gelebilir. PHP2Shell'in 'kritik' sayılmasının nedeni budur.
İki açık: CVE-2026-109618 ve CVE-2026-109619
| CVE | Türü | Önemli not |
|---|---|---|
| CVE-2026-109618 | Bellek bozulması (OOM) kaynaklı RCE | Zend motoru çekirdeğindedir; tek bir INI ayarıyla kapatılamaz, çözümü yamadır. |
| CVE-2026-109619 | Eski küresel durum (stale global state) kaynaklı RCE | Bir istismar yolu session.upload_progress ile ilişkilidir; ayarı kapatmak kısmi ve geçici bir önlemdir. |
PHP projesi her iki açığı CVSS v4.0'da 9.2 (kritik) olarak derecelendirdi. İstismar durumu kaynağa ve tarihe göre değişiyor. CrowdStrike 23 Ekim 2026'da yalnızca deneme ve başarısız girişimler gördüğünü yazdı. Palo Alto Networks Unit 42 ise 29 Ekim 2026'da internete açık PAN-OS yönetim arayüzlerine karşı aktif istismar bildirdi. Bu nedenle yamayı bekletmeyin.
Etkilenen ve yamalı sürümler
- Risk altındakiler: web isteği işleyen tüm PHP kurulumları. PHP-FPM, Apache mod_php, php-cgi, FrankenPHP ve LiteSpeed bu kapsamdadır. PHP ekibi en yüksek riskin mod_php'de olduğunu belirtir.
- Yamalı sürümler (21 Ekim 2026): PHP 8.5.12, 8.4.27, 8.3.36 ve 8.2.35.
- PHP 8.1 ve öncesi ömrünü tamamlamıştır (EOL); PHP projesinden resmî sürüm almaz. PHP güvenlik ekibi 7.4, 8.0 ve 8.1 için sınırlı kaynak yamaları yayımlamıştır. PHP 8.2 de 31 Aralık 2026'da EOL olur.
- Dağıtım paketleri ayrı bir hat izler. Örneğin Debian ve Ubuntu paketleri, yukarı akış sürüm numarasından farklı bir sürümle yamayı geri taşıyabilir.
- Bu yüzden yalnızca yukarı akış numarasına değil, kendi dağıtımınızın paket sürümüne bakın.
Öncelik 1: Yamalayın
- Çalışan PHP sürümünü ve nasıl çalıştığını (mod_php, PHP-FPM, CLI) belirleyin.
- Dağıtımınızın yamalı paketini kurun ve ardından PHP-FPM veya web sunucusunu yeniden başlatın.
- Konteyner imajlarını yamalı temel imajdan yeniden oluşturun. Yalnızca çalışan konteyneri yamalarsanız imaj açık kalır.
- Birden fazla PHP sürümü barındıran sunucularda hepsini ayrı ayrı güncelleyin.
- EOL sürümdeyseniz desteklenen bir sürüme geçiş planı yapın; kaynak yamaları yalnızca geçici bir köprüdür.
Yamayı hemen uygulayamıyorsanız
Geçici önlemler istismarı zorlaştırabilir ama açığı kapatmaz. CVE-2026-109618 Zend motoru çekirdeğindedir ve hiçbir INI ayarıyla düzeltilemez. Geçici önlemleri uyguladıktan sonra en kısa sürede yamalayın.
Geçici önlemler (yama öncesi köprü)
- CVE-2026-109618: memory_limit=-1 yapın. Bunu uygulamanın değiştiremeyeceği bir yerde ayarlayın (örneğin php_admin_value). Bu önlem, alttaki bellek ayırma hatalarını engellemez.
- CVE-2026-109618: post_max_size değerini düşürün. Dosya yükleme yoksa 8M, varsa 32M kullanın. upload_max_filesize değerini post_max_size altında tutun.
- RLIMIT_AS veya RLIMIT_DATA kullanmayın. Bu sınırlar açığı tetikleyen bellek hatasına yol açabilir. Bunun yerine konteyner veya cgroup sınırı kullanın.
- CVE-2026-109619: php.ini, FPM havuzu veya sunucu yapılandırmasında session.upload_progress.enabled=0 yapın (ini_set() veya FPM .user.ini ile değil) ve tüm worker'ları yeniden başlatın. Bu, doğrulanmış oturum yollarını engeller, diğer varyantları engellemez.
- CVE-2026-109619: PHP 8.5'te fatal_error_backtraces=0 yapın ve tüm worker'ları yeniden başlatın.
- Saldırganın tetikleyebileceği ölümcül hataları ve yürütme zaman aşımlarını düzeltin.
- Web sunucusu, proxy veya WAF üzerinde istek boyutu, alan sayısı, multipart parça sayısı, başlık sayısı ve iç içe geçme derinliği sınırları koyun. PHP_SESSION_UPLOAD_PROGRESS içeren multipart POST isteklerini sınırlayabilirsiniz.
- Bu önlemleri önce test ortamında deneyin. PHP ekibine göre bu önlemler riski azaltır, ancak kurulumu güvenli yapmaz.
Ayrı konu: CVE-2026-115560
PHP ekibi 23 Ekim 2026'da bu açık için bilgilendirme yayımladı. 21 Ekim sürümleri bu açığı kapatmaz. Açık yalnızca şu durumda oluşur: uygulama session.serialize_handler değerini php_binary veya php_serialize olarak ayarlar, çalışma anında ini_set() ile php yapar ve session upload progress açıktır. Bu yapıyı kullanıyorsanız session.upload_progress.enabled=0 yapın. PHP ekibi tam bildirimi sonraki düzenli sürümle yayımlayacağını belirtti.
Tespit: istismar edilip edilmediğinizi nasıl anlarsınız?
Bellek bozulmasına dayalı istismar, hedef süreçte çökme ve yeniden başlamalara yol açabilir. Katmanlı tespit önerilir:
- Süreç davranışı: PHP-FPM veya web sunucusu sürecinin kabuk, ağ tarama veya şifreleme aracı başlatması güçlü bir alarmdır.
- Çökme ve segfault kayıtları: Web sunucusunda ani ve tekrarlayan segfault/çökme kayıtları incelenmelidir.
- Dosya bütünlüğü: Web kök dizininde beklenmedik yeni veya değişen dosyalar uyarı üretmelidir.
- Erişim kayıtları: PHP_SESSION_UPLOAD_PROGRESS alanı içeren olağan dışı multipart istekleri ve bilinmeyen dosyalara gelen kısa tekrarlı istekler aranmalıdır.
- Giden trafik: Sunucudan beklenmedik dış bağlantılar veri sızıntısına işaret edebilir.
İstismar belirtisi görürseniz
Sunucuyu ağdan izole edin, kayıtları ve bellek görüntüsünü koruyun. Olay müdahale sürecinizi başlatın, erişim bilgilerini yenileyin ve kök nedeni analiz etmeden sistemi geri döndürmeyin.
Moftgate bu açığa karşı nasıl yardımcı olur?
Moftgate yamanın yerini tutmaz; önce PHP'yi güncellemeniz gerekir. Ancak Moftgate uç nokta ajanı, sunucular dâhil uç noktalarda süreç davranışını ve dosya değişikliklerini sürekli izler; böylece bir istismar denemesini erken yakalamanıza yardım eder. PHP-FPM sürecinin anormal bir komut başlatması veya web kök dizinine beklenmedik bir dosya yazılması merkezi konsolda alarm üretir. Yerleşik WORM yedekleme, saldırı fidye aşamasına geçerse verinin değiştirilemez bir kopyasını korur. DLP motoru ise elde edilen erişimle veri dışarı taşınmaya çalışıldığında çıkışı engeller.
Stratejik Çıkarım
PHP2Shell'e karşı tek gerçek çözüm yamadır. Geçici önlemler zaman kazandırır; davranış tabanlı uç nokta izleme ise yamadan önce de sonra da erken uyarı verir. İkisi birlikte çalışmalıdır.
Moftgate Tehdit Araştırmaları Ekibi, web uygulaması ve uç nokta tehditlerini savunma amacıyla inceler. Bu yazı yalnızca savunma ve farkındalık içindir; çalışır bir saldırı kodu veya istismar aracı içermez.
Uygulayıcılar İçin Uzman Yanıtları
PHP2Shell tam olarak nedir?
PHP çekirdeğindeki iki kritik açığın (CVE-2026-109618 ve CVE-2026-109619) ortak adıdır. Her ikisi de kimlik doğrulaması gerekmeden uzaktan kod çalıştırmaya izin verebilir.
Hangi PHP sürümlerine güncellemeliyim?
PHP ekibinin 21 Ekim 2026'da yayımladığı yamalı sürümler 8.5.12, 8.4.27, 8.3.36 ve 8.2.35'tir. Dağıtımınızın geri taşınmış paket sürümünü de kontrol edin. PHP 8.1 ve öncesi EOL'dir; desteklenen bir sürüme geçin.
session.upload_progress ayarını kapatmak yeterli mi?
Hayır. Bu ayar CVE-2026-109619'un bir yolunu zorlaştıran geçici bir önlemdir ve tüm istismarı engellemez. CVE-2026-109618 ise Zend motoru çekirdeğindedir ve hiçbir INI ayarıyla kapatılamaz. Tek kesin çözüm yamadır.
21 Ekim yaması CVE-2026-115560 açığını da kapatır mı?
Hayır. CVE-2026-115560 ayrı bir açıktır. Yalnızca serialize handler değerini çalışma anında php yapan uygulamalarda oluşur. PHP ekibi bu durumda session.upload_progress.enabled=0 önerir.
İstismar edildiğimi nasıl anlarım?
PHP-FPM veya web sunucusu sürecinin anormal komut başlatması, tekrarlayan segfault/çökme kayıtları, web kök dizinindeki beklenmedik dosyalar ve PHP_SESSION_UPLOAD_PROGRESS içeren olağan dışı istekler göstergedir. Şüphede sunucuyu izole edip olay müdahalesi başlatın.
Resmi Standartlar ve Kaynakça
- •PHP: Security advisory: Critical remote code execution vulnerabilities, update now ↗(Resmî duyuru: etkilenen kurulumlar, yamalı sürümler ve geçici önlemler.)
- •PHP: Informational advisory: Session upload progress ↗(CVE-2026-115560 için resmî bilgilendirme.)
- •CrowdStrike: Threats Delivered via PHP2Shell ↗(Açıkların teknik açıklaması ve tespit rehberi.)
- •CrowdStrike: PHP2Shell: Obstacles to Weaponizing Likely Constrain Immediate Exploitation ↗(İstismar koşulları ve 23 Ekim 2026 itibarıyla gözlemler.)
- •Unit 42: Threat Brief: Critical Vulnerabilities in PHP ↗(29 Ekim 2026 tarihli aktif istismar güncellemesi.)
- •sansec.io: PHP2Shell: PHP RCE (CVE-2026-109618, CVE-2026-109619) ↗(Açıkların teknik analizi ve etkisi.)
- •Help Net Security: PHP2Shell: Critical PHP vulnerabilities patched, update now! ↗(Yamalı sürümler ve güncelleme çağrısı.)
- •Datadog Security Labs: PHP2Shell — detection, analysis, and remediation ↗(Tespit, analiz ve giderme rehberi.)
- •AWS Security Blog: Using AWS WAF to apply mitigations for PHP2Shell ↗(WAF ile geçici önlem rehberi.)