TA팀이 분석한 "PHP-CGI 인수 인젝션" 취약점 보고서
해당 취약점은 특정 문자를 임의의 문자로 변환하는 Win32 API 함수의 "Best-Fit Mapping" 기능을 이용하여 인수 인젝션 공격에 사용되는 하이픈(-) 문자를 소프트 하이픈(0xAD) 문자로 변경하여 이스케이프 프로세스를 우회하는 Windows에서 실행되는 PHP-CGI의 인수 인젝션 취약점입니다.
해당 취약점은 PHP 버전을 8.1.29, 8.2.20, 8.3.8로 업데이트할 때 대응할 수 있으며, 당사의 AIWAF 제품에서 악성 PHP 코드를 탐지하여 정상적으로 탐지되고 있습니다.
다만, 소프트 하이픈이 삽입된 공격 구문에 대한 추가 패턴이 필요하기 때문에 추가 분석 및 패턴 개발 단계에 있습니다.
1. 개요
최근 이슈가 된 Windows에서 실행되는 Apache 및 PHP-CGI에서 발생한 Argument Injection 및 Remote Code Execution 취약점에 대해 분석을 진행하였습니다.
이미지 출처 : https://portswigger.net/daily-swig/php-package-manager-component-packagist-vulnerable-to-compromise
2. 공격 유형
해당 취약점은 Windows에서 실행되는 특정 버전의 PHP 기반 서비스를 사용 시 발생하는 취약점으로, watchTowr에서 해당 취약점에 대한 분석 및 Exploit 정보를 공개하면서 크게 이슈가 되었습니다.
PHP-CGI 서비스의 경우 HTTP 요청을 구문 분석하여 php 스크립트에 전달하는데, 기본적으로 Query 문자열의 경우 https://test.com/test=test
와 같은 요청이 php.exe cgi.php test=test
와 같은 형태로 실행됩니다.
해당 사실을 악용하여 임의 명령을 삽입하는 공격을 막기 위해 PHP-CGI에서는 공격에 사용되는 문자들에 대해 Escape를 진행하는데, 공격자는 Windows에서 PHP-CGI가 실행 될 시 특정 문자를 임의 문자로 변환하는 Win32 API 함수의 "Best-Fit Mapping" 기능을 통해 해당 Escape 작업을 우회할 수 있다는 사실을 발견하였습니다.
아래 문자열은 실제 하이픈(-) 문자와 소프트 하이픈(0xAD) 문자로 구성된 호출 문자열로서, 겉보기에는 차이점이 보이지 않으나 HxD를 통해 16진수 형태로 데이터를 확인해보면 다른 문자열임을 확인할 수 있습니다.
php.exe의 실제 하이픈(-) 문자를 활용한 정상 호출과 소프트 하이픈(0xAD) 문자를 활용한 악성 호출.
Hxd로 확인한 호출 비교.
소프트 하이픈 문자는 실제 하이픈 문자가 아니기에 CGI 핸들러에서는 Escape되지 않지만, 앞에서 설명했던 "Best-Fit Mapping" 기능으로 인해 PHP에서는 실제 하이픈 문자로 해석되어 임의 명령 인수를 삽입할 수 있습니다.
따라서 RCE 공격을 수행할 수 있도록 설계된 Argument를 삽입하여 악성 PHP 코드를 실행하도록 유도합니다.
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: www.test.com
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
<?php
phpinfo();
?>
3. 대응 방안
다행히 PHP에서는 빠르게 패치 버전을 발표하여 PHP 버전을 8.1.29, 8.2.20, 8.3.8 버전으로 업데이트 진행 시 해당 취약점에 대해 대응이 가능합니다.
저희 AIWAF 제품에서는 825: Webshell 패턴에서 악성 PHP 코드가 포함된 요청을 기본적으로 탐지하기 때문에 해당 공격 또한 정상 탐지되고 있으나, 소프트 하이픈이 삽입된 공격 구문에 대한 추가적인 패턴이 필요할 것으로 보여 추가 분석 및 패턴 개발 단계에 있습니다.
4. 결론
Windows에서 실행되는 PHP-CGI에서 발생한 Argument Injection 공격의 경우 간단한 방법으로 손쉽게 악용이 가능한 취약점이며, 아직도 많은 곳에서 Apache 등 PHP 기반 서비스를 사용하기 때문에 그 영향도가 높아 빠르게 최신 버전으로 업데이트가 필요합니다.
저희 AIWAF 제품에서는 PHP-CGI에서 발생하는 취약점들에 대해 패턴을 개발하여 대응하고 있으며, 앞으로도 발견되는 관련 취약점들에 대해서도 신속하게 대응할 예정입니다.
5. 참고
- https://nvd.nist.gov/vuln/detail/CVE-2024-4577
- https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/
- https://github.com/watchtowrlabs/CVE-2024-4577