
CVE-2026-78006 The Events Calendar <= 6.17.4 - 비인증 PHP 객체 주입을 통한 원격 코드 실행 POC
CVE-2026-78006 The Events Calendar <= 6.17.4 - 비인증 PHP 객체 주입을 통한 원격 코드 실행에 대한 POC
#CONTACT telegram 문의 사항은 : @soldout0O
제 작업이 마음에 드신다면 USDT (TRC20): TQBA72kakjCZLnJt8fJYcD7dyQCEpzNtVN를 통해 프로젝트를 후원해 주세요.
WordPress용 The Events Calendar에는 원격 코드 실행으로 연계될 수 있는 비인증 PHP 객체 주입 취약점이 존재합니다.
취약한 코드 경로는 다음을 포함합니다:
is_safe_widget_instance()enable_rendering_widget_copied()unserialize()do_blocks()문서화된 조건에서 비인증 공격자는 이벤트 댓글을 통해 조작된 블록 마크업을 전달하고, 댓글 중재가 이루어지기 전에 취약한 역직렬화 경로에 도달할 수 있습니다.
이 취약점은 플러그인의 위젯 인스턴스 보호가 불충분하기 때문에 존재합니다.
취약한 흐름은 다음과 같이 요약할 수 있습니다:```text Unauthenticated Comment | v Pending Event Comment | v WordPress Moderation-Hash URL | v Unauthenticated Author Can View Own Pending Comment | v V2 Single-Event Template | v do_blocks() | v Injected Block Markup | v enable_rendering_widget_copied() | v Forged Integrity Attribute | v is_safe_widget_instance() | v PHP Magic Methods / Object Deserialization | v unserialize() | v PHP Object Injection | v Remote Code Execution
---
# 영향을 받는 플러그인
**플러그인:** The Events Calendar
**취약점:** 인증되지 않은 PHP 객체 주입으로 인한
원격 코드 실행
**영향을 받는 버전:** Wordfence 권고에 따르면 **6.17.4**를 포함한
모든 이전 버전.
> [!IMPORTANT]
> 이 저장소와 함께 현재 공개된 연구 PoC는 내부적으로
> `<= 6.17.2`를 대상으로 한다고 명시하고 있습니다.
>
> 위에 명시된 버전 범위는 Wordfence 권고
> (`<= 6.17.4`)를 따릅니다. 배포 환경을 테스트하기 전에 항상
> 벤더 권고를 통해 정확한 취약/수정 버전을 확인하십시오.
---
# 근본 원인
취약한 동작은 위젯 안전 검사와 PHP의 객체 역직렬화 동작 간의
상호작용과 관련이 있습니다.
관련된 주요 함수는 다음과 같습니다:```text
is_safe_widget_instance()
enable_rendering_widget_copied()
보안 검사는 불충분한데, 이는 PHP가 의도된 안전성 검증이 효과적인 보호를 제공하기 전에 파싱/역직렬화 동작 중에 매직 메서드를 호출할 수 있기 때문입니다.
이 체인은 또한 플러그인이 제공된 위젯 인스턴스에 대해 유효한 무결성 값을 생성하는 것에 의존합니다.
이 취약점의 가장 중요한 특징 중 하나는 공격자가 기존 WordPress 계정을 필요로 하지 않는다는 점입니다.
공격 경로는 WordPress가 사용자 자신의 대기 중인 댓글을 moderation-hash URL을 통해 노출하는 방식을 악용합니다.
관련 조건은 다음과 같습니다:```text Comments enabled + Comments visible on events + Attacker can submit an event comment + V2 single-event template active
댓글을 제출한 후, WordPress는 댓글 작성자가 자신의 보류 중인 댓글을 볼 수 있도록 하는 인증되지 않은 moderation-hash URL을 제공할 수 있습니다.
이는 조작된 블록 마크업을 위한 인증되지 않은 전달 메커니즘을 생성합니다.
---
# 기술적 설명
## 1. 댓글 제출
공격자는 이벤트와 연관된 댓글을 제출합니다.
댓글은 승인될 필요가 없습니다.
중요한 속성은 WordPress가 moderation-hash 메커니즘을 통해 댓글을 노출할 수 있다는 점입니다.
---
## 2. Moderation-Hash 접근
WordPress는 댓글 작성자에게 자신의 보류 중인 댓글을 볼 수 있도록 하는 URL을 제공합니다.
이는 공격자가 검토를 기다리지 않고 취약한 렌더링 경로에 도달할 수 있음을 의미합니다.
개념적으로:```text
POST Comment
|
v
Pending Comment
|
v
Moderation Hash
|
v
Unauthenticated Access
The Events Calendar의 V2 단일 이벤트 템플릿은 이벤트 콘텐츠와 댓글 관련 HTML을 처리합니다.
관련된 WordPress 처리 경로는 결국 다음에 도달합니다:```text do_blocks()
이는 렌더링된 콘텐츠에 포함된 블록 마크업이
WordPress 블록 데이터로 해석되기 때문에 중요합니다.
---
## 4. 조작된 블록 데이터
PoC는 직렬화된 위젯 인스턴스를 포함하는 레거시 위젯 블록을 구성합니다.
연구 구현은 인코딩된 직렬화 인스턴스와 무결성 속성을 사용하여
블록을 구성합니다.
취약한 경로는 궁극적으로 이 데이터를 위젯 인스턴스로 처리합니다.
---
## 5. 무결성 우회
플러그인의 `enable_rendering_widget_copied()` 동작은 공격자가 제어하는
위젯 데이터에 대해 유효한 무결성 속성을 생성하도록 악용될 수 있습니다.
이를 통해 악성 위젯 인스턴스가 예상된 무결성 검사를 통과하고
취약한 처리 경로에 도달할 수 있습니다.
---
## 6. 안전하지 않은 객체 처리
취약한 `is_safe_widget_instance()` 보호는 조작된 위젯 인스턴스를 통해
제공된 객체에 대해 충분하지 않습니다.
PHP의 객체 처리 동작은 역직렬화 과정에서 매직 메서드를 호출할 수 있습니다.
그 결과는 악용 가능한 PHP 객체 주입 프리미티브입니다.
---
## 7. 가젯 체인
연구 PoC는 역직렬화 중에 호출 가능한 동작을 제공하는
WordPress / The Events Calendar 객체 구조를 구성합니다.
PoC는 콜백 지향 객체와 직렬화된 클래스 구조를 사용하여
연구 페이로드를 구성합니다.
---
## 8. 코드 실행
최종 영향은 원격 코드 실행입니다.
PoC는 연구용 웹셸 단계와 관리자 생성 로직을 포함합니다.
안전한 취약점 검증을 위해, 중요한 보안 경계는 이미 취약한
역직렬화 체인의 성공적인 실행으로 입증되었습니다.
---
# 취약점이 치명적인 이유
다음의 조합:```text
Unauthenticated
+
Remote
+
PHP Object Injection
+
RCE
높은 영향도의 공격 경로를 생성합니다.
공격자는 다음이 필요하지 않습니다:
주요 환경적 전제 조건은 취약한 이벤트/댓글 렌더링 경로에 접근할 수 있어야 한다는 것입니다.
저장소에는 Python 기반 연구 구현이 포함되어 있습니다.
업로드된 PoC는 원래 연구 로직을 감싸는 비동기 러너입니다.
다음을 사용합니다:```text Python aiohttp rich
구현은 단계적 페이로드 전달과 검증을 통해 취약점 체인을 수행합니다.
PoC 소스는 자신의 아키텍처를 다음과 같이 설명합니다:```text
payload building
|
v
stage 1
|
v
verification
|
v
stage 2
연구 구현에는 다음 기능이 포함됩니다:
PoC에는 Windows 및 Unix 계열 환경에 대한 플랫폼 인식 검사도 포함되어 있습니다.
연구 도구는 개별적으로 승인된 WordPress 설치에 대해 사용할 수 있습니다.
개념적으로:```text Single URL | v Target Discovery | v Event Discovery | v Comment Delivery | v Vulnerability Trigger | v Verification
단일 대상 워크플로는 다음과 같은 경우에 유용합니다:
* 로컬 랩
* 스테이징 시스템
* CVE 재현
* 벤더 테스트
* 승인된 침투 테스트
* 보안 연구
---
# URL 목록
비동기 러너는 URL 목록도 지원합니다.
입력 형식은 다음과 같습니다:```text
one URL per line
예시:```text https://lab-wordpress-01.example https://lab-wordpress-02.example https://lab-wordpress-03.example
빈 줄과 주석은 무시할 수 있습니다.
러너는 타겟을 로드하고 설정된 스레드/동시성 개수로
이들을 동시에 처리합니다.
---
# 동시 처리
PoC는 여러 타겟의 동시 처리를 지원합니다.
개념적으로:```text
URL LIST
|
+-----------+-----------+
| | |
v v v
Worker 1 Worker 2 Worker 3
| | |
v v v
Target Target Target
| | |
+-----------+-----------+
|
v
Results
구현은 비동기 세마포어를 사용하여 동시성 수준을 제어합니다.
러너에서 기본 구성된 동시성은 20입니다.
비동기 러너는 두 개의 결과 파일을 생성할 수 있습니다:```text shells.txt admins.txt
`shells.txt`에는 발견된 업로드된 셸 URL이 포함되어 있습니다.
`admins.txt`에는 다음과 같은 형식의 관리자 결과 정보가 포함되어 있습니다:```text
url | user | pass
[!WARNING] 이 파일들에는 극도로 민감한 자격 증명과 침투 후 아티팩트가 포함될 수 있습니다.
생성된 결과 파일을 GitHub에 절대 게시하지 마십시오.
공개 취약점 연구를 위해서는 이 파일들을 Git
저장소 외부에 보관하고 .gitignore에 추가하십시오.
shells.txt admins.txt
For responsible vulnerability validation:
START
|
v
플러그인 버전 확인
|
v
사전 요구 사항 확인
|
v
댓글 기능이 활성화되었는지 확인
|
v
이벤트가 댓글을 노출하는지 확인
|
v
랩 환경에서 재현
|
v
취약한 동작 확인
|
v
증거 및 로그 기록
|
v
중단 / 공개```
Use the minimum level of interaction required to prove the finding.
---
# Important Prerequisites
The Wordfence advisory identifies the following important condition:
```text
Comments must be enabled
and
comments must be visible on events```
The attack relies on the ability of an unauthenticated commenter to view
their own pending comment through the WordPress moderation-hash URL.
If comments are disabled or the relevant event comment path is not
available, the documented unauthenticated delivery mechanism may not be
reachable.
---
# Platform Considerations
The PoC contains environment-detection functionality.
The research code attempts to identify information such as:
```text
운영 체제
현재 실행 사용자
현재 작업 디렉터리
문서 루트
서버 소프트웨어
HTTP 호스트
PHP 정보```
These values are useful for controlled research and understanding the
impact of successful code execution.
---
# Payload Architecture
The serialized payload contains multiple nested PHP objects.
The research implementation builds structures associated with:
```text
Tribe__Utils__Callback
Tribe\Utils\Element_Classes
stdClass```