በ php-fpm ውስጥ በአገልጋዩ ላይ የርቀት ኮድ አፈፃፀምን የሚፈቅድ ተጋላጭነት

ይገኛል የ PHP 7.3.11፣ 7.1.33 እና 7.2.24 እርማት የተለቀቁ ሲሆን በዚህ ውስጥ ተወግዷል ክሪቲቼስካያ ተጋላጭነት (CVE-2019-11043) ኮድዎን በስርዓቱ ላይ በርቀት እንዲፈጽሙ የሚያስችልዎ በ PHP-FPM (FastCGI Process Manager) ቅጥያ ውስጥ። PHP-FPMን የሚጠቀሙ አገልጋዮችን ለማጥቃት ከNginx ጋር በመተባበር የPHP ስክሪፕቶችን ለማስኬድ አስቀድሞ በይፋ ይገኛል። ሰራተኛ መበዝበዝ.

ጥቃቱ የሚቻለው በ nginx ውቅሮች ውስጥ በPHP-FPM ማስተላለፍ የሚካሄደው የዩአርኤል ክፍሎችን "fastcgi_split_path_info" በመጠቀም በመከፋፈል እና የPATH_INFO አካባቢን ተለዋዋጭ በመወሰን ሲሆን ነገር ግን በመጀመሪያ የፋይሉን መኖር በ"try_files $ fastcgi_script_name" ሳናረጋግጥ መመሪያው ወይም "ከሆነ (!-f $ document_root$ fastcgi_script_name)"። ጨምሮ ችግር ፕራይቬትስ ለቀጣይ ክላውድ መድረክ በቀረቡት ቅንብሮች ውስጥ። ለምሳሌ ፣ ከቅጹ ግንባታዎች ጋር ውቅሮች ለአደጋ የተጋለጡ ናቸው

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

በእነዚህ ገጾች ላይ በስርጭቶች ውስጥ መላ መፈለግን መከተል ይችላሉ፡ ደቢያን, RHEL, ኡቡንቱ, SUSE/ክፍት SUSE, 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 በመደወል።

አንድ አጥቂ በተወሰነ መንገድ የተቀረፀውን ዩአርኤል በመጠየቅ የPat_info ጠቋሚውን ወደ "_fcgi_data_seg" መዋቅር የመጀመሪያ ባይት ሊያንቀሳቅስ ይችላል እና ዜሮን ወደዚህ ባይት መፃፍ የ"ቻር * ፖስ" ጠቋሚውን ወደ ቀድሞው ማህደረ ትውስታ ቦታ ያንቀሳቅሰዋል። ቀጥሎ የተጠራው FCGI_PUTENV አጥቂው ሊቆጣጠረው በሚችለው እሴት በዚህ ማህደረ ትውስታ ውስጥ ያለውን መረጃ ይተካዋል። የተገለጸው ማህደረ ትውስታ የሌሎች የ FastCGI ተለዋዋጮች እሴቶችን ያከማቻል እና ውሂባቸውን በመፃፍ አጥቂው የ PHP_VALUE ተለዋዋጭ መፍጠር እና የኮዱን አፈፃፀም ማሳካት ይችላል።

ምንጭ: opennet.ru

አስተያየት ያክሉ