보안 권고 · 2026년 10월 21일 공개

PHP 원격 코드 실행 취약점php2shell 점검

CVE-2026-109618, CVE-2026-109619는 인증 없이 PHP 웹 서버에서 코드를 실행할 수 있는 취약점입니다. 사이트 주소로 노출 여부를 확인하고, 환경에 맞는 조치 방법을 바로 찾으세요.

CVSS v4.0
9.2 Critical(즉시 대응 필요)
공격 조건
원격 · 인증 불필요

2026년 10월 22일 공개 정보 기준

사이트 점검

응답 헤더에 드러난 PHP 버전으로 판정합니다. 공격 요청은 보내지 않습니다.

웹 루트의 알려진 phpinfo 경로 5곳에 추가로 요청합니다. 찾으면 헤더에서 버전을 숨긴 서버도 실제 버전과 설정을 확인할 수 있습니다.

확인하는 경로와 주의 사항
  • 확인 경로: /phpinfo.php, /info.php, /test.php, /i.php, /php_info.php
  • 각 경로에 GET 요청을 한 번씩 보내고, phpinfo 페이지를 찾으면 멈춥니다. 응답은 앞부분 512KB까지만 읽습니다.
  • 공격 요청은 아니지만 공개되지 않은 경로를 요청하므로, 사이트의 보안 장비나 로그에 경로 탐색으로 기록될 수 있습니다.
  • 찾은 경로, PHP 버전, 실행 방식, 관련 설정값만 저장하고 페이지 내용은 저장하지 않습니다.
  • 비침투 점검
  • 수 초 안에 결과
  • 서버 점검 스크립트 제공

점검한 주소와 결과는 내부 통계를 위해 1년간 보관합니다.

영향 버전과 수정 버전

아래 범위에 해당하는 PHP는 업데이트가 필요합니다. 웹 요청을 처리하는 모든 PHP(PHP-FPM, Apache mod_php, CGI/FastCGI)가 대상입니다.

PHP 버전취약한 버전수정 버전
PHP 8.58.5.12 미만8.5.12 이상
PHP 8.48.4.27 미만8.4.27 이상
PHP 8.38.3.36 미만8.3.36 이상
PHP 8.28.2.35 미만8.2.35 이상
PHP 8.1 이하전체수정 릴리스 없음(지원 종료)
  • PHP 8.6.0은 RC4부터 수정이 포함되어 있습니다. 개발판이므로 운영 환경에서는 쓰지 마세요.
  • PHP 8.2는 2026년 12월 31일 지원이 끝납니다. 8.2.35로 올리더라도 상위 버전 이전을 미리 계획하세요.

배포판 백포트 주의

  • Ubuntu, Debian, RHEL 계열 배포판과 cPanel, 관리형 호스팅은 버전 번호를 그대로 둔 채 보안 수정만 적용(백포트)하기도 합니다. 예를 들어 Ubuntu 24.04의 PHP는 8.3.6으로 표시되지만 수정이 적용됐을 수 있습니다.
  • 따라서 위 표의 버전 번호만으로 판단하면 틀릴 수 있습니다. 최종 확인은 패키지 리비전과 배포판 보안 공지(Ubuntu USN, Debian DSA, Red Hat RHSA)로 하세요.
  • 패키지 변경 기록에서 CVE 번호를 찾는 명령은 아래 대응 가이드의 "1. 확인" 탭에 있습니다. 서버 점검 스크립트도 백포트 흔적을 찾으면 참고 메모를 보여 줍니다.

대응 가이드

단계를 고르고 내 서버 환경을 선택하면 필요한 명령과 설정만 보여 줍니다.

응답 헤더로는 일부만 알 수 있습니다. 버전을 숨긴 서버, 내부망 서버, 여러 PHP가 설치된 서버는 서버에서 직접 확인해야 합니다.

Cloudbric 서버 점검 스크립트

설치된 모든 PHP(PHP-FPM, CGI, CLI, Apache mod_php)를 찾아 버전과 관련 설정, 설정 재정의, 업데이트 후 재시작하지 않은 프로세스까지 확인합니다. 읽기 전용이며 외부와 통신하지 않습니다. 사이트 점검을 실행하면 결과 화면에서 받을 수 있습니다.

사이트 점검으로 이동

명령으로 직접 확인

서버 환경

예시는 PHP 8.3 기준입니다. 버전 번호는 서버에 맞게 바꾸세요. CLI와 웹(PHP-FPM, mod_php)은 설정이 다를 수 있습니다.

php -v
php-fpm8.3 -v                     # FPM binary name differs per version
dpkg -l | grep -E '^ii\s+(php|libapache2-mod-php)'
apt changelog php8.3-common | grep -iE 'CVE-2026-10961[89]'

완료 확인

체크 상태는 저장되지 않습니다.

취약점 요약

PHP 프로젝트는 2026년 10월 21일 두 취약점을 공개하고 보안 업데이트를 배포했습니다. 두 취약점을 합쳐 php2shell이라고 부릅니다.

CVE-2026-109618 메모리 부족 처리 중 상태 손상
메모리 부족(OOM) 처리가 요청 데이터 초기화 도중 PHP를 중단시키면, 요청 정리 단계가 불완전한 데이터를 정상 데이터로 다뤄 원격 코드 실행으로 이어질 수 있습니다.
CVE-2026-109619 워커에 남은 전역 상태 재사용
요청이 쓰던 내부 상태가 메모리 해제 뒤에도 남아, 같은 워커가 처리하는 다음 요청이 이를 사용합니다(use-after-free). session.upload_progress 기능이 관련 경로입니다.

