సర్వర్‌లో రిమోట్ కోడ్ అమలును అనుమతించే php-fpmలో దుర్బలత్వం

అందుబాటులో ఉంది PHP 7.3.11, 7.1.33 మరియు 7.2.24 యొక్క దిద్దుబాటు విడుదలలు, ఇందులో తొలగించబడింది క్రిటిచెస్కాయా దుర్బలత్వం (CVE-2019-11043) PHP-FPM (FastCGI ప్రాసెస్ మేనేజర్) పొడిగింపులో, ఇది సిస్టమ్‌లో మీ కోడ్‌ని రిమోట్‌గా అమలు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. PHP స్క్రిప్ట్‌లను అమలు చేయడానికి Nginxతో కలిపి PHP-FPMని ఉపయోగించే సర్వర్‌లపై దాడి చేయడానికి, ఇది ఇప్పటికే పబ్లిక్‌గా అందుబాటులో ఉంది కార్మికుడు దోపిడీ.

“fastcgi_split_path_info”ని ఉపయోగించి URL యొక్క భాగాలను వేరు చేయడం మరియు PATH_INFO ఎన్విరాన్‌మెంట్ వేరియబుల్‌ని నిర్వచించడం ద్వారా PHP-FPMకి ఫార్వార్డింగ్ చేసే nginx కాన్ఫిగరేషన్‌లలో దాడి సాధ్యమవుతుంది, అయితే మొదట “try_files $fastcgi_script_ని ఉపయోగించి ఫైల్ ఉనికిని తనిఖీ చేయకుండా. ఆదేశం లేదా “if (!-f $) document_root$fastcgi_script_name)". సమస్య కూడా ప్రయోగాత్మక NextCloud ప్లాట్‌ఫారమ్ కోసం అందించబడిన సెట్టింగ్‌లలో. ఉదాహరణకు, నిర్మాణాలతో కూడిన కాన్ఫిగరేషన్‌లు:

స్థానం ~ ​​[^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

మీరు ఈ పేజీలలో పంపిణీ కిట్‌లలో సమస్య పరిష్కారాన్ని ట్రాక్ చేయవచ్చు: డెబియన్, RHEL, ఉబుంటు, SUSE/openSUSE, FreeBSD, ఆర్చ్, Fedora. ప్రత్యామ్నాయంగా, మీరు “fastcgi_split_path_info” లైన్ తర్వాత అభ్యర్థించిన PHP ఫైల్ ఉనికి కోసం తనిఖీని జోడించవచ్చు:

try_files $fastcgi_script_name =404;

ఫైల్‌లో పాయింటర్‌లను మార్చడంలో లోపం కారణంగా సమస్య ఏర్పడింది sapi/fpm/fpm/fpm_main.c. పాయింటర్‌ను కేటాయించేటప్పుడు, PATH_INFO ఎన్విరాన్‌మెంట్ వేరియబుల్ విలువ తప్పనిసరిగా PHP స్క్రిప్ట్‌కి పాత్‌కు సరిపోయే ఉపసర్గను కలిగి ఉండాలని భావించబడుతుంది.
fastcgi_split_path_info డైరెక్టివ్ న్యూలైన్-సెన్సిటివ్ రెగ్యులర్ ఎక్స్‌ప్రెషన్‌ని ఉపయోగించి స్క్రిప్ట్ పాత్‌ను విభజించడాన్ని నిర్దేశిస్తే (ఉదాహరణకు, చాలా ఉదాహరణలు "^(.+?\.php)(/.*)$"ని ఉపయోగించమని సూచిస్తున్నాయి), అప్పుడు దాడి చేసే వ్యక్తి ఒక ఖాళీ విలువ PATH_INFO పర్యావరణ వేరియబుల్‌కు వ్రాయబడింది. ఈ సందర్భంలో, అమలుతో పాటు నిర్వహించారు path_info[0]ని సున్నాకి వ్రాసి FCGI_PUTENVకి కాల్ చేస్తోంది.

ఒక నిర్దిష్ట మార్గంలో ఫార్మాట్ చేయబడిన URLని అభ్యర్థించడం ద్వారా, దాడి చేసే వ్యక్తి “_fcgi_data_seg” నిర్మాణం యొక్క మొదటి బైట్‌కి path_info పాయింటర్‌ని మార్చవచ్చు మరియు ఈ బైట్‌కి సున్నా రాయడం వలన “char* pos” కదలికకు దారి తీస్తుంది. గతంలో ఉన్న మెమరీ ప్రాంతానికి పాయింటర్. FCGI_PUTENV అని పిలువబడే తదుపరిది ఈ మెమరీలోని డేటాను దాడి చేసేవారు నియంత్రించగలిగే విలువతో ఓవర్‌రైట్ చేస్తుంది. పేర్కొన్న మెమరీ ఇతర FastCGI వేరియబుల్స్ యొక్క విలువలను కూడా నిల్వ చేస్తుంది మరియు వాటి డేటాను వ్రాయడం ద్వారా, దాడి చేసే వ్యక్తి కల్పిత PHP_VALUE వేరియబుల్‌ని సృష్టించి, వాటి కోడ్ అమలును సాధించగలడు.

మూలం: opennet.ru

ఒక వ్యాఖ్యను జోడించండి