오늘, Calif.io, Wiz, OpenAI 및 Quarkslab은 PHP에서 두 가지 취약점(CVE-2026-109618 및 CVE-2026-109619로 추적되며 __php2shell__로 알려짐)을 공개했습니다. 이 취약점들은 PHP 5.4 이상을 실행하는 모든 웹 서버에 영향을 미치며, 애플리케이션이 특수하게 조작된 HTTP 트래픽을 처리할 때 공격자가 서비스 거부(denial of service), 원격 코드 실행(remote code execution) 및 데이터 노출을 유발할 수 있게 할 수 있습니다.
Cloudflare는 PHP foundation, OpenAI, Wiz 등과 협력하여 인터넷 보호를 위한 조정된 노력에 참여해 왔습니다. Cloudflare는 2026년 10월 초부터 웹 애플리케이션 방화벽(WAF) 보호 기능을 개발하고 배포했으며, 이는 공개일보다 약 9시간 앞서 이루어졌습니다. 2026년 10월 21일 오전 3시 2분에 시작하여, 무료 또는 유료 WAF를 사용하는 Cloudflare 고객들은 php2shell로부터 기본적으로 보호받았습니다.
취약점이 공식 출시일 이전에 유출되었고 우리가 고객들을 겨냥하는 공격 트래픽을 관찰한 상황에서, Cloudflare는 모든 고객을 위해 여러 가지 완화 조치를 성공적으로 배포했습니다. 우리는 공격자들이 매치되는 볼륨을 추적하고 규칙 논리와 교차 참조하면서 우리의 보호 기능을 우회하려고 공격 페이로드를 어떻게 변형시키는지 관찰할 수 있었습니다.
php2shell로부터 보호하려면 표준 요청 기반 규칙보다 더 많은 것이 필요했습니다. 요청 데이터만으로는 악용(exploit)과 정상 트래픽을 구별하기에 충분한 증거를 항상 제공하지 못합니다. 원본(origin)의 응답은 맥락을 추가하여, 오탐(false positives) 위험을 줄이는 동시에 악용이 성공했는지 식별하는 데 도움을 줍니다.
이러한 보호 기능을 제공하기 위해, 우리는 동일한 HTTP 트랜잭션 내에서 요청과 응답으로부터 신호를 결합하는 새로운 Cloudflare WAF 기능인 전체 트랜잭션 감지(full transaction detection)를 개발했습니다. 이제 응답 규칙은 요청자에게 도달하기 전에 일치하는 원본 응답을 차단할 수 있습니다. php2shell 보호 기능은 이 기능을 사용하여 출시된 최초의 관리형 탐지(managed detections)입니다.
고객들은 WAF 보호 기능이 추가적인 방어 심층(defense-in-depth) 완화책을 제공하더라도 PHP 레포지토리를 패치해야 합니다. 저희 보안 분석가들은 앞으로 몇 시간 또는 며칠 동안 새로운 기법과 변종이 나타날 경우 공격 활동을 계속 모니터링하고 규칙을 업데이트할 것입니다. 새 규칙은 __changelog__에서 확인하실 수 있습니다.
해당 보호 기능은 Free 사용자를 포함하여 WAF가 배포된 모든 플랜에 자동으로 적용 및 배포됩니다.
취약점에 대해 알려진 정보
PHP는 거의 __70%의 웹사이트__에서 사용됩니다. php2shell 취약점은 PHP 런타임 자체에 영향을 미치며, 공격자가 취약한 서버에서 악성 코드를 실행하거나 고객 데이터를 노출시키거나 서비스를 방해할 수 있도록 할 수 있습니다. PHP가 WordPress나 Magento와 같이 광범위하게 사용되는 플랫폼의 기반이 되기 때문에, 이러한 결함은 인터넷 전반에 걸쳐 많은 애플리케이션에 잠재적으로 영향을 미칠 수 있습니다.
두 취약점은 PHP가 HTTP 요청을 처리하는 동안 문제가 발생했을 때 메모리를 처리하는 방식과 관련이 있습니다. 일반적으로 PHP는 요청을 처리하는 데 필요한 데이터를 저장하기 위해 메모리를 할당한 다음, 작업이 완료되면 이를 해제합니다. 예를 들어 메모리가 부족해서 처리가 예기치 않게 중단되는 경우, PHP가 메모리를 안전하게 정리하지 못합니다. 이러한 취약점은 PHP가 오류를 처리하면서 완전히 설정되지 않았거나 이미 해제된 메모리를 사용하려고 시도할 때 발생합니다.
공격자는 특별히 조작된 HTTP 요청을 보내 이러한 조건을 유발할 수 있습니다. 대용량 요청은 메모리에 압박을 가하는 한 가지 방법이지만, 문제는 서버 리소스 소모를 넘어섭니다. 공격자가 이 무효한 메모리에서 PHP가 마주치는 데이터를 조작함으로써, PHP 프로세스를 충돌시키거나 민감한 정보를 노출시키거나 공격자가 제공한 코드를 실행할 수 있을 수 있습니다.
두 취약점은 안전하지 않은 메모리 접근이 발생하는 시점에서 차이가 납니다:
취약점 (Vulnerability) | 문제 발생 원인 (What goes wrong) |
CVE-2026-109618 | PHP가 메모리 부족으로 인해 일부 내부 데이터가 제대로 초기화되기 전에 작업을 중단합니다. 해당 요청을 정리하는 과정에서, PHP는 이 미완성된 데이터를 유효한 것처럼 사용할 수 있습니다. |
CVE-2026-109619 | 치명적인 오류(fatal error)가 요청을 중단시키고, PHP는 요청이 끝날 때 해제되는 메모리에 대한 참조를 보유하게 됩니다. 동일한 PHP 프로세스가 나중에 다른 요청을 처리할 때, 이 오래된 참조들을 따라가 유효하지 않은 메모리 영역에 접근하여 민감한 데이터를 노출시킬 수 있습니다. |
이러한 결함들은 PHP 런타임(PHP runtime)에 존재하므로, 웹사이트 코드나 플러그인만 업데이트한다고 해서 이러한 취약점들이 해결되지는 않습니다. 관리자는 애플리케이션을 실행하는 PHP 소프트웨어 자체를 업데이트해야 합니다. 호스팅 제공업체가 PHP를 관리하는 경우, 해당 제공업체에 보안 업데이트 적용을 요청하십시오.
관리자들은 영향을 받는 버전에 대한 PHP 권고(PHP advisory)와 복구 지침을 따를 수 있습니다. 패치 작업을 진행하는 동안 Cloudflare WAF 보호 기능을 활성화 상태로 유지하십시오. 불필요한 업로드 제한 및 업로드 크기 제한도 노출도를 낮추는 데 도움이 될 수 있지만, 이러한 조치들은 PHP 수정(fix)을 대체할 수는 없습니다.
새로운 규칙 (New rules)
Free 고객의 경우, Cloudflare Managed Free Ruleset (Ruleset ID 77454fe2d30c4220b5701f6fdfb893ba) 하에 새로운 규칙들이 배포되었습니다. Free 고객은 보호 기능을 활성화하기 위해 어떠한 조치도 취할 필요가 없습니다. 규칙 세트의 동작을 재정의하려면 저희 __documentation__을 참조하실 수 있습니다.
규칙 설명 (Rule Description) | 규칙 ID (Rule ID) |
Generic Rules - Anomalous Execution - 1 | 4e315666e8e344cdb64119a3b5ccf32f |
Generic Rules - Anomalous Execution - 2 | 00c10e6cc4da4bd08722adeebcd95984 |
Generic Rules - Anomalous Execution - 3 | 48ddf592361e4fdb97a8a85982dab691 |
Generic Rules - Anomalous Execution - 4 | 3556683d512a47f2937899c524b1a4c6 |
Generic Rules - Anomalous Execution - 5 | da07c85852e34625bb478496302ede46 |
Generic Rules - Anomalous Execution - 6 | 19373a83abb840e18ab3ce5a7975ce1b |
Generic Rules - Anomalous Execution - 7 | 07f0b6ddaabf40b1b2042dade8d613fa |
유료 플랜에 대한 보호 기능이 Cloudflare Managed Ruleset(Ruleset ID efb7b8c949ac4650a09736fc376e9aee)의 일부로 배포되었습니다. Professional, Business 또는 Enterprise 플랜을 사용 중이라면, Managed Ruleset 배포를 검토하여 deployed 블록 모드인지 확인하십시오.
Rule Description | Rule ID |
Generic Rules - Anomalous Execution - 1 | c1d409ad838f47f59446f21cc438d5dd |
Generic Rules - Anomalous Execution - 2 | f9a45927414245e3a64bb12d0a0c2f64 |
Generic Rules - Anomalous Execution - 3 | 771c654ae1154d4daa72f4e1545d163c |
Generic Rules - Anomalous Execution - 4 | 217005865f0145f392300bac212afcc9 |
Generic Rules - Anomalous Execution - 5 | 38efdb17ea594501bb55a1d71867b12e |
Generic Rules - Anomalous Execution - 6 | 4148ae686fdb4d01be673fab9d9c073d |
Generic Rules - Anomalous Execution - 7 | 1389aa259617437392ce149c48143645 |
공격 시도를 더 잘 식별하기 위해 Cloudflare는 전체 트랜잭션 탐지(full transaction detection)를 개발했습니다. 이는 단일 HTTP 트랜잭션의 양쪽을 모두 분석하는 새로운 WAF 기능입니다. 악성 페이로드 중 일부는 요청만으로도 식별할 수 있지만, 응답에는 더 높은 신뢰도로 규칙을 생성하는 데 사용될 수 있는 유용한 신호가 포함되어 오탐(false positives)을 줄일 수 있습니다. 전체 트랜잭션 규칙과 일치하면 요청자에게 도달하기 전에 원본 응답을 차단할 수 있습니다. 작동 방식은 저희의 전체 트랜잭션 탐지 __블로그 게시물__에서 알아보세요.
다음 규칙들은 Free를 포함한 모든 플랜 고객에게 새로운 Cloudflare Managed Response Firewall Default로 배포되었습니다:
Rule Description | Rule ID |
Default block for High confidence Signatures | afffe22785674c80a31875c848d2242a |
참고: 규칙 설명은 곧 업데이트될 예정입니다.
이벤트 검토 및 보호 사용자 지정
차단된 요청을 분석하려면 Security > Security Analytics > Events를 방문하세요. 위 표의 규칙 ID로 필터링하고 일치하는 요청, 조치(action), 경로(path)를 검사하세요. 이벤트는 해당 조치가 관리형 규칙(managed rule)에서 왔는지 사용자 지정 규칙(custom rule)에서 왔는지를 식별합니다. 보호 기능을 맞춤 설정해야 하는 고객은 관리형 규칙 세트(Managed Ruleset)의 범위를 애플리케이션 중 관련 부분으로 업데이트할 수 있습니다.
PHP를 업데이트하고 보호 기능 유지하기
관리형 규칙 세트를 사용하는 Cloudflare 고객은 기본적으로 보호됩니다. 저희는 권고 사항을 따라 가능한 한 빨리 벤더 업데이트를 PHP 저장소에 적용하는 동시에, 추가적인 보호 장치로 WAF 보호 기능을 활성화할 것을 권장합니다. 저희 WAF 분석가들은 새로운 기법이 나타남에 따라 지속적으로 보호 기능을 업데이트할 것입니다.