php-fpm:n haavoittuvuus, joka mahdollistaa koodin etäsuorittamisen palvelimella

Saatavissa PHP 7.3.11, 7.1.33 ja 7.2.24 korjaavat julkaisut, joissa eliminoitu kriittinen haavoittuvuus (CVE-2019-11043) PHP-FPM (FastCGI Process Manager) -laajennuksessa, jonka avulla voit suorittaa koodisi etänä järjestelmässä. Jos haluat hyökätä palvelimiin, jotka käyttävät PHP-FPM:ää yhdessä Nginxin kanssa PHP-skriptien suorittamiseen, se on jo julkisesti saatavilla työskentely käyttää hyväkseen.

Hyökkäys on mahdollinen nginx-kokoonpanoissa, joissa edelleenlähetys PHP-FPM:ään suoritetaan erottamalla URL-osoitteen osat käyttämällä "fastcgi_split_path_info" ja määrittelemällä PATH_INFO-ympäristömuuttuja, mutta tarkistamatta ensin tiedoston olemassaoloa komennolla "try_files $fastcgi_script_name". direktiivi tai "if (!-f $) document_root$fastcgi_script_name)". Ongelma on myös ilmenee NextCloud-alustalle tarjotuissa asetuksissa. Esimerkiksi kokoonpanot, joilla on esimerkiksi:

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

Voit seurata ongelman ratkaisua jakelusarjoissa näillä sivuilla: Debian, RHEL, Ubuntu, SUSE / openSUSE, FreeBSD, Kaari, Fedora. Kiertokeinona voit lisätä "fastcgi_split_path_info" -rivin jälkeen tarkistaa pyydetyn PHP-tiedoston olemassaolon:

try_files $fastcgi_script_name =404;

Ongelma johtuu virheestä käsiteltäessä osoittimia tiedostossa sapi/fpm/fpm/fpm_main.c. Osoitinta määritettäessä oletetaan, että PATH_INFO-ympäristömuuttujan arvon tulee sisältää etuliite, joka vastaa PHP-skriptin polkua.
Jos fastcgi_split_path_info-direktiivi määrittää komentosarjapolun jakamisen rivinvaihdolle herkän säännöllisen lausekkeen avulla (esimerkiksi monet esimerkit ehdottavat "^(.+?\.php)(/.*)$" käyttöä, hyökkääjä voi varmistaa, että tyhjä arvo kirjoitetaan PATH_INFO-ympäristömuuttujaan. Tässä tapauksessa eteenpäin suoritusta suoritettu polkuinfo[0] kirjoittaminen nollaan ja FCGI_PUTENV kutsuminen.

Pyydämällä tietyllä tavalla muotoiltua URL-osoitetta hyökkääjä voi siirtää polkuinfo-osoittimen "_fcgi_data_seg" -rakenteen ensimmäiseen tavuun, ja nollan kirjoittaminen tähän tavuun johtaa "char* pos" -merkin liikkumiseen. osoitin aiemmin löytyneelle muistialueelle. Seuraavaksi kutsuttu FCGI_PUTENV korvaa tämän muistin tiedot arvolla, jota hyökkääjä voi hallita. Määritetty muisti tallentaa myös muiden FastCGI-muuttujien arvot, ja kirjoittamalla niiden tiedot hyökkääjä voi luoda kuvitteellisen PHP_VALUE-muuttujan ja suorittaa koodinsa.

Lähde: opennet.ru

Lisää kommentti