울타리 NEO

홈 › 보안 가이드 › 회사·업무 PC

PHP2Shell(CVE-2026-109618·109619) PHP 원격 코드 실행 취약점 — 내 사이트 버전 확인·무료 점검·모니터링

마지막 갱신 2026-10-23 · 울타리 NEO 보안 가이드

2026년 10월 21일 PHP 개발진(php.net)이 인증 없이 원격으로 코드를 실행할 수 있는 취약점 두 건(CVE-2026-109618·CVE-2026-109619, 통칭 「PHP2Shell」)을 긴급 수정했습니다. 사이트 코드가 아니라 PHP 해석기 자체의 결함이라, 그누보드·XE(Rhymix)·워드프레스·직접 만든 PHP 사이트까지 PHP 로 돌아가는 웹사이트라면 버전에 따라 모두 해당될 수 있습니다. 이 글은 내 서버의 PHP 버전이 수정판인지 확인하는 법, 울타리 NEO 의 무료 웹 취약점 점검으로 밖에서 확인하는 법, 그리고 공격 시도를 계속 지켜보는 법(모니터링)을 정리합니다.

PHP2Shell 요약 — 무엇이, 어느 버전이 위험한가

구분내용
공개·수정2026-10-21, php.net 긴급 보안 릴리스
CVECVE-2026-109618 · CVE-2026-109619
종류인증 없는 원격 코드 실행(RCE) — 공격자가 로그인 없이 서버에서 명령을 실행할 수 있음
원인PHP 해석기 자체의 결함 — 사이트 코드가 멀쩡해도 해당
수정판8.5.12 · 8.4.27 · 8.3.36 · 8.2.35 이상
8.1 이하공식 지원이 끝난 판 — 수정판이 나오지 않습니다. 지원되는 판으로 올려야 합니다
해결업데이트만이 해결입니다. 설정 변경으로는 완전히 막을 수 없습니다(php.net)

공개 전부터 공격이 돌았다는 보고가 있어, 「아직 공격받은 적 없다」가 안전의 근거가 되지 않습니다. 공격 요청의 정확한 모양은 이 글을 쓰는 시점에 공개되지 않았습니다 — 아래 「못 보는 것」을 함께 읽어 주세요.

내 서버의 PHP 버전 확인하는 법

  1. 서버에 접속할 수 있다면 — php -v. 웹 서버가 쓰는 PHP 가 명령줄과 다를 수 있으니(PHP-FPM 여러 판) 웹에서 도는 판도 확인합니다.
  2. 웹호스팅(카페24·가비아·닷홈 등)을 쓴다면 — 호스팅 관리 화면의 「PHP 버전」 항목을 보고, 수정판이 아니면 호스팅사에 적용 일정을 문의합니다.
  3. 배포판 패키지(Ubuntu·Debian·RHEL 계열) — 8.1.2-1ubuntu… 처럼 꼬리가 붙은 판은 번호가 옛것이어도 보안 수정이 번호 그대로 뒤로 옮겨져 들어갔을 수 있습니다. 번호만으로 판단하지 말고 배포판 보안 공지·패키지 변경 기록(apt changelog, dnf updateinfo)에서 두 CVE 가 반영됐는지 확인합니다.
  4. phpinfo 화면으로 확인했다면 곧바로 지웁니다. 공개된 phpinfo 는 공격자에게 버전과 설정을 그대로 알려 줍니다.

울타리 NEO 무료 웹 취약점 점검 — 밖에서 보이는 만큼 확인

「내 사이트」에 도메인을 등록하고 소유권을 확인한 사이트라면 ultarineo.com/sites 에서 「웹 취약점 점검」을 누를 수 있습니다. 읽기만 합니다 — 공격 요청·침투 시험은 하지 않고, 홈과 흔히 새는 경로 몇 곳에 GET 요청만 보냅니다(10분에 3번까지).

  • PHP2Shell 판정 — 응답 머리글(X-Powered-By)·phpinfo 에 보이는 PHP 버전을 수정판과 대조합니다. 수정판 미만이면 「위험」, 8.1 이하는 「지원 종료」, 배포판 꼬리는 「번호로 판정 불가」.
  • 버전을 숨긴 서버는 「안전」이 아니라 「못 봄」으로 적습니다. 그누보드·XE·워드프레스 같은 PHP 흔적은 보이는데 버전이 없으면 그렇게 알려 드립니다.
  • 새는 파일 — .env·.git·phpinfo·서버 상태 화면이 열려 있는지 봅니다. .env 가 열려 있어도 값은 가져오지 않고 열려 있다는 사실만 적습니다.
  • SSL/TLS 인증서 — 만료·신뢰할 수 없는 발급처·도메인 이름 불일치·14일 안 만료, 옛 암호화 규격(TLS 1.0·1.1)을 아직 받아 주는지.
  • 서버·워드프레스 버전 — nginx·Apache·IIS·WordPress 버전을 공개 자료(endoflife.date·WordPress.org·CISA KEV)와 대조해 지원 종료·실제 공격에 쓰인 취약점·최신판 여부를 봅니다.
  • 더 넓은 A-Z 점검 — 백업·DB 덤프·phpMyAdmin·디렉터리 목록 노출, http→https 전환, 쿠키 보호 표시, 옛 jQuery, 메일 위조 방지(SPF·DMARC).
  • AI 방어 — 페이지·스크립트에 박힌 AI API 키(OpenAI·Anthropic·Hugging Face 등, 값은 가져오지 않음), 인증 없이 열린 AI 모델 API(Ollama·OpenAI 호환), 공개 MCP 엔드포인트, robots.txt 의 AI 크롤러 규칙.
  • 해킹 흔적 — 첫 화면에 숨긴 도박·성인 스팸 링크, 브라우저 채굴 스크립트, 난독화 스크립트, 숨긴 외부 iframe.

모니터링 — 점검 뒤에도 공격 시도를 계속 지켜보기

한 번의 점검은 그 순간의 사진입니다. 「내 사이트」의 해자(垓字) 센서를 켜 두면 사이트로 들어오는 요청을 계속 봅니다 — Cloudflare Worker 센서, Cloudflare 읽기 전용 토큰, 또는 이 PC 에서 읽는 웹서버 로그 중 하나로 붙입니다.

  • .env·클라우드 키·.git·셸·CGI·phpMyAdmin 같은 관리 도구·백업 파일을 노리는 탐침을 종류별로 셉니다.
  • SQL 인젝션 시도와, 그 요청에 서버가 성공(2xx)으로 답했는지를 따로 짚습니다 — 「두드렸다」와 「열렸다」를 구분합니다.
  • 로그인·가입 폭주, 봇의 글 게시, 세션을 단 관리 구역 진입(장악 의심)을 출발지별로 봅니다. IP 원문은 남기지 않습니다.
  • 판정은 운영자의 PC·서버 안에서 하고, 대응(차단 규칙·속도 제한 조각)은 운영자가 직접 적용합니다.

솔직하게 적습니다: PHP2Shell 공격 요청만 골라내는 전용 탐지 규칙은 아직 없습니다. 공격 요청의 모양이 공개되면 규칙을 더하고 이 글을 고치겠습니다. 그 전까지는 버전 확인과 업데이트가 유일한 해결이고, 센서는 PHP 사이트를 노리는 일반적인 탐침·침입 흔적을 봅니다.

지금 할 일 — 순서대로

  1. PHP 를 수정판(8.5.12 · 8.4.27 · 8.3.36 · 8.2.35 이상)으로 올립니다. 8.1 이하라면 지원되는 판으로 옮길 계획부터 세웁니다.
  2. 호스팅을 쓴다면 호스팅사에 적용 여부·일정을 문의합니다.
  3. 공개된 phpinfo.php·info.php, 웹 루트의 .env·.git 을 지우거나 막습니다.
  4. 응답 머리글의 버전 노출을 끕니다(expose_php = Off, ServerTokens Prod). 숨기는 것은 보완이고, 해결은 업데이트입니다.
  5. Cloudflare 를 쓴다면 무료 요금제에도 알려진 공격을 막는 관리형 규칙이 있습니다 — 켜져 있는지 확인합니다.
  6. 업데이트 뒤 울타리 웹 취약점 점검으로 밖에서 다시 확인하고, 해자 센서를 켜 둡니다.

울타리가 못 보는 것

  • 서버 안쪽 설정 — 업로드 진행 설정 같은 PHP 내부 설정, 서버에 이미 들어온 웹셸은 밖에서 보이지 않습니다(못 봄).
  • 버전을 숨긴 서버 — 판정할 수 없고, 안전하다고 말하지 않습니다.
  • 사이트 코드 자체의 취약점(SQL 인젝션·XSS 등)은 점검에서 공격 요청을 넣어 보지 않습니다. 원칙상 읽기만 하기 때문입니다.
  • 워드프레스 플러그인·테마의 업데이트 여부는 밖에서 보이지 않습니다 — 관리 화면에서 확인해 주세요.

자주 묻는 것

그누보드·XE(Rhymix)·워드프레스를 쓰는데 해당되나요?

세 가지 모두 PHP 로 돌아갑니다. CMS 버전이 아니라 서버에 깔린 PHP 버전이 기준입니다. 수정판 미만이면 해당됩니다.

남의 사이트도 점검할 수 있나요?

아니요. 소유권을 확인한 내 사이트만 점검합니다. 점검 도구가 남의 사이트를 고르는 데 쓰이지 않게 하기 위해서입니다.

비용이 드나요? 인증은 어떻게 하나요?

개인 계정은 무료이고, 업무용(회사) 계정은 업무용 라이선스가 있어야 합니다. 울타리 계정 로그인과 소유권 확인(DNS TXT 레코드·/.well-known 파일·홈페이지 <head> 의 meta 태그·사이트 제목·SEO 설명·HTML 주석 중 하나)이 필요합니다. 사이트 빌더처럼 코드를 못 고치는 곳이라면 사이트 제목이나 SEO 설명 칸에 인증 문구를 잠시 넣으면 됩니다.