Sunucuda uzaktan kod yürütülmesine izin veren php-fpm'deki güvenlik açığı

Mevcut PHP 7.3.11, 7.1.33 ve 7.2.24'ün düzeltici sürümleri; elendi kritik Güvenlik açığı (CVE-2019-11043) PHP-FPM (FastCGI Process Manager) uzantısındaki kodunuzu sistem üzerinde uzaktan çalıştırmanıza olanak tanır. PHP betiklerini çalıştırmak için Nginx ile birlikte PHP-FPM kullanan sunuculara saldırmak için bu özellik zaten herkese açıktır. çalışma faydalanmak.

Saldırı, PHP-FPM'ye yönlendirmenin URL'nin bazı bölümlerinin "fastcgi_split_path_info" kullanılarak ayrılması ve PATH_INFO ortam değişkeninin tanımlanması yoluyla gerçekleştirildiği, ancak önce "try_files $fastcgi_script_name" kullanılarak dosyanın varlığının kontrol edilmediği nginx yapılandırmalarında mümkündür. direktifi veya “if (!-f $) document_root$fastcgi_script_name)". Sorun da belirir NextCloud platformu için sunulan ayarlarda. Örneğin, aşağıdaki gibi yapılara sahip konfigürasyonlar:

konum ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

Sorunun çözümünü aşağıdaki sayfalardaki dağıtım kitlerinden takip edebilirsiniz: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Kemer, Fötr şapka. Geçici bir çözüm olarak, “fastcgi_split_path_info” satırından sonra istenen PHP dosyasının varlığını kontrol etmek için bir kontrol ekleyebilirsiniz:

try_files $fastcgi_script_name =404;

Sorun, bir dosyadaki işaretçileri değiştirirken oluşan bir hatadan kaynaklanıyor sapi/fpm/fpm/fpm_main.c. Bir işaretçi atarken, PATH_INFO ortam değişkeninin değerinin, PHP betiğinin yoluyla eşleşen bir önek içermesi gerektiği varsayılır.
fastcgi_split_path_info yönergesi, komut dosyası yolunun yeni satıra duyarlı bir normal ifade kullanarak bölünmesini belirtiyorsa (örneğin, birçok örnek "^(.+?\.php)(/.*)$" kullanılmasını önerir), o zaman bir saldırgan, PATH_INFO ortam değişkenine boş değer yazılır. Bu durumda yürütmenin devamında olduğunu path_info[0]'u sıfıra yazmak ve FCGI_PUTENV'i çağırmak.

Saldırgan, belirli bir şekilde biçimlendirilmiş bir URL talep ederek path_info işaretçisinin “_fcgi_data_seg” yapısının ilk baytına kaydırılmasını sağlayabilir ve bu bayta sıfır yazılması “char* pos”un hareketine yol açacaktır. Daha önce bulunan bir hafıza alanına işaretçi. Bir sonraki adı verilen FCGI_PUTENV, bu bellekteki verilerin üzerine saldırganın kontrol edebileceği bir değer yazacaktır. Belirtilen bellek aynı zamanda diğer FastCGI değişkenlerinin değerlerini de saklar ve saldırgan, bunların verilerini yazarak hayali bir PHP_VALUE değişkeni oluşturabilir ve kodlarının yürütülmesini sağlayabilir.

Kaynak: opennet.ru

Yorum ekle