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
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:
try_files $fastcgi_script_name =404;
Sorun, bir dosyadaki işaretçileri değiştirirken oluşan bir hatadan kaynaklanıyor
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
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