Nginx서버에서 PHP 기반의 웹서버를 실행 중 PHP-FPM 기능의 특정 설정이 되어 있는 경우 “CVE-2019-11043” 취약점으로 인해 공격자가 원격 코드를 실행할 수 있다.
[이미지 출처: thehackernews.com]
해당 취약점은 필드에서는 흔하지 않는 특정 PHP-FPM 구성의 웹 서버에 영향을 미친다. PHP-FPM란 PHP 프로그래밍 언어로 작성된 스크립트에 대하여 고효율 처리를 해주는 PHP FastCGI 환경이다.
취약점의 원인은 PHP-FPM 모듈의 "env_path_info"언더 플로우 메모리 손상 문제이며, 이를 다른 문제와 함께 연결하면 공격자가 취약한 웹 서버에서 원격으로 임의 코드를 실행할 수 있다.
취약한 Nginx 및 PHP-FPM 설정은 다음과 같다.
[그림1 : 취약한 Nginx 및 PHP-FPM 설정]
fastcgi_split_path_info 지시어를 정의하는 샘플 정규식은 split 함수가 결국 경로 정보를 비워 두는 방식으로 개행 문자를 사용하여 조작할 수 있다.
다음으로, FPM 코드의 env_path_info에 실제로 서버에 파일이 있는지 확인하지 않고 PHP 스크립트 경로와 동일한 접두사가 있다고 가정하는 산술 포인터가 있으므로 공격자가 데이터를 덮어쓸 수 있다. 타겟팅 된 웹 서버에 특수하게 조작된 URL을 요청하여 메모리에 저장하는 방식이다.
[그림2 : PoC 코드 실행 ]
대상 서버의 PHP-FPM 구성 파일의 맞는 php.ini 값을 추가함으로써 공격자는 웹쉘을 사용하여 임의 코드를 실행할 수 있다.
[그림3 : 원격 코드 실행 ]
[권고 사항]
해당 취약점은 특정한 웹서버를 사용해야 하고, 언어, 버전 등 특정한 설정을 충족해야 하기 때문에 공격이 우려되는 서버는 많지 않을것으로 추정된다. 하지만 이미 공격자들은 조건을 충족하는 웹 사이트에 대해 검색을 시작하고 공격을 준비하고 있을 것이다. 따라서 사용자는 취약 할 수 있는 설정을 변경하거나, PHP를 최신버전인 7.3.11 또는 7.2.24로 업데이트 할 것을 권고한다.
[참조]
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11043
https://github.com/neex/phuip-fpizdam
https://thehackernews.com/2019/10/nginx-php-fpm-hacking.html
보안관제센터 MIR Team