Ne oldu?
PHP Foundation'ın yayımladığı post-mortem raporuna göre, PHP'nin hata yönetimi mekanizmasındaki kritik bir uzaktan kod çalıştırma (RCE) açığı, kamuya duyurulmadan yaklaşık iki yıl önce küçük bir bakımcı ekibi tarafından biliniyordu. Ekip, üçüncü taraf eklentilerle uyumluluğu koruyarak düzeltme yollarını tartışırken açık kamuya açılmadan önce istismar edilmeye başlandı.
Teknik kök neden
Sorun, PHP motorunun bellek yetersizliği durumunda başvurduğu longjmp() C fonksiyonuna dayanıyor. Bu fonksiyon, yürütmeyi aniden başka bir noktaya atlıyor. Atlama, bir veri yapısı (dizi girdisi veya nesne) oluşturulurken gerçekleşirse bellekte yarım kalmış veri kalıyor. Temizlik kodunun bu tutarsız baytlar üzerinde çalışması, uygun içerik enjekte edildiğinde saldırganın PHP'nin izinleriyle kod çalıştırmasına olanak tanıyor.
PHP2Shell istismarı
Aktif PHP2Shell istismarı, bu mekanizmayı zincirleyerek uzak kabuk erişimi sağlıyor. Saldırının başarılı olması için hedefin tam PHP sürümünü ve derlemesini bilmek gerekiyor; ancak aynı sürümü çalıştıran on milyonlarca sunucu, saldırı yüzeyini genişletiyor. Açık kamuya duyurulduktan sonra birçok sistem yöneticisi sürüm numarası bildirimini kapattı.
Asıl sorun: bakımsızlık
Rapora göre PHP Foundation bir tam zamanlı çalışan ve 14 yarı zamanlı yükleniciyle internetin en yaygın yazılımlarından birini sürdürüyor. Ayrıca açık duyurulduğunda çevrimiçi PHP kurulumlarının %73'ü destek dışı sürümlerde çalışıyordu. Güncel bakımı sürdürülen dallar PHP 8.1'den 8.5'e uzanıyor; PHP 7 kullanan siteler için yükseltme, dil değişiklikleri nedeniyle ek revizyon gerektiriyor.



