홈 › PHP2Shell
PHP2Shell (CVE-2026-109618 · CVE-2026-109619) 정리: 영향 버전, 패치, 임시 완화, 흔적 확인
2026년 10월 21일 PHP 보안팀이 공개한 두 취약점입니다. 둘 다 CVSS v4 9.2이고, 로그인 없이 원격에서 웹 워커 권한으로 코드를 실행할 수 있습니다. PHP 7.4~8.1은 공식 수정 릴리스가 없고, 7.3 이하와 PHP 5는 수정 자체가 없습니다.
무엇이 문제인가
CVE-2026-109618 — 메모리 부족 처리 중 메모리 손상
요청을 준비하는 도중 메모리 할당이 실패하면 PHP가 초기화를 중간에 끊습니다. 이후 정리 과정이 덜 만들어진 상태를 정상으로 취급하면서 메모리가 손상됩니다. 조작한 multipart 요청으로 설정된 한도 안에서도 메모리를 소진시킬 수 있습니다. Apache 모듈(mod_php)은 요청 시작이 실패해도 정리가 실행되기 때문에 가장 위험합니다.
CVE-2026-109619 — 요청 사이에 남는 해제된 메모리(use-after-free)
여러 요청을 처리하는 워커가 이전 요청에서 이미 해제된 메모리를 가리키는 값을 들고 있다가, 다음 요청에서 그 값을 읽습니다. 치명적 오류, 메모리 소진, 시간 초과로 정리가 끊길 때 생깁니다. 세션 업로드 진행률 기능(기본 켜짐)과 PHP 8.5의 fatal_error_backtraces(기본 켜짐)를 통해 악용됩니다.
영향받는 실행 방식: PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, LiteSpeed 등 웹 요청을 처리하는 모든 설치.
영향 버전과 수정 버전
| 버전대 | 취약 | 수정 버전 |
|---|---|---|
| PHP 8.2 | 8.2.34 이하 | 8.2.35 |
| PHP 8.3 | 8.3.35 이하 | 8.3.36 |
| PHP 8.4 | 8.4.26 이하 | 8.4.27 |
| PHP 8.5 | 8.5.11 이하 | 8.5.12 |
| PHP 7.4 | 전부 | 공식 릴리스 없음 · 소스 백포트 또는 배포판 패키지 |
| PHP 8.0 | 전부 | 공식 릴리스 없음 · 소스 백포트 또는 배포판 패키지 |
| PHP 8.1 | 전부 | 공식 릴리스 없음 · 소스 백포트 또는 배포판 패키지 |
| PHP 7.3 이하, PHP 5 | 전부 | 수정 없음 · 업그레이드 |
내 버전은 PHP 버전 판정기에서 바로 확인할 수 있습니다.
지금까지의 경과
- 10월 20일: 예정된 공개일(22일) 전에 세부 내용이 SNS로 유출됐습니다. PHP 보안팀이 21일 긴급 릴리스를 예고했습니다.
- 10월 21일: PHP가 보안 공지와 8.5.12 · 8.4.27 · 8.3.36 · 8.2.35를 공개했습니다. 같은 날 watchTowr가 허니팟에서 실제 공격을 관측했습니다.
- 현재: 공개 PoC가 여러 개 있습니다. Rapid7 분석으로는 각각 특정 OS·PHP·웹서버 조합에서만 동작하고 범용으로 안정적인 것은 아직 없습니다. 10월 22일 기준 CISA KEV에는 등재되지 않았습니다.
해야 할 일
- 웹에서 실제로 쓰는 PHP 버전을 확인합니다.
php -v와 다를 수 있습니다. 사이트 PHP 버전 검사기 - PHP 8.2~8.5: 위 표의 수정 버전 이상으로 업데이트하고 PHP를 쓰는 서비스를 모두 재시작합니다.
- PHP 7.4~8.1: 배포판 보안 업데이트를 받거나 PHP 보안팀의 소스 백포트를 적용합니다. 배포판 패키지는 버전 번호가 그대로여도 고쳐졌을 수 있습니다.
- PHP 7.3 이하: 지원되는 버전대로 업그레이드해야 합니다.
- 인터넷에 노출된 서버, 특히 Apache 모듈로 PHP를 돌리는 서버부터 처리합니다.
바로 업데이트할 수 없을 때: 임시 완화
아래는 Rapid7이 정리한 PHP 측 권고입니다. 노출을 줄일 뿐 완전한 해결이 아니고, 잘못 적용하면 서비스가 멈출 수 있으니 서버를 아는 사람이 적용하세요. 모두 앱의 ini_set()이나 FPM .user.ini로는 늦고, php.ini·FPM 풀·웹서버 설정처럼 요청 해석 전에 적용되는 곳에 넣은 뒤 워커를 재시작해야 합니다.
; 세션 경로 (CVE-2026-109619)
session.upload_progress.enabled = 0
; PHP 8.5 전용
fatal_error_backtraces = 0
; 메모리 부족 경로 (CVE-2026-109618) — 메모리 한도를 끄는 대신 요청 크기를 묶는다
memory_limit = -1
post_max_size = 8M ; 업로드가 필요하면 32M
upload_max_filesize = 6M ; post_max_size보다 작게
앞단(웹서버, WAF)에서 요청 크기, 입력·multipart 개수, 파트별 헤더, 중첩 깊이를 제한하고, multipart를 쓰지 않는 앱이라면 막습니다. 컨테이너·cgroup 메모리 제한은 대안이 되지 않고, RLIMIT_AS·RLIMIT_DATA는 오히려 취약한 경로를 일으킬 수 있습니다.
이미 들어왔는지 확인
로그에 흔적이 없다고 안전하다는 뜻은 아닙니다(Rapid7). 최소한 아래는 확인하세요. 아무것도 지우지 말고 먼저 기록부터 남깁니다.
# 10월 20일 이후 새로 생기거나 바뀐 PHP 파일
find /var/www -name '*.php' -newermt 2026-10-20 -ls
# PHP 워커 비정상 종료 (메모리 손상 시도의 흔적일 수 있음)
grep -iE 'SIGSEGV|signal 11|segfault' /var/log/php*-fpm.log /var/log/apache2/error.log /var/log/httpd/error_log 2>/dev/null
# 웹 계정이 연 낯선 외부 연결
ss -tnp | grep -E 'php|apache|httpd|www-data'
의심스러운 파일이나 연결이 보이면 서버를 끄기 전에 연락 주세요. 증거가 남아 있어야 어디로 들어왔는지 알 수 있습니다.
출처
- PHP 공식 보안 공지 (2026-10-21)
- GHSA-w8hw-w9fx-j79w (CVE-2026-109618) · GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)
- watchTowr FAQ · Rapid7 분석
직접 확인하기 어렵다면
사이트 주소만 보내주시면 웹에서 실제로 쓰는 PHP 버전과 PHP2Shell 노출 여부를 무료로 확인해 드립니다. Bugcrowd P1 화이트해커가 직접 봅니다.
무료 점검 요청하기긴급 보안 패치 40만 원부터 · 레거시(7.4~8.1) 백포트 패치 60만 원부터 · 작업 전 파일과 DB 전체 백업 · VAT 별도
자주 묻는 질문
PHP2Shell은 어떤 버전에 영향을 주나요?
PHP 8.2.35, 8.3.36, 8.4.27, 8.5.12 미만의 모든 버전과 PHP 7.4~8.1 전체, 그리고 지원이 끝난 7.3 이하와 PHP 5까지 영향을 받습니다.
PHP 7.4나 8.1은 어떻게 고치나요?
공식 수정 릴리스가 없습니다. 배포판 패키지라면 보안 업데이트를 받고, 직접 빌드했다면 PHP 보안팀이 공개한 소스 백포트를 적용합니다. 배포판 패키지는 버전 번호가 그대로여도 고쳐졌을 수 있습니다.
설정만 바꿔서 막을 수 있나요?
아닙니다. PHP 공식 입장으로 어떤 설정 변경도 완전히 막지 못합니다. 세션 업로드 진행률 끄기 같은 임시 완화는 노출을 줄일 뿐이며, 완전한 해결은 업데이트입니다.
실제로 공격이 일어나고 있나요?
watchTowr가 10월 21일부터 허니팟에서 실제 공격을 관측했고, 공개 PoC도 여러 개 있습니다. 다만 Rapid7에 따르면 아직 모든 환경에서 안정적으로 동작하는 공격 코드는 확인되지 않았습니다.