서문:
PHP는 2019년 9월 26일 공식적으로 취약점 게시판을 공개했습니다. 이 취약점은 PHP-FPM의 fpm_main으로 인해 발생합니다. c 파일의 env_path_info입니다.
이 취약점은 PHP-FPM + Nginx를 특정 구성과 함께 사용할 때 존재합니다. 이 취약점에 대한 PoC는 2019년 10월 22일에 발표되었습니다. PHP와 Nginx의 조합이 널리 사용됩니다. 공격자는 이 취약점을 이용하여 원격으로 임의의 코드를 실행할 수 있으므로 더욱 유해합니다.
PHP-FPM 구성 요소 소개
PHP-FPM(FastCGI 프로세스 관리자)은 모든 규모의 사이트, 특히 사용량이 많은 사이트에 사용할 수 있는 몇 가지 추가 기능을 갖춘 또 다른 PHP FastCGI 구현입니다.
PHP 5.3.3 이전 PHP의 경우 PHP-FPM은 FastCGI 프로세스 관리를 PHP 패키지에 통합하도록 설계된 패치 패키지입니다. PHP 5.3.3 이전 버전의 PHP를 사용하는 경우 PHP 소스 코드에 패치를 적용해야 하며, PHP를 컴파일하고 설치한 후 사용할 수 있습니다.
그리고 PHP 5.3.3에는 php-fpm이 통합되어 더 이상 타사 패키지가 아닙니다. PHP-FPM은 메모리와 프로세스를 효과적으로 제어하고 PHP 구성을 원활하게 다시 로드할 수 있는 더 나은 PHP 프로세스 관리 방법을 제공합니다.
(연구 권장사항: java 비디오 튜토리얼)
취약점 설명
이 취약점은 PHP-FPM의 fpm_main.c 파일, sapi/fpm/fpm/fpm_main에 있는 env_path_info의 언더플로로 인해 발생합니다. c 파일 라인 1140에는 env_path_info의 접두사가 PHP 스크립트의 경로와 동일하다고 가정하는 포인터 연산이 포함되어 있습니다. 그러나 코드는 이러한 가정이 충족되는지 여부를 확인하지 않으며, 확인이 부족하여 "path_info" 변수에 잘못된 포인터가 발생합니다.
이러한 조건은 표준 Nginx 구성에서 구현할 수 있습니다. 다음과 같은 Nginx 구성이 있는 경우:
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; ... }
공격자는 줄바꿈(%0a로 인코딩됨)을 사용하여 `fastcgi_split_path_info` 지시문의 정규식을 깨뜨릴 수 있습니다. 손상된 정규 표현식으로 인해 빈 PATH_INFO가 발생하고 오류가 발생합니다.
이 오류는 코드 실행 취약점으로 이어질 수 있습니다. 코드 숨김에서는 FCGI_PUTENV를 호출하기 전에 path_info[0]의 값이 0으로 설정됩니다. 공격자는 신중하게 선택한 URL 경로 길이와 쿼리 문자열을 사용하여 path_info가 정확히 _fcgi_data_seg 구조의 첫 번째 바이트를 가리키도록 만들 수 있습니다. 그런 다음 0을 넣으면 'char* pos' 필드가 뒤로 이동하고 FCGI_PUTENV는 일부 데이터(다른 빠른 cgi 변수 포함)를 스크립트 경로로 덮어씁니다.
이 기술을 사용하여 공격자는 가짜 PHP_VALUE fcgi 변수를 만든 다음 신중하게 선택한 일련의 구성 값을 사용하여 코드를 실행할 수 있습니다.
대상 제품:
2019-09-26 업데이트 이전에 다운로드한 PHP-FPM 및 Nginx + php-fpm 서버에 다음 구성을 사용해야 하며 영향을 받습니다.
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; ... }
수리 제안
비즈니스에 다음 구성이 필요하지 않은 경우 사용자가 삭제하는 것이 좋습니다:
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info;
권장 튜토리얼: 서버 보안 튜토리얼
위 내용은 PHP 원격 코드 실행 취약점 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
