roobrief개발자를 위한 IT 뉴스
검색

개발·릴리스

AI가 찾아낸 10년 묵은 PHP 제로데이 'PHP2Shell'…긴급 패치 배포

프론티어 AI 모델이 PHP 코어 엔진에서 10년 넘게 방치된 원격 코드 실행 제로데이 2건을 찾아냈으며, 애플리케이션의 방어 로직과 상관없이 런타임 자체를 즉시 업데이트해야 한다.

PHP 개발팀과 PHP 재단은 10월 21일 코어 런타임에 존재하는 치명적인 원격 코드 실행(RCE) 취약점 2건을 해결하는 긴급 보안 패치를 배포했다. ’PHP2Shell’로 이름 붙여진 이번 취약점은 CVE-2026-109618과 CVE-2026-109619로, 두 건 모두 취약점 심각도 평가 기준인 CVSS v4.0에서 9.2(Critical)라는 최고 수준의 점수를 받았다. 인증을 거치지 않은 원격 공격자가 조작된 HTTP 요청만으로 웹 서버 권한을 가로챌 수 있는 상태다.

이번 결함은 사람이 찾아낸 것이 아니라 보안 연구진이 프론티어 AI 모델을 동원한 보안 분석 과정에서 발굴했다. Frontier AI는 가장 앞선 성능의 AI 모델을 가리킨다.

AI가 발굴한 10년 된 PHP 코어 결함

이번 취약점은 보안 전문 기업 칼리프(Calif)와 클라우드 보안 업체 위즈(Wiz)가 각각 독립적으로 발견해 2026년 8월 비공개 제보했다. 칼리프 연구팀은 오픈AI의 최신 AI 모델인 GPT-5.6 Sol을 정적 코드 분석과 메모리 안전성 검증에 투입해 결함을 찾아냈다.

오픈AI(OpenAI)는 이번 발견을 계기로 글로벌 인프라 보안 강화 프로그램인 ‘지구 패치(Patch the Planet)’ 프로젝트를 가동했다. AI가 소프트웨어 취약점을 찾아내는 능력이 해커들의 악용 속도보다 앞서도록, 취약점을 발견한 즉시 PHP 재단 및 주요 인프라 제공사와 사전 조율을 거쳐 방어 체계를 먼저 세우는 방식이다.

두 결함은 PHP 5.4 시절부터 최신 PHP 8.5까지 무려 10년 넘게 코어 소스코드 안에 잠자고 있었다. 복잡한 에러 처리 경로와 전역 상태 관리 로직 속에 숨어 있어 기존의 전통적인 퍼징 도구나 사람의 코드 리뷰로는 찾아내기 어려웠던 영역이다.

OOM 손상과 잔여 전역 상태: 두 취약점의 동작 원리

공개된 두 취약점은 모두 PHP 인터프리터의 메모리 관리 및 에러 복구 방식의 허점을 노린다. 원격 코드 실행(RCE)은 공격자가 원격에서 서버의 명령을 마음대로 실행할 수 있는 보안 취약점을 뜻한다.

첫 번째 결함인 CVE-2026-109618은 메모리 한도 초과(OOM, Out of Memory) 처리 과정에서 발생한다. PHP는 스크립트 실행 중 메모리 제한(memory_limit)에 도달하면 longjmp() 함수를 호출해 즉시 실행을 중단하고 요청을 정리한다. 그런데 폼 데이터 파싱이나 파일 업로드 처리 도중 메모리 부족이 터지면, 내부 데이터 구조체가 채 완성되지 않은 상태로 요청 종료 단계로 넘어간다. 메모리 정리 로직이 이 불완전한 포인터를 정상적인 데이터로 착각하고 메모리를 조작하면서 힙 손상이 발생하고, 공격자는 이를 이용해 실행 흐름을 가로챌 수 있다.

두 번째 결함인 CVE-2026-109619는 요청 간 전역 상태 오염과 연관된다. PHP 코어는 성능 최적화를 위해 일부 전역 포인터가 특정 요청에 할당된 메모리를 임시로 참조하게 만든다. 하지만 치명적 오류나 인터럽트가 발생했을 때 이 전역 포인터가 초기화되지 않고 남아, 이미 해제된 메모리를 계속 가리키는 유즈애프터프리(Use-After-Free) 결함이 생긴다. 단일 워커 프로세스가 다음 요청을 받아 처리할 때 남아 있던 전역 포인터를 참조하면서 메모리가 손상되고, 원격 공격자가 악성 코드를 주입하거나 프로세스 메모리를 탈취할 수 있게 된다.

웹 서버 환경별 영향과 지원 종료 버전의 위험

이번 취약점의 가장 큰 함정은 애플리케이션 계층이 아니라 PHP 인터프리터 자체의 결함이라는 점이다. 워드프레스(WordPress), 라라벨(Laravel) 같은 웹 프레임워크나 자체 작성한 비즈니스 로직에 SQL 주입이나 XSS 취약점이 전혀 없더라도, 웹 서버로 들어온 요청을 PHP 엔진이 해석하는 순간 공격이 성공한다.

배포 환경에 따른 위험도는 차이가 있다.

  • Apache mod_php: 가장 위험한 환경이다. 별도의 프로세스 격리 없이 웹 서버 프로세스 메모리 공간 안에서 PHP 코드가 직접 실행되므로, 인증 없는 공격 요청만으로 즉각적인 시스템 침해가 발생할 수 있다.
  • PHP-FPM 및 FastCGI: 일반적으로 워커 프로세스를 여러 요청에 걸쳐 재사용한다. 공격자가 의도적으로 메모리 한도 초과를 일으켜 워커를 오염시킨 뒤, 후속 요청으로 셸을 획득하는 다단계 공격 시나리오에 노출된다.

버전별 격차도 심각하다. PHP 공식 팀은 지원 대상인 버전에만 긴급 패치를 제공했다.

브랜치 상태 패치 릴리스 버전
PHP 8.5 활성 지원 8.5.12
PHP 8.4 활성 지원 8.4.27
PHP 8.3 보안 지원 8.3.36
PHP 8.2 보안 지원 8.2.35
PHP 8.1 이하 지원 종료 (EOL) 공식 패치 없음

전 세계 웹사이트의 상당수가 여전히 공식 지원이 끝난 PHP 7.x나 8.0, 8.1 버전을 사용 중이다. 이들 구버전 환경에는 공식 업스트림 패치가 배포되지 않으므로, 최신 지원 브랜치로 마이그레이션하지 않는 한 영구적인 공격 표면으로 남는다.

패치 우선순위와 운영 대응

미국 사이버보안·인프라보안국(CISA)을 비롯한 각국 보안 기관은 공개 인터넷에 연결된 모든 PHP 호스트에 대해 즉각적인 업데이트를 권고했다. 인프라 운영자와 개발자가 취해야 할 조치는 명확하다.

  1. 런타임 패키지 즉시 업데이트: 운영체제 패키지 관리자나 도커(Docker) 베이스 이미지를 통해 각 브랜치의 최신 보안 릴리스(8.5.12, 8.4.27, 8.3.36, 8.2.35)로 판올림해야 한다.
  2. EOL 버전 격리 및 업그레이드: PHP 8.1 이하 버전을 운영 중이라면 최신 버전으로의 마이그레이션을 서둘러야 한다. 즉각 이전이 불가능하다면 WAF(웹 애플리케이션 방화벽)에서 대용량 파일 업로드나 비정상적인 멀티파트 요청을 엄격히 제한하고 외부 망 접속을 차단해야 한다.
  3. 워커 프로세스 재사용 제한: 패치를 적용하기 전 임시 조치로 PHP-FPM의 pm.max_requests 값을 1 또는 매우 낮은 수치로 설정해 요청 처리 후 워커를 즉시 종료하도록 유도하면, 잔여 전역 상태(CVE-2026-109619)를 통한 2차 공격 가능성을 줄일 수 있다. 다만 프로세스 재생성 오버헤드로 성능이 떨어질 수 있다.

앞으로 볼 것

이번 사건은 AI를 활용한 취약점 발굴이 실험실을 벗어나 실제 기반 기술의 보안 지형을 바꾸기 시작했음을 보여준다. 수십 년간 수많은 보안 감사관이 지나쳤던 C 언어 기반의 메모리 관리 결함을 최첨단 AI 모델이 찾아내고, 소프트웨어 공급망 전체가 동시에 긴급 패치를 단행하는 구조가 자리 잡았다.

동시에 공격자 진영에서도 동일한 프론티어 AI 모델을 동원해 오픈소스 전반의 제로데이를 대량으로 캐내기 시작할 위험이 커졌다. AI로 촉발된 취약점 발굴 속도를 오픈소스 유지보수 진영이 방어적으로 감당할 수 있을지가 향후 소프트웨어 생태계의 핵심 시험대가 될 전망이다.

출처

출처: thephp.foundation

← 목록