본 글은 침해 대응을 위한 학습 목적의 자료이며, 실제 시스템에 대한 무단 공격이나 불법적인 행위에 활용하는 것을 금지합니다.
1. 개요
PHP 기반 웹 공격 사례를 살펴보면 auto_prepend_file이나 auto_append_file과 같은 PHP 설정 항목이 공격에 활용되는 경우를 종종 볼 수 있다. 이 방식은 PHP 실행 과정에 적용되는 설정을 외부 입력으로 조작해, 정상 코드와는 무관하게 공격자 코드가 실행되도록 유도하는 원격 코드 실행(RCE) 유형의 공격이다. 특히, CGI 모드로 PHP를 실행하는 웹 서버를 대상으로 빈번히 수행된다.
해당 공격은 과거 CVE-2012-1823(PHP-CGI Argument Injection) 취약점으로 분류되며, 현재 공식 패치 이후에도 레거시 PHP 환경이나 잘못 구성된 서버에서는 여전히 유사한 공격 시도가 이루어지고 있다.
| 구분 | 내용 |
| 공격 유형 | PHP 설정 인젝션 기반 원격 코드 실행 (RCE) |
| 핵심 메커니즘 | HTTP 요청 값이 PHP 설정에 반영되어, 자동 실행 설정이 외부 입력으로 변경되는 구조 악용 |
| 연관 CVE | CVE-2012-1823, CVE-2024-4577 (PHP-CGI Argument Injection) |
| 주요 취약 버전 | PHP v5.3, v5.4 (2012년 패치 이전) |
| 악용 설정 | auto_prepend_file, auto_append_file, allow_url_include 등 |
본 글에서는 이러한 공격의 원리와, 보안 관점에서의 대응 방안을 정리한다.
2. auto_prepend_file / auto_append_file 의 정상 기능
PHP는 스크립트 실행 시 특정 파일을 자동 포함(include)할 수 있는 설정 지시자를 제공한다.
- auto_prepend_file : 사용자가 요청한 PHP 파일이 실행되기 전에 먼저 실행되는 파일
- auto_append_file : 사용자가 요청한 PHP 파일 실행이 끝난 후 추가로 실행되는 파일
[auto_prepend_file]
↓
[사용자가 요청한 PHP 파일]
↓
[auto_append_file]
일반적으로 다음 목적으로 사용된다.
- 공통 설정 초기화
- 인증/보안 공통 로직 삽입
- 공통 로깅 처리
즉, 해당 설정은 PHP 실행 흐름에 강제로 코드를 끼워 넣는 기능 이다.
3. 공격 원리: PHP 설정 주입(Configuration Injection)
3.1. PHP 실행 구조
PHP는 실행될 때 여러 위치에서 설정 값을 받아 동작하는데, 일반적으로 설정은 다음 순서로 적용된다.
- php.ini에 정의된 기본 설정
- 웹 서버(SAPI) 또는 실행 방식에 따른 설정
- 실행 시 전달되는 옵션(런타임 설정)
이 공격에서 문제가 되는 지점은 실행 시 전달되는 옵션 처리 방식이다. 특히 PHP-CGI 환경에서는 PHP가 커맨드라인 프로그램처럼 실행되며, 이때 전달되는 인자(argument)가 PHP 설정 옵션으로 해석된다.
일부 환경에서는 HTTP 요청에 포함된 값이 이 실행 인자로 그대로 전달될 수 있으며, 이 경우 공격자가 요청을 통해 PHP 설정 값을 주입할 수 있는 구조가 된다. 즉, HTTP 요청이 PHP 설정을 변경하는 실행 인자로 처리되는 경우, PHP는 공격자가 의도한 설정(auto_prepend_file 등)을 정상 설정처럼 적용하게 된다.
3.2. 공격자가 설정을 주입하는 방식
공격자는 다음과 같은 요청을 통해 PHP 설정을 덮어쓰려 시도한다.

- -d : PHP 실행 시 설정 값을 강제로 덮어쓰는 옵션
- auto_prepend_file= : PHP가 대상 스크립트를 실행하기 전에 특정 파일을 포함하고 실행하도록 하는 설정
- php://input : HTTP 요청 본문(body)를 파일처럼 읽는 PHP 스트림
공격자가 아래와 같이 요청할 경우,
POST /index.php?-d+auto_prepend_file=php://input HTTP 1.1
PHP 내부(서버)에서는 다음과 같이 동작한다.
include'php://input';
결과적으로 디스크에 파일을 생성하지 않고 메모리 상에서 즉시 PHP 코드가 실행된다.
4. 대응 및 예방 방안
PHP 설정 인젝션 기반 RCE 공격은 특정 취약점 하나만의 문제가 아니라 서버 구성, 실행 방식, 운영 환경 관리가 복합적으로 얽혀 발생한다. 따라서 대응 역시 단일 설정이 아닌, 여러 지점에서 함께 이루어져야 한다.
이 공격의 핵심은 외부 요청이 PHP 실행 설정에 영향을 주는 구조에 있다. 이를 방지하기 위해서는 다음과 같은 기본적인 관리가 중요하다.
- 외부 요청으로 PHP 실행 옵션이 전달되지 않도록 실행 구조를 제한할 것
- auto_prepend_file, auto_append_file과 같은 자동 실행 설정은 사용하지 않을 것
- 더 이상 관리되지 않는 레거시 PHP 환경은 분리할 것
5. 결론
auto_prepend_file과 auto_append_file을 악용한 공격은 PHP 설정을 조작해 정상 로직과 무관하게 코드를 실행하려는 원격 코드 실행 시도이다. 비록 오래된 취약점 구조에 기반하지만, 레거시 환경이나 잘못 구성된 서버에서는 여전히 유효한 위협으로 작용한다. 운영 환경의 버전 관리와 운영 로직 점검 등 주기적인 관리가 필요하다.











































