PHP2Shell은 별도의 PHP 도구나 악성 프로그램 이름이 아닙니다. 2026년 10월 21일 PHP 프로젝트가 수정한 두 가지 심각한 보안 결함을 함께 가리키는 이름입니다. 두 결함은 PHP로 작성한 웹사이트의 특정 기능보다, 웹 요청을 처리하는 PHP 엔진 내부의 메모리와 상태 관리에 관련됩니다.

문제의 결과는 원격 코드 실행입니다. 공격자가 웹을 통해 서버의 PHP 작업자 권한으로 코드를 실행할 수 있다는 뜻입니다. 다만 모든 PHP 설치에서 같은 방법으로 공격이 성공하는 것은 아닙니다. PHP 프로젝트는 Apache mod_php 구성에서 인증 없이 가능한 공격을 검증했고, 다른 웹 실행 환경도 점검 대상으로 안내했습니다. 아래에서는 PHP 공식 보안 공지에 나온 두 결함을 각각 풀어 설명합니다.
핵심 요약
- PHP2Shell은 CVE-2026-109618과 CVE-2026-109619를 함께 부르는 이름입니다. 두 결함 모두 PHP 엔진 내부에서 원격 코드 실행으로 이어질 수 있습니다.
- 첫 번째는 메모리 부족으로 요청 처리가 중단될 때, 두 번째는 이전 요청의 상태가 다음 요청까지 남을 때 문제가 생깁니다.
- 웹 요청을 처리하는 PHP의 수정 버전을 적용하는 것이 핵심 대응입니다. 임시 설정 변경만으로는 완전히 해결되지 않습니다.
PHP2Shell은 서로 다른 두 가지 PHP 결함을 묶어 부릅니다
PHP는 웹 요청을 받을 때 입력을 해석하고, 메모리를 쓰고, 처리가 끝나면 내부 상태를 정리합니다. PHP2Shell의 두 결함은 이 과정의 서로 다른 지점에서 발생합니다. 하나는 메모리 부족으로 작업이 갑자기 중단되는 순간이고, 다른 하나는 작업자가 다음 요청을 받기 전에 이전 요청의 상태를 제대로 버리지 못하는 순간입니다.
따라서 PHP2Shell을 하나의 설정 오류나 웹사이트의 특정 플러그인 문제로 이해하면 범위를 좁게 보게 됩니다. 두 취약점은 PHP 프로젝트가 각각 CVE-2026-109618, CVE-2026-109619로 공개한 PHP 자체의 결함입니다.
메모리 부족 뒤에 불완전한 요청 데이터가 처리될 수 있습니다
CVE-2026-109618은 PHP가 메모리 부족 상태를 처리하는 방식과 관련됩니다. PHP 내부에서 요청 데이터를 준비하는 도중 메모리가 모자라 처리가 중단되면, 아직 완전히 준비되지 않은 데이터가 남을 수 있습니다. 이후 요청을 정리하는 과정이 이 데이터를 정상 상태로 취급하면서 문제가 생깁니다.
이 결함은 웹사이트가 작성한 PHP 코드에 도달하기 전에도 영향을 줄 수 있습니다. PHP 프로젝트는 일반적인 Apache mod_php 구성에서 인증되지 않은 요청을 통한 원격 코드 실행을 검증했습니다. PHP-FPM 등 다른 실행 환경의 조건은 같지 않으므로, 한 환경에서 확인된 공격 경로를 모든 PHP 서버에 그대로 적용해 설명해서는 안 됩니다.
이전 요청의 상태가 다음 요청에 남을 수 있습니다
CVE-2026-109619는 요청 사이의 상태 정리 문제입니다. PHP 작업자는 여러 웹 요청을 차례로 처리할 수 있습니다. 한 요청에 속한 내부 상태가 제대로 지워지지 않으면, 같은 작업자가 다음 요청을 처리할 때 이미 해제된 메모리를 가리키는 값을 다시 사용할 수 있습니다.
이러한 오류를 메모리 해제 후 사용이라고 부릅니다. 쉽게 말해 이미 반납한 작업 공간의 주소를 계속 들고 있다가 다시 참조하는 것입니다. PHP 공식 공지는 오류 처리, 세션 처리, 초기 설정 과정 등 여러 내부 상태가 이 문제에 관여할 수 있다고 설명합니다. 앞의 메모리 부족 결함과 결과는 비슷할 수 있지만 발생 조건은 다릅니다.
웹 요청을 처리하는 PHP가 점검 대상입니다
PHP 프로젝트는 PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, LiteSpeed 등 웹 요청을 받는 PHP 환경을 업데이트 대상으로 안내합니다. 특히 Apache mod_php에서는 애플리케이션 코드 실행 전의 공격이 검증돼 위험이 높다고 평가했습니다. 이는 PHP로 만든 웹사이트가 인증 기능을 갖췄더라도 PHP 엔진 단계의 결함은 별도로 살펴야 한다는 뜻입니다.
| 구분 | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| 문제가 생기는 때 | 메모리 부족으로 요청 처리가 중단될 때 | 한 요청이 끝나고 다음 요청이 시작되기 전 |
| 내부에서 벌어지는 일 | 불완전한 요청 데이터가 정리 과정에서 사용됨 | 해제된 메모리를 가리키는 이전 상태가 남음 |
| 공통 위험 | 원격 코드 실행 가능 | 원격 코드 실행 가능 |
대응은 PHP 수정 버전 적용이 핵심입니다
PHP 공식 수정 버전은 8.2.35, 8.3.36, 8.4.27, 8.5.12입니다. 실제 웹 요청을 처리하는 PHP에 수정 버전 또는 배포업체가 제공한 보안 패치를 적용하고 작업자를 재시작해야 합니다. PHP 8.1 이하는 PHP 프로젝트의 정식 업데이트 대상이 아니므로 지원 버전으로 옮기거나 공급업체의 패치 제공 여부를 확인해야 합니다. 임시 설정 변경은 일부 경로의 위험만 줄이며 완전한 해결책은 아닙니다.
정리하며
PHP2Shell은 PHP 웹 서버의 요청 처리 내부에서 발견된 두 가지 결함을 가리킵니다. 하나는 메모리 부족 뒤의 정리 과정, 다른 하나는 요청 사이에 남는 상태가 문제입니다. 웹사이트의 기능이나 로그인 화면만 살펴서는 이 위험을 판단할 수 없습니다.
두 결함의 원문은 PHP 프로젝트의 2026년 10월 21일 보안 공지와 CVE-2026-109618 기술 공지, CVE-2026-109619 기술 공지입니다. 운영 중인 서버라면 실제 웹 PHP의 보안 패치 적용 여부를 확인하는 것이 다음 단계입니다.
자주 묻는 질문 (FAQ)
Q. PHP2Shell은 설치된 프로그램이나 악성코드인가요?
A. 아닙니다. PHP 엔진에서 발견된 두 보안 취약점을 함께 가리키는 이름입니다.
Q. PHP로 만든 웹사이트라면 모두 같은 위험에 놓이나요?
A. 웹 요청을 처리하는 PHP는 점검 대상이지만, 구체적인 공격 가능성은 PHP 버전과 웹 서버 구성에 따라 다릅니다. PHP 프로젝트는 Apache mod_php에서 실제 공격을 검증했습니다.
Q. 가장 먼저 할 일은 무엇인가요?
A. 웹 요청을 실제로 처리하는 PHP의 버전과 공급업체 패치 여부를 확인하고, 수정 패키지를 적용한 뒤 작업자를 재시작하는 것입니다.
'IT·AI 도구' 카테고리의 다른 글
| 주간 GitHub 인기 저장소가 보여 준 작업 도구의 변화 (0) | 2026.10.23 |
|---|---|
| 오늘 뜬 GitHub 저장소 25개, 분야별로 한눈에 보기 (0) | 2026.10.23 |
| 기술 개념을 움직이는 기계 그림으로 만드는 Anatomy (0) | 2026.10.22 |
| Claude Code 답변을 필요한 만큼만 펼쳐 읽는 cc-stretch (0) | 2026.10.22 |
