Haavoittuvuus NGINX PHP-FPM -toteutuksessa | Traficom

Haavoittuvuus NGINX PHP-FPM -toteutuksessa

28. lokakuuta 2019 klo 16.25

Web-palvelimet joissa käytetään yhdessä NGINX -palvelinohjelmistoa sekä PHP FastCGI Process Manager (PHP- FPM) -toteutusta ovat alttiita vakavalle haavoittuvuudelle tietyillä määrityksillä. Verkon yli toimiva hyökkääjä voi suorittaa ohjelmakoodia pääkäyttäjän oikeuksin haavoittuvassa järjestelmässä (Remote Code Execution).

Haavoittuvuuden (CVE-2019-11043) hyväksikäyttämiseksi hyökkääjän tulee lähettää tietyllä tavalla muotoiltu yksinkertainen HTTP-pyyntö. Hyväksikäytölle on olemassa kuitenkin seuraavat reunaehdot:

  1. NGINX palvelun asetuksissa "location" -määre ohjaa pyynnöt PHP-FPM toiminnolle
  2. "fastcgi_split_path_info "-määre sisältää säännön mukaisen lausekkeen (regular expression) joka alkaa "^" -merkillä ja päättyy "$" -merkkiin
  3. "fastcgi_param" -määrettä on käytetty PATH_INFO muuttujan asettamiseksi
  4. Tiedostojen olemassaolosta ei ole tehty tarkistuksia esim. "try_files" tai "if" lausekkeella

joten haavoittuvuus ei esiinny kaikissa NGINX ja PHP-FPM ohjelmistoja käyttävissä ympäristöissä. Yllä kuvatut määritykset eivät kuitenkaan ole erityisen harvinaiset mikäli palvelimella käytetään kyseistä yhdistelmää.

Avoimen lähdekoodin Nextcloud -tiedostonjako-ohjelmiston valmistaja on julkaissut päivityksen haavoittuvuuteen, koska ohjelmiston oletusasetukset ovat mahdollistaneet haavoittuvuuden hyväksikäytön.

Haavoittuvuutta on havaittu hyväksikäytettävän aktiivisesti maailmalla ja asiasta on uutisoitu mediassa viime päivinä. Emme ole vielä havainneet onnistuneita hyväksikäyttötapauksia Suomessa. Haavoittuvuuden hyödyntämisen havainnollistava esimerkkikoodi (PoC) on julkisesti saatavilla, eikä sen käyttö vaadi syvällistä teknistä osaamista.

Suosittelemme päivittämään haavoittuvat ympäristöt mahdollisimmannopeasti, koska haavoittuvia järjestelmiä on mahdollista myös kartoittaa julkaistun PoC -koodin avulla.

Haavoittuvuuden kohde

  • PHP 7.3.11 (current stable) jakelua aiemman versiot
  • PHP 7.2.24 (old stable) jakelua aiemman versiot

 

Mistä on kysymys?

Korjaava ohjelmistopäivitys PHP7 -ohjelmistoon on julkaistu 24.10.2019:

Mitä voin tehdä?

PHP-FPM - A simple and robust FastCGI Process Manager for PHP
https://php-fpm.org/

CVE-2019-11043
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11043

Urgent security issue in NGINX/php-fpm
https://nextcloud.com/blog/urgent-security-issue-in-nginx-php-fpm/.

PHP Remote Code Execution 0-Day Discovered in Real World CTF Exercise
https://lab.wallarm.com/php-remote-code-execution-0-day-discovered-in-real-world-ctf-exercise/

Vulnerability in PHP-FPM Could Lead to Remote Code Execution on nginx
https://www.tenable.com/blog/cve-2019-11043-vulnerability-in-php-fpm-could-lead-to-remote-code-execution-on-nginx

New PHP Flaw Could Let Attackers Hack Sites Running On Nginx Servers
https://thehackernews.com/2019/10/nginx-php-fpm-hacking.html

Nasty PHP7 remote code execution bug exploited in the wild
https://www.zdnet.com/article/nasty-php7-remote-code-execution-bug-exploited-in-the-wild/

Palvelimet ja palvelinsovellukset

Palvelinten ja palvelinohjelmistojen haavoittuvuudet koskevat esimerkiksi sähköisten asiointipalvelujen tarjoajia. Tyypillisiä kohteita ovat palvelinten käyttöjärjestelmät ja www- tai sähköpostipalvelinohjelmistot kuten esimerkiksi SunOS, Linux, Apache, IIS tai Sendmail.

Etäkäyttö

Etäkäyttöisesti tehtävän hyökkäyksen voi tehdä tietoverkkoyhteyden tai vastaavan kautta ilman että pääsee itse kohteena olevan järjestelmän luokse.

Ilman käyttäjän toimia

Ilman käyttäjän toimia tapahtuva hyökkäys kohdistuu suoraan haavoittuvuuteen ilman että järjestelmän käyttäjältä vaaditaan mitään toimia hyökkäyksen onnistumiseksi. Käyttäjän ei esimerkiksi tarvitse selailla www-sivuja tai käynnistää ohjelmaa tietokoneessa, vaan hyökkäys onnistuu ilman käyttäjän apua.

Ilman kirjautumista

Hyökkäys ei vaadi kohteena olevaan järjestelmään kirjautumista. Vastakohtana ovat sellaiset hyökkäykset, jotka vaativat käyttäjätunnuksen ja salasanan käyttöä ja esimerkiksi komentojen suorittamista järjestelmään kirjautuneena.

Komentojen mielivaltainen suorittaminen

Komentojen mielivaltaisen suorittamisen mahdollistavaa haavoittuvuutta on pidettävä vakavana, sillä se tarkoittaa sitä, että hyväksikäyttäjä voi käyttää kohteena olevaa järjestelmää aivan kuin sen tavallinen käyttäjäkin. Se voi johtaa myös siihen, että järjestelmään murtautunut hyökkääjä voi ladata verkon kautta järjestelmään omia ohjelmiaan suoritettavaksi.

Suojauksen ohittaminen

Suojauksen ohittamisella tarkoitetaan sitä, että haavoittuvuutta hyväksikäyttämällä ohitetaan järjestelmän käytön rajoittamiseksi tehty suojaus esimerkiksi liikennöimällä palomuurin ohi suojattuun verkkoon.

Rikollisessa käytössä

Haavoittuvuus on rikollisessa käytössä.

Haavoittuvuuden havainnollistava esimerkkikoodi

Proof of concept.

Korjaava ohjelmistopäivitys

Ohjelmisto- tai laitevalmistaja julkaisee tavallisesti pian uuden version tai osittaisen päivityksen ohjelmistoon tai käyttöjärjestelmään sen jälkeen kun haavoittuvuus on tullut julki. Päivitys voi olla saatavilla samalla kun haavoittuvuuskin julkaistaan, mutta usein sitä joudutaan odottelemaan jonkin aikaa.

Ongelman rajoittaminen

Vaikka varsinaista korjausta haavoittuvuuteen ei aina ole saatavilla, sen vaikutuksia voidaan useimmiten rajoittaa esimerkiksi pidättäytymällä tilapäisesti jonkin ominaisuuden käytöstä tai rajoittamalla verkkoliikennettä kohdejärjestelmään sopivasti.