~/ / AI 기사 / AI가 PHP2Shell 발견을 도왔다: 2026년 10월 PHP의 치명적 취약점
AI가 PHP2Shell 발견을 도왔다: 2026년 10월 PHP의 치명적 취약점
언론 보도에 따르면 AI 모델이 연구자들이 PHP 자체의 치명적 취약점 두 건, 즉 인증 없는 원격 코드 실행을 허용할 수 있는 CVE-2026-109618과 CVE-2026-109619를 찾는 것을 도왔습니다. PHP는 2026년 10월 21일 수정된 버전을 공개했습니다. 이 글은 공식 발표와 보도가 이 결함과 AI의 관여 방식에 대해 무엇을 말하는지 정리하고, 내가 운영하는 PHP에 수정이 반영되었는지 확인할 수 있게 해 줍니다.
2026-10-24에 공식 발표를 기준으로 확인했습니다. 이 페이지는 공식 보안 권고가 아니며 세부 내용은 바뀔 수 있으므로, 맨 아래의 출처를 따라가 확인하세요.
가장 먼저 할 일
- PHP를 수정된 릴리스(8.5.12, 8.4.27, 8.3.36 또는 8.2.35)나 Linux 배포판이 제공하는 수정된 패키지로 업데이트하세요. PHP는 완전한 완화책은 없으며 업데이트만이 안전한 선택이라고 밝히고 있습니다.
- 업데이트한 뒤에는 PHP-FPM, Apache와 오래 실행되는 PHP 워커를 모두 재시작해 수정된 코드를 불러오게 하세요. 업데이트 전에 시작된 서비스는 여전히 이전 코드로 동작하고 있습니다.
- PHP를 배포판 패키지로 설치했다면 첫 번째 대시 뒤의 부분까지 포함한 전체 패키지 버전을 확인하세요. 배포판은 번호의 앞부분을 바꾸지 않고도 수정을 포함할 수 있습니다.
- 바로 업데이트할 수 없다면 아래의 완화책을 참고하세요. PHP는 이 조치들이 특정 공격 경로에 대한 노출을 줄여 주지만 설치 환경을 안전하게 만들지는 않는다고 밝히고 있습니다.
무슨 일이 있었나
2026년 10월 21일에 PHP가 8.5.12, 8.4.27, 8.3.36, 8.2.35를 공개했습니다. 이 버전들은 둘 다 CVSS v4.0 9.2로 평가된 치명적 취약점 두 건을 수정합니다.
RCE via OOM corruption이라 불리는 CVE-2026-109618: 메모리 부족 처리 과정에서 내부 요청 데이터가 일부만 초기화된 상태에서 PHP가 중단될 수 있고, 이후 요청 정리 과정이 그 잘못된 데이터를 유효한 것으로 취급할 수 있습니다.
RCE via stale global state라 불리는 CVE-2026-109619: 요청이 소유한 내부 상태가 그 기반 메모리가 해제된 뒤에도 남아 있을 수 있고, 같은 워커가 처리하는 이후의 요청이 그 낡은 상태를 사용할 수 있습니다.
- CVE-2026-109618 · CVSS 4.0 9.2
- CVE-2026-109619 · CVSS 4.0 9.2
AI는 어떻게 관여했나
The Next Web에 따르면, 보안 기업 Calif는 OpenAI가 자금을 지원한 PHP 소스 코드 감사 중에 8월 OpenAI 모델의 도움을 받아 첫 번째 버그를 발견했습니다. Wiz는 몇 주 뒤에 Google의 Gemini 모델을 비롯한 AI 도구를 사용해 이 결함들을 독자적으로 발견했다고 밝혔습니다.
php2shell.com 사이트는 이 연구를 Wiz Research, OpenAI Codex Security, Calif의 공으로 소개합니다. Calif는 일반에 공개된 모델을 사용했으며, 모델보다 PHP의 역사를 아는 것이 더 중요했다고 말했습니다.
같은 기사는 Cloudflare가 공개 약 9시간 전에 고객을 위해 WAF 규칙을 활성화했고, 그 뒤 개념 증명(proof-of-concept) 익스플로잇이 온라인에 퍼졌다고 전합니다. php2shell.com 사이트는 WAF나 CDN 규칙을 PHP 업데이트의 대체 수단으로 여겨서는 안 된다고 밝히고 있습니다.
타임라인
- PHP가 10월 21일 14:00 UTC에 예정된 치명적 보안 릴리스를 예고합니다.
- PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35가 보안 권고와 함께 공개되고, Ubuntu가 USN-8948-1을 게시합니다.
- PHP가 CVE-2026-115560으로 추적되는, 가능성이 낮은 또 다른 공격 경로에 대해 session.upload_progress.enabled 관련 참고용 권고를 게시합니다.
영향을 받는 대상
PHP는 PHP-FPM, mod_php를 사용하는 Apache, php-cgi, FrankenPHP, LiteSpeed를 포함해 웹 요청을 처리하는 모든 PHP 설치 환경이 위험하다고 밝히고 있습니다. 인증되지 않은 요청이 애플리케이션 코드가 실행되기 전에 공격을 일으킬 수 있는 mod_php의 위험이 가장 높다고 보고 있습니다.
GitHub 권고는 8.2.35, 8.3.36, 8.4.27, 8.5.12 미만의 버전을 영향을 받는 것으로 나열합니다. Wiz가 운영하는 것으로 표시된 php2shell.com 사이트는 영향을 받는 릴리스가 PHP 5.4까지 거슬러 올라간다고 밝히고 있습니다.
PHP 8.1 이하는 PHP 프로젝트로부터 더 이상 업데이트를 받지 않습니다. 일부 배포판과 LTS 벤더는 백포트된 수정을 제공하며, PHP는 소스에서 직접 빌드하는 사람들을 위해 PHP 7.4, 8.0, 8.1용 최소한의 소스 백포트를 제공했습니다.
수정된 버전
해당 브랜치의 수정된 릴리스 이상인 버전에는 수정이 반영되어 있습니다. 배포판 패키지는 패키지 버전으로 수정 여부가 정해지므로, Ubuntu와 Debian은 두 번째 표를 사용하세요.
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 |
Ubuntu 및 Debian 패키지
| 배포판 | 패키지 | 수정된 패키지 버전 | 공지 |
|---|---|---|---|
| Ubuntu 26.10 | php8.5 | 8.5.9-0ubuntu2.1 | USN-8948-1 |
| Ubuntu 26.04 LTS | php8.5 | 8.5.4-0ubuntu1.5 | USN-8948-1 |
| Ubuntu 24.04 LTS | php8.3 | 8.3.6-0ubuntu0.24.04.13 | USN-8948-1 |
| Ubuntu 22.04 LTS | php8.1 | 8.1.2-1ubuntu2.28 | USN-8948-1 |
| Debian 12 (bookworm) | php8.2 | 8.2.35-1~deb12u1 | DLA-4848-1 |
| Debian 13 (trixie) | php8.4 | 8.4.27-1~deb13u1 | DSA-6574-1 |
표에는 공식 공지에 나열된 내용만 담았습니다. 다른 배포판은 해당 벤더의 보안 공지를 확인하세요.
내 PHP 확인하기
PHP를 어디서 설치했는지 고르고 버전 텍스트를 붙여 넣으면, 도구가 위의 수정된 버전과 비교합니다. 붙여 넣은 텍스트만 판단하며 실제로 어떤 버전이 실행 중인지는 볼 수 없으므로, 업데이트 후 서비스를 재시작했는지도 함께 확인하세요.
버전을 보여 주는 명령
php -vdpkg -l 'php*' | grep ^iiapt-cache policy php8.3-fpm | grep Installed
모든 처리는 브라우저 안에서 이루어집니다. 붙여 넣은 텍스트는 업로드되지 않습니다.
바로 업데이트할 수 없다면
PHP가 제시하는 조치들입니다. PHP는 이 조치들이 특정 공격 경로에 대한 노출을 줄여 주지만 설치 환경을 안전하게 만들지는 않으며, 업데이트만이 완전한 해결책이라고 밝히고 있습니다.
CVE-2026-109618
- memory_limit=-1로 설정하되, FPM 풀이나 Apache 설정의 php_admin_value처럼 애플리케이션이 덮어쓸 수 없는 방식을 권장합니다. 하위 계층의 할당 실패가 취약한 경로에 도달할 수는 여전히 있습니다.
- post_max_size를 낮게 설정하세요. 파일 업로드가 필요 없는 애플리케이션은 8M, 업로드가 필요하면 32M입니다. upload_max_filesize는 post_max_size보다 작게 유지하세요.
- 디코딩된 요청 크기, 입력 필드 수, 멀티파트 파트 수, 헤더 수, 중첩 깊이에 대한 제한을 웹 서버나 프록시에서 적용하세요.
- 컨테이너나 cgroup 제한은 가용성의 경계로 사용하세요. RLIMIT_AS나 RLIMIT_DATA는 취약한 할당 실패를 일으킬 수 있으므로 사용하지 마세요.
CVE-2026-109619
- php.ini, FPM 풀 또는 서버 설정에서 session.upload_progress.enabled=0으로 설정하고 모든 워커를 재시작하세요. ini_set()이나 FPM의 .user.ini 파일에 의존하지 마세요.
- PHP 8.5에서는 fatal_error_backtraces=0으로 설정하고 모든 워커를 재시작하세요.
- 초기화 전에 진단 메시지를 내보내는, 요청마다 적용되는 잘못되었거나 더 이상 쓰이지 않는 설정을 제거하세요. 진단 메시지를 숨기는 것은 도움이 되지 않습니다.
- 공격자가 도달할 수 있는 치명적 오류와 실행 시간 초과를 수정하세요.
10월 23일의 참고용 권고
PHP는 가능성이 낮은 또 다른 원격 코드 실행 경로로부터 완전히 보호하기 위해, 다음 정기 버그 수정 릴리스까지 session.upload_progress.enabled=0으로 설정할 것을 제안합니다. 10월 21일 권고에 따라 이미 적용했다면 그대로 유지하세요.
PHP는 이 문제가 특이한 조합에서만 발생할 수 있다고 밝히고 있습니다. 애플리케이션이 설정에서 session.serialize_handler를 php_binary 또는 php_serialize로 지정하고, session_start() 이전에 ini_set()으로 런타임에 php로 바꾸며, 세션 업로드 진행 기능이 여전히 켜져 있는 경우입니다. PHP는 다음 릴리스에서 CVE-2026-115560에 대한 전체 권고를 게시할 예정입니다.
이 페이지가 하지 않는 일
- 공식 권고가 아니며 익스플로잇의 세부 내용은 제공하지 않습니다. 아래의 공식 발표와 권고가 기준입니다.
- 시스템이 공격을 받았는지는 알려 줄 수 없습니다. php2shell.com 사이트는 의심스러운 활동이 없다고 해서 시스템이 영향을 받지 않았다고 단정할 수는 없다고 밝히고 있습니다.
- 노출 여부는 버전, 설정, 개별 취약점에 따라 달라집니다. 완화책은 애플리케이션의 동작에 영향을 줄 수 있습니다.