[2024년 6월 취약점 보고서] PHP-CGI Argument Injection | Cloud-Based Platform AIONCLOUD

Threat Intelligence Report

Get up-to-date information on web application vulnerabilities, attacks, and how to respond.

Threat Intelligence Report 메인페이지로 돌아가기

[2024년 6월 취약점 보고서] PHP-CGI Argument Injection

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 취약점에 대해 분석을 진행하였습니다.

image.png

이미지 출처 : 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진수 형태로 데이터를 확인해보면 다른 문자열임을 확인할 수 있습니다.

image.png

php.exe의 실제 하이픈(-) 문자를 활용한 정상 호출과 소프트 하이픈(­0xAD) 문자를 활용한 악성 호출.

image.png

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. 참고

Scroll Up