영향 범위

  • PHP-FPM, Apache mod_php, CGI/FastCGI 등 웹 요청을 처리하는 모든 PHP
  • 애플리케이션 코드 실행 전 단계에서 성립하므로 로그인 기능이 없는 사이트도 해당
  • PHP를 내장한 네트워크 장비, 어플라이언스, 관리 콘솔 (제조사 패치 필요)
  • CLI 전용 PHP는 웹으로 노출되지 않지만 함께 업데이트 권장

업데이트까지의 공백, Cloudbric WAF+로 줄이세요

운영 중인 서비스는 바로 업데이트하기 어려울 때가 많습니다. Cloudbric WAF+는 php2shell(CVE-2026-109618, CVE-2026-109619) 공격 시도를 탐지·차단하는 보안 규칙을 적용하고 있어, 업데이트를 준비하는 동안 웹 서비스의 노출을 줄일 수 있습니다.

WAF는 패치를 대신하지 않습니다. 원본 서버에 직접 접근할 수 있으면 보호되지 않으므로, 원본 접근 제한과 업데이트를 함께 진행하세요.

긴급 적용 상담하기

자주 묻는 질문

'버전 미노출'은 안전하다는 뜻인가요?

아닙니다. 응답 헤더에 PHP 버전이 드러나지 않았다는 뜻입니다. 버전을 숨긴 서버도 취약할 수 있으니 서버 점검 스크립트로 확인하세요.

인터넷에 공개된 공격 코드(PoC)로 확인해 봐도 되나요?

권하지 않습니다. PHP 공식 공지와 보안 권고에는 공격 코드가 없습니다. 'php2shell PoC'로 도는 코드는 출처를 확인하기 어렵고 악성코드가 섞여 있을 수 있으니 운영 서버나 업무 PC에서 실행하지 마세요. 노출 여부는 이 페이지 같은 비침투 점검으로 확인하세요.

phpinfo 노출 확인은 무엇을 하나요?

점검 폼에서 이 옵션을 켜면, 응답 헤더 확인에 더해 웹 루트의 알려진 phpinfo 경로(/phpinfo.php, /info.php, /test.php, /i.php, /php_info.php)에 GET 요청을 차례로 보냅니다. phpinfo 페이지를 찾으면 헤더에서 버전을 숨긴 서버도 실제 PHP 버전과 웹에 적용된 설정을 확인할 수 있습니다. phpinfo 페이지가 공개된 것 자체가 정보 노출이므로 찾으면 삭제를 권합니다. 공개되지 않은 경로를 요청하므로 사이트의 보안 장비나 로그에 경로 탐색으로 기록될 수 있습니다. 본인이 관리하는 사이트에서만 켜세요.

배포판 패키지 버전이 수정 버전보다 낮게 나옵니다.

Ubuntu, Debian, RHEL 계열은 버전 번호를 유지한 채 보안 수정만 적용(백포트)하기도 합니다. 배포판 보안 공지에서 이 CVE가 수정된 패키지 버전을 확인하세요. 스크립트는 점검한 PHP마다 그 PHP가 속한 패키지의 변경 기록에서 CVE 번호를 찾아 참고 메모를 보여주고, 패키지로 설치하지 않은 PHP에는 배포판 백포트가 적용되지 않는다고 알려줍니다.

스크립트에서 CLI 항목만 취약으로 나옵니다.

CLI는 웹 요청을 처리하지 않으므로 웹으로 노출되는 경로는 아닙니다. 그래도 같은 서버의 PHP는 함께 업데이트하는 것이 안전합니다.

내부망 서버나 컨테이너는 어떻게 확인하나요?

외부에서 접속할 수 없는 주소를 점검해도 결과 화면에서 스크립트를 받을 수 있습니다. 컨테이너는 컨테이너 안에서 스크립트를 실행하세요.

점검한 정보는 어떻게 저장되나요?

입력한 주소, 점검 대상 서버의 응답 정보(IP, 응답 코드, 헤더), 판정 결과, 페이지 언어, 접속 국가, 스크립트 다운로드와 문의 클릭 여부를 내부 통계를 위해 1년간 보관합니다. 점검을 요청한 사람의 IP와 브라우저 정보는 점검 기록에 저장하지 않습니다. 웹 서버 접속 기록에는 IP와 브라우저 정보가 90일간 남지만, 결과 링크나 점검 기록 번호는 남기지 않아 점검 기록과 연결되지 않습니다. 문의하기를 누르면 판정 종류(예: 취약)만 Cloudbric 홈페이지로 전달됩니다. 이 페이지는 쿠키를 쓰지 않습니다. phpinfo 확인을 켠 경우 찾은 경로, PHP 버전, 실행 방식, 관련 설정값도 함께 보관하며 페이지 내용은 저장하지 않습니다.

점검 요청은 어디에서 보내나요?

점검 요청은 User-Agent 'Cloudbric-php2shell-check/1.0 (+https://php2shell.cloudbric.com)'으로 보냅니다. HEAD 요청 한 번만 보내며, 거부되면 GET 요청을 한 번 보내고 응답 본문은 읽지 않습니다. phpinfo 확인을 켜면 알려진 경로 5곳에 GET 요청을 추가로 보내고, 응답은 앞부분 512KB까지만 읽습니다.