AI 보안

PHP, AI 지원 연구로 드러난 심각한 PHP2Shell 취약점 긴급 수정

PHP가 Calif·OpenAI·Wiz의 조사 이후 두 가지 심각한 메모리 안전성 결함을 수정했다. 공격 시도가 보고됐으며 성립 조건은 배포 환경에 따라 다르다.

게시일 업데이트
PHP2ShellPHPAI 지원 연구원격 코드 실행보안 업데이트메모리 안전성

PHP는 Calif, OpenAI, Wiz가 참여한 조사 이후 10월 21일 PHP2Shell로 통칭되는 두 가지 심각한 취약점의 긴급 보안 업데이트를 발표했다. 수정 버전은 PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35다. CVE-2026-109618과 CVE-2026-109619의 CVSS 4.0 심각도 점수는 모두 9.2다. 필요한 조건이 충족되면 공격자가 인증 없이 코드를 실행할 수 있으며, 연구진은 민감한 프로세스 메모리의 유출도 시연했다.

두 권고문은 해당 네 브랜치에서 수정 버전보다 이전에 나온 릴리스를 영향 대상으로 명시한다. 연구진은 문제가 있는 코드를 PHP 5.4까지 추적했으며, 이는 여러 세대의 애플리케이션에 걸친 실행 환경 문제다. PHP의 경고는 Apache mod_php, PHP-FPM, php-cgi, FrankenPHP, LiteSpeed 등의 웹 배포를 포함한다. 애플리케이션 자체 코드가 안전하더라도 취약한 런타임 때문에 위험에 노출될 수 있지만, 가능한 공격 경로는 배포 방식과 요청 수명주기에 따라 달라진다.

CVE-2026-109618은 메모리가 부족해질 때의 처리와 관련된다. PHP는 기존에 비지역 점프로 처리를 중단했는데, 이 과정에서 내부 요청 데이터의 초기화가 끝나기 전에 작업이 끊길 수 있었다. 이후 정리 과정이 미완성 데이터를 정상 데이터처럼 읽어 메모리 손상을 일으킬 수 있다. 오류 처리와 초기화의 결함이다. 패치는 갑작스러운 이탈을 안전한 실행 지점에서의 통제된 대응으로 바꾸고, 더 높은 메모리 임계값에서는 프로세스를 즉시 종료하도록 한다.

CVE-2026-109619는 메모리를 소유한 요청보다 오래 남는 내부 상태와 관련된다. 치명적 오류나 종료 단계의 특정 진단 때문에 상주 워커가 해제된 저장 공간을 가리키는 참조를 보유할 수 있다. 같은 워커가 다음 요청을 처리할 때 일반적인 초기화로 지우기 전에 이 오래된 값을 사용할 수 있다. 권고문은 PHP 8.5의 치명적 오류 역추적과 세션 업로드 진행 상태에 관련된 사례를 확인했다. 악용하려면 상태를 남기는 작업과 나중에 그 상태를 사용하는 작업이 모두 필요하다.

Apache mod_php의 평가된 위험이 가장 높다. 시연된 공격은 애플리케이션 코드가 실행되기도 전에 취약한 처리에 도달할 수 있다. PHP-FPM은 요청 시작에 실패하면 워커를 종료하므로 이 특정 순서는 차단된다. 그러나 잔류 상태 권고문은 시작에 성공한 뒤 중단된 작업이 다음 요청에 상태를 남기는, 애플리케이션 의존적인 FPM 경로를 확인한다. 심각도 지표는 권한이나 사용자 상호작용이 필요 없다는 점과 함께 높은 공격 복잡도, 추가 실행 조건도 명시한다.

OpenAI는 Calif가 Patch the Planet 프로그램을 통해 GPT-5.6 Sol을 사용해 심각한 결함을 발견했다고 밝혔다. PHP 재단은 Calif 연구원 Ryan A가 8월 11일 문제를 보고했고, 같은 날 OpenAI도 동일한 근본 원인을 독립적으로 보고했다고 기록했다. Calif의 설명에 따르면 연구자의 PHP 취약점 역사에 대한 지식이 조사 방향을 정하는 데 도움이 됐다. 초기 발견에는 공개되지 않은 모델이나 특별한 테스트 하네스가 필요하지 않았다.

Wiz 역시 독립적으로 조사해 8월 24일 발견 사항을 제출했다. 팀은 Wiz Atlas, Gemini 4 Argon, GPT-5.6 Sol을 사용했으며, Argon이 발견과 탐지, 패치 검증에 상당한 기여를 했다고 평가했다. Wiz는 WordPress, Drupal, Joomla의 테스트 배포에서 공격을 시연하고 별도의 메모리 유출도 보여 줬다. 모든 PHP 설치에 단일 공격이 자동으로 통하는 방식이 아니라, 서로 다른 메모리 배치에 맞춘 반복 테스트와 조정이 필요했다고 설명했다.

수정과 릴리스는 PHP 유지관리자들이 주도했다. 재단에 따르면 OSTIF의 조정으로 Quarkslab이 2024년에 수행한 감사의 지적 사항을 처리하는 과정에서 이미 메모리 소진 문제의 징후가 나타났다. 호환성, 성능, 확장 기능에 관한 절충 때문에 해결이 지연됐다. OpenAI는 연구 지원과 인프라 제공업체와의 조정을 맡았고, 재단은 수정 작업을 하는 엔지니어들에게 자금을 지원했다. 새 보고들은 이전까지 악용 가능성이 입증되지 않았던 문제의 실제 영향을 확인했다.

10월 20일 CVE 식별자가 퍼지기 시작하면서 공개 일정이 앞당겨졌다. 재단은 조율된 공개 시점을 10월 22일 14:00 UTC에서 10월 21일 14:00 UTC로 옮겼다. 배포업체가 패키지를 마무리할 시간이 여전히 필요했다고 설명했다. 이후 Calif는 제한적인 추가 정보를 드러내는 시연 영상을 실수로 게시했다가 삭제했다. 수정 버전과 기술 권고문은 현재 공개된 상태다.

Cloudflare는 무료 또는 유료 WAF를 사용하는 고객에게 10월 21일 03:02 UTC부터 기본 보호를 제공했다고 밝혔다. 페이로드를 변형하려는 시도가 포함된 공격 트래픽도 보고했다. 한편 재단은 공개 시점까지 직접 조사한 유통 중 개념증명에서 작동하는 공격을 찾지 못했다고 설명했다. 이런 관측만으로 침해된 서버 수를 확정할 수는 없다. Cloudflare는 여전히 PHP 패치를 요구했으며, PHP도 설정 변경과 필터링은 부분적인 보호만 제공한다고 명시한다.

배포판과 장기 지원 업체들은 사전에 패치를 전달받았으며 백포트 패키지를 제공할 수 있다. PHP 8.1과 이전 버전은 여전히 일반적인 상위 프로젝트 보안 지원 대상이 아니지만, 프로젝트는 심각성을 고려해 7.4, 8.0, 8.1에 대한 최소한의 소스 백포트를 제공했다. 이러한 예외적 소스 패치가 오래된 브랜치를 지원 버전으로 되돌리는 것은 아니다. 따라서 호스팅 애플리케이션의 수정은 운영자가 제공하는 PHP 런타임에 달려 있으며, 콘텐츠 관리 시스템 업데이트만으로 대체할 수 없다.