PHP Ô¶³Ì´úÂëÖ´Ðзì϶°²È«¹«¸æ

°ä²¼¹¦·ò 2019-10-24

·ì϶±àºÅºÍ¼¶±ð


CVE±àºÅ£ºCVE-2019-11043 £¬Î£ÏÕ¼¶±ð£º¸ßΣ £¬CVSS·ÖÖµ£º¹Ù·½Î´ÆÀ¶¨


Ó°Ïì°æ±¾


µ±Nginx + php-fpm µÄ·þÎñÆ÷ÓÐÈçÏÂÅäÖõÄʱ³½ £¬³ÇÊгöÏÖRCE·ì϶


  location ~ [^/]\.php(/|$) {

       fastcgi_split_path_info ^(.+?\.php)(/.*)$;

       fastcgi_param PATH_INFO       $fastcgi_path_info;

       fastcgi_pass   php:9000;

       ...

 }

}


µ±ÆôÓÃÁËÉÏÊö Nginx ÅäÖúó £¬ÒÔÏ PHP °æ±¾Êܱ¾´Î·ì϶ӰÏì £¬Áí±í £¬PHP 5.6°æ±¾Ò²ÊÜ´Ë·ì϶ӰÏì £¬µ«Ä¿Ç°Ö»ÄÜCrash £¬²»³ÉÒÔÔ¶³Ì´úÂëÖ´ÐУº


PHP 7.0 °æ±¾

PHP 7.1 °æ±¾

PHP 7.2 °æ±¾

PHP 7.3 °æ±¾


·ì϶¸ÅÊö


PHP-FPM£¨FastCGIÁ÷³ÌÖÎÀíÆ÷£©ÊÇÁíÒ»ÖÖPHP FastCGIʵÏÖ £¬ÓµÓÐһЩÆäËûÖ°ÄÜ £¬¿ÉÓÃÓÚ¸÷Àà¹æÄ£µÄÕ¾µã £¬ÓÈÆäÊÇæÂÒµÄÕ¾µã¡£


¶ÔÓÚPHP 5.3.3֮ǰµÄphpÀ´Ëµ £¬PHP-FPMÊÇÒ»¸ö²¹¶¡°ü £¬Ö¼ÔÚ½«FastCGI¹ý³ÌÖÎÀíÕûºÏ½øPHP°üÖС£ÈôÊÇÄãʹÓõÄÊÇPHP 5.3.3֮ǰµÄPHPµÄ»° £¬¾Í±ØÐ뽫Ëüpatchµ½ÄãµÄPHPÔ´´úÂëÖÐ £¬ÔÚ±àÒë×°ÖÃPHPºóÄÜÁ¦¹»Ê¹Ó᣶øPHP 5.3.3ÒѾ­¼¯³Éphp-fpmÁË £¬²»ÔÙÊǵÚÈý·½µÄ°üÁË¡£PHP-FPMÌṩÁ˸üºÃµÄPHP¹ý³ÌÖÎÀí·½Ê½ £¬Äܹ»ÓÐЧ½ÚÔìÄÚ´æºÍ¹ý³Ì¡¢Äܹ»»¬Èó³ÁÔØPHPÅäÖá£


ÔÚ9 Ô 14 ÈÕÖÁ 18 ½øÐÐµÄ Real World CTF ÖÐ £¬¹ú±í°²È«×êÑÐÔ± Andrew Danau ÔÚ½â¾öһ· CTF ±êÌâʱ·¢ÏÖ £¬ÏòÖ¸±ê·þÎñÆ÷ URL ·¢ËÍ %0a ·ûºÅʱ £¬·þÎñ·µ»ØÒì³£ £¬ÒÉËÆ´æÔÚ·ì϶¡£


9 Ô 26 ÈÕ £¬PHP ¹Ù·½°ä²¼·ì϶¹«¸æ £¬ÆäÖÐÖ¸³ö£ºÊ¹Óà Nginx + php-fpm µÄ·þÎñÆ÷ £¬ÔÚ²¿ÃÅÅäÖÃÏ £¬´æÔÚÔ¶³Ì´úÂëÖ´Ðзì϶¡£²¢ÇÒ¸ÃÅäÖÃÒѱ»¿í·ºÊ¹Óà £¬·çÏսϴó¡£


Nginx ÉÏ fastcgi_split_path_info ÔÚ´¦ÖôøÓÐ %0a µÄÒªÇóʱ £¬»áÓÉÓÚÓöµ½»»Ðзû \n µ¼Ö PATH_INFO Ϊ¿Õ¡£¶ø php-fpm ÔÚ´¦Öà PATH_INFO Ϊ¿ÕµÄÇé¿öÏ £¬´æÔÚÂß¼­È±µã¡£¹¥»÷Õßͨ¹ý¾«ÐĵĻú¹ØºÍÀûÓà £¬Äܹ»µ¼ÖÂÔ¶³Ì´úÂëÖ´ÐС£


·ì϶ÑéÖ¤


POC£ºhttps://github.com/neex/phuip-fpizdam¡£


½¨¸´½¨Òé


PHPÒÑÓÚ10ÔÂ12ºÅ°ä²¼¸Ã·ì϶²¹¶¡ £¬Çë²Î¿¼ÒÔÏÂÁ´½Ó×°Öò¹¶¡£º


https://bugs.php.net/patch-display.php?bug_id=78599&patch=0001-Fix-bug-78599-env_path_info-underflow-can-lead-to-RC.patch&revision=latest


ÓÉÓÚ·ì϶ÀûÓñØÒªNginx+php-fpm»·¾³ £¬Óû§Ä¬ÈÏ×°ÖõÄÅäÖò»ÊÜÓ°Ïì £¬ÎªÈ·±£°²È« £¬½¨ÒéÄú²é³­±¾µØ Nginx ÅäÖÃÎļþ

CentOSĬÈÏĿ¼Ϊ/etc/nginx/nginx.conf


È·ÈÏÊÇ·ñ´æÔÚÉÏÊö·çÏÕÅäÖà £¬ÈôÊÇ´æÔÚ £¬½¨ÒéÄúÕÒµ½²¢É¾³ýÈçÏÂÅäÖÃÏ


fastcgi_split_path_info ^(.+?\.php)(/.*)$;

fastcgi_param PATH_INFO       $fastcgi_path_info;


²Î¿¼Á´½Ó


https://github.com/neex/phuip-fpizdam