Yeni PHP Kusuru Nginx Sunucuları Üzerinde Çalışan Siteleri Saldırıya Açık Hale Getiriyor

Php’nin İnternet için üretilmiş, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, içerisine HTML gömülebilen betik ve programlama dili olduğunu biliyoruz. Nginx ise C dilinde yazılmış yüksek eş zamanlı çalışma kabiliyeti, yüksek performans ve düşük hafıza kullanımına odaklanılarak tasarlanmış bir Web sunucusudur. Aynı zamanda ters vekil sunucusu, yük dengeleyici ve HTTP ön belleği olarak da kullanılabilir. 

Eğer PHP tabanlı bir web sitesi kullanıyorsanız ve daha iyi bir performans almak için PHP-FPM etkileştirildiyse bu durum saldırganların uzaktan bağlantı yaparak sunucunuzda yetkiye sahip olması için bir güvenlik açığı oluşturuyor. PHP-FPM bu arada kısaca PHP’nin yerleşik arayüzünün yönetilebilir versiyonudur. PHP derlenirken ya da hazır derlenmiş paketlerini kurarak kullanılabilir.

 

Bu açığın devamında CVE-2019-11043 ispat kodu izledi ve PHP-FPM ile konfigüre edilmiş sitelerde nadir olmadığı ve bu kusurun önlenebilir fizibilitesi herkese açık bir şekilde paylaşıldı.

 

Tehditin ana kaynağı PHP-FPM’de yer alan “env_path_info” modülü. Bu modül ile birlikte saldırganlar kodun bulunduğu web sunucularına rahatlıkla erişmesini sağlıyor.

 

 

Açık Andrew Danau tarafından bugları yakalamak için yapılan bir CFT yarışmasında keşfedildi. Bu açığı tehdit haline getiren Omar Ganiev ve Emil Lerner, kodu geliştirerek uzaktan erişim koduna dönüştürdü.

 

Araştırmacılar PoC kodunu(CVE-2019-11043GitHub üzerinde paylaştı.

 

Hangi PHP Tabanlı Web Siteleri Savunmasız?

 

Açığın ispat kodu alenen topluluğa sunulsa bile sunucular üzerinde çalışan PHP7 ve üzeri versiyonlar, PHP-FPM bug’ına karşı yetersiz kalmış son sürüm PHP versiyonları farklı şekilde saldırıya açık halde.

 

Özetle tehdit altındaki siteler:

  • NGINX sunucuları PHP sayfa isteklerini PHP-FPM işlemcisine iletmek için konfigüre edilmiş ise
  • “fastcgi_split_path_info” yönergesi halihazırdaki konfigürasyonu düzenli olarak  “ ^ “ sembolü ile başlayıp ve “$” ile bitiyorsa 
  • PATH_INFO değeri fastcgi_param yönergesi ile tanımlıysa
  • Bir dosyanın kontrolü try_files $uri =404 veya (-f $uri) gibi komutlarla yapılmıyorsa tehdit vardır.

 

Açığın bulunduğu NGINX ve PHP konfigürasyonu örneğine bakarsak:

Burada, fastcgi_split_path_info yönergesi PHP web sayfalarındaki URL’yi iki şekilde ayırmış. İlk değer PHP-FPM motorunun script adını öğrenirken diğeri içerdiği path bilgisini öğreniyor.

 

Açık PHP-FPM İçin Nasıl Çalışıyor?

 

Araştırmacılara göre basit bir örnek verecek olursak  fastcgi_split_path_info yönergesi yeni satırdaki karakterin fonksiyonu parçalayarak path bilgisinin boş olmasını sağlıyor. Sonra FPM kodunda bulunan aritmetik işaretçi hatalı olarak env_path_info varsayar ve dosya çıkışı doğrulaması olmadan PHP scriptin öneğine eşitler. Bu oluşan zafiyet de saldırganların bu isteklere özel olarak oluşturulmuş hedef web sitelerin URL’lerin hafızası üzerine aşırı veri yazmasını sağlar:

 

Yukarıda görüldüğü üzere zafiyet kodunu çalıştırarak belleği manipüle ediyor ve php.ini değerlerini ekliyor. Saldırganlar isterse web kabuğunda zararlı kodlarını çalıştırabilirler.

Bir saldırgan URL yolunun ve sorgu dizesinin dikkatlice seçilmiş bir uzunluğunu kullanarak, saldırgan tam olarak fcgi_data_seg yapısının ilk baytını path_info’ya işaret edebilir. 

İçine sıfır koymak `char * pos` alanını geriye doğru hareket ettirir ve FCGI_PUTENV’den sonra bazı yollarının üzerine yazar (diğer hızlı cgi değişkenleri dahil) komut dosyası yolu ile bug ’ı  araştırmacılar PHP projesine raporladıklarını söyledi.

 

PHP 7, FPM Kusuru İçin Güncellendi 

 

Başarılı sömürü için ön koşullar listesi, yukarıda belirtildiği gibi nadir değildir, çünkü güvenlik açığı olan yapılandırmalar bazı web barındırma sağlayıcıları tarafından kullanılmakta ve Internet’te birçok PHP FPM bilgilendirme olarak bulunabilmektedir.

 

Bu tür saldıralardan etkilenen bir web barındırma sağlayıcısı, kullanıcılarına NGINX yapılandırmasının da bu saldırıya karşı savunmasız olduğunu söyleyen ve sistem yöneticilerine derhal harekete geçmeleri  için uyarı veren bir Nextcloud sistemi var.

 

Bu güvenlik açığı için bir düzeltme yaması, araştırmacıların PHP geliştirici ekibine bildirmesinden neredeyse bir ay sonra, 5 gün önce yayınlandı. Bu nedenle, PHP kullanıcılarına en son PHP 7.3.11 ve PHP 7.2.24 ile güncellemeleri şiddetle tavsiye edilir. Güvenlik açığı bulunan konfigürasyonu kullanmasanız bile güncelleştirmeyi yapınız.

 

Tags:

About The Author

Reply