PHP2Shell: AI가 찾아낸 PHP 코어 RCE 취약점
PHP2Shell: AI uncovers critical RCE in PHP
TL;DR Highlight
Wiz가 AI로 PHP 코어의 10년 묵은 RCE를 찾아 익스플로잇까지 만들었다
Who Should Read
PHP 서버·WordPress·Drupal 등을 운영하며 긴급 패치 여부와 AI 시대 보안 대응을 고민하는 백엔드·인프라 개발자
Core Mechanics
- PHP 코어 자체에 RCE가 있었다
- 앱 코드와 무관하게 "Hello World" 앱도 영향받을 수 있다고 한다.
- PHP 5.4까지 거슬러 올라가 최근 10년 릴리스 모두 최소 하나에 해당한다.
- CVE 2개로 묶였고 심각도는 CVSS 최대 9.2다.
- 원인은 치명적 오류 뒤 남은 낡은 상태다
- 메모리 부족 같은 fatal error가 나면 요청 힙이 파괴되는데 전역 포인터는 그대로 남는다.
- 같은 워커가 다음 요청에서 그 포인터를 재사용해 메모리 노출이나 손상이 생긴다.
- 메모리 유출만으로도 비밀이 샌다
- 멀티파트 요청으로 PHPSESSID 쿠키에 힙 내용이 URL 인코딩되어 나온다.
- session_start()를 호출하지 않는 앱도 해당된다.
- 비밀번호·토큰·API 키가 담길 수 있다고 한다.
- AI가 익스플로잇 제작 장벽을 낮췄다
- 여러 버그를 엮고 버전·설정별 메모리 배치에 맞추는 수작업을 AI가 줄였다.
- 연구진은 여러 앱용 익스플로잇을 몇 시간 만에 만들고 조정했다고 한다.
- 한 연구원이 한 주에 끝냈고 이전엔 최고 팀이 수개월 걸렸을 일이라고 한다.
- Wiz는 WordPress·Drupal·Joomla에서 인증 없는 RCE를 시연했다
- 각 최신 컨테이너 이미지(wordpress:latest, drupal:latest, joomla:latest)를 대상으로 했다.
- 연구에 Wiz Atlas, Gemini 4 Argon, GPT-5.6 Sol을 썼다고 한다.
- 패치만이 완전한 해결책이다
- 2026년 10월 21일 패치 릴리스가 나왔고 변종까지 근본적으로 막는다고 한다.
- 탐지 신호는 멀티파트 요청 뒤 메모리 제한 오류·반복 HTTP 500, 비정상적으로 큰 PHPSESSID 쿠키, 워커 재시작이다.
Community Reactions
- 공개 경위가 복잡하다는 의견
- Wiz 외에 Calif와 OpenAI도 따로 발견했고, Calif가 8월 11일에 공개 절차를 먼저 시작했다는 댓글이 있었다.
- 누가 먼저인지 정리가 안 된다는 반응이 많았다.
- 공개까지 두 달 걸린 점을 의아해하는 의견
- 신고 후 확인까지 한 달 가까이 걸렸다는 점을 이해하기 어렵다는 반응이 있었다.
- 중간에 유출이 있었던 것 같다며 경위가 궁금하다는 의견도 있었다.
- AI 발견 홍보를 비판하는 의견
- 20년 된 코드에서 나온 것은 AI 발견의 공통 패턴이라는 의견이 있었다.
- 컴퓨팅 비용이 공개되지 않았고 인류 최초 RCE처럼 홍보한다는 지적도 있었다.
- 실무 대응을 묻는 댓글
- SELinux나 FORTIFY_SOURCE가 피해를 줄이는지 묻는 질문이 있었다.
- 수정 검증용 코드를 구할 곳을 묻는 댓글도 있었다.
- 정부 사이트가 오프라인이 됐다는 글들도 언급됐다.
How to Apply
- 서버 PHP 버전부터 확인하고 패치하기
- 오늘 모든 호스트와 컨테이너에서 php -v를 돌려 버전을 목록으로 만들어라.
- 10월 21일 이후 패치 릴리스로 올리고 php-fpm이나 Apache를 재시작해라.
- 로그에서 공격 징후 찾기
- 멀티파트 요청 뒤 메모리 제한 오류와 반복 500 응답을 검색해라.
- 비정상적으로 큰 PHPSESSID 응답 쿠키와 워커 재시작 급증도 함께 확인해라.
- 패치 전까지 임시 완화 적용하기
- 즉시 패치가 어려우면 CDN·WAF 업체의 PHP2Shell 기본 완화 규칙을 켜라.
- 업로드 요청 크기와 memory_limit 설정을 점검해 사고 시 범위를 줄여라.
- AI 보조 코드 감사 도입하기
- 오래된 C·네이티브 의존성에 LLM으로 오류 경로(OOM 등) 정리 코드를 점검시켜라.
- 결과는 반드시 재현 테스트로 검증하고 수정은 사람이 리뷰해라.
Try It
# Claude·ChatGPT·Claude Code에 붙여넣기 (원문 방법의 간이 버전: 오류 경로 점검)
당신은 보안 코드 리뷰어입니다. 아래 코드에서 '치명적 오류(OOM 등)로 요청이 중단된 뒤 정리되지 않고 남는 전역·정적 상태'를 찾아주세요.
{{코드}}
각 후보마다 다음을 알려주세요.
1) 어떤 전역/정적 변수가 남는지
2) 다음 요청이 그 값을 재사용하는 경로
3) 재현 방법(테스트 아이디어)
4) 확신도(높음/중간/낮음)
이어서 해 볼 것: 후보 하나를 골라 재현 테스트를 직접 작성해 실제 문제인지 확인해 보세요.Terminology
관련 논문
The Judge Can Debias Itself: LLM-as-a-Judge가 스스로 편향을 고치게 하는 법
심사 프롬프트에 편향 경고를 넣거나 스스로 비판시켰더니 21개 중 20개 조합에서 정확도가 올랐다
미국 노동시간의 90%는 AI 벤치마크가 제대로 다루지 못하는 일이다
벤치마크 29개를 직업 과제에 매핑했더니 노동시간 90%가 커버 밖
Postgres 19, AI 코드 리뷰가 버그를 너무 많이 찾아 출시 연기
LLM 코드 리뷰가 버그를 쏟아내 Postgres 19가 11월로 밀리고 기능 8~10개가 빠졌다
StarSkirmish Bench v0.2: LLM이 1시간 만에 짜는 StarCraft 봇 대결
LLM에게 1시간 동안 StarCraft 봇을 짜게 했더니 GPT-6 Astra가 1위
그럴듯한 설명 하나면 멀티모달 LLM 심사위원도 속는다 (JUPE 벤치마크)
정답은 그대로 두고 설명만 붙였더니 MLLM 심사위원의 오답 거절률이 12.7~13.8%p 떨어졌다
신경망은 이미 깔끔하다: polysemanticity의 원인 재해석
뉴런을 직접 들여다봤더니 대부분 한 가지 역할이 있었다는 주장
Linus Torvalds의 첫 LLM 보조 패치 시리즈
Linus가 LLM으로 folio 조회 패치 10개를 만들어 read() 벤치가 10배 빨라졌다
Parsimony: AI 모델이 코드를 얼마나 덧붙이는지 재는 오픈소스 벤치마크
SWE-bench 패치를 구문 단위로 세어, 코드를 덜 늘리는 AI 모델 순위를 매겼다