
Шаблон Nuclei для неинтрузивного обнаружения XSS2Shell — дифференциального парсера в ядре WordPress, работающего до аутентификации и позволяющего внедрять DOM-элементы на страницу входа, что служит основой для цепочки атак XSS → RCE.
Шаблон Nuclei для неинтрузивного обнаружения XSS2Shell — дифференциального парсера, доступного до аутентификации в ядре WordPress, который позволяет внедрять элементы DOM на страницу входа, служа основой для цепочки XSS → RCE.
⚠️ Этот шаблон только обнаруживает ошибку санитизации (этап отражения маркера в HTML-ответе). Он не выполняет полную цепочку эксплуатации (DOM clobbering, JSONP/SOME, кражу Application Password или загрузку плагина). Использовать строго только на активах с явного разрешения.
Ядро WordPress при отображении сообщения об ошибке «пользователь не зарегистрирован» в wp-login.php вставляет введённое имя пользователя в HTML без согласованного экранирования между двумя различными фильтрами:
wp_strip_all_tags() (основанный на strip_tags() из PHP) распознаёт тег только в том случае, если после < сразу идёт буква — пробел после < заставляет фильтр обрабатывать содержимое как обычный текст.wp_kses_post(), применяемый сразу после, использует собственный токенизатор, который допускает такой пробел и восстанавливает строку как реальный HTML-элемент (<area>, <div> и <button> находятся в белом списке).В результате неаутентифицированный злоумышленник может внедрить произвольные элементы DOM на страницу входа, которые — в сочетании с унаследованными обработчиками скрипта user-profile.js, DOM clobbering переменной ajaxurl и JSONP REST API — позволяют выполнять JavaScript в источнике WordPress и, в полной цепочке, получать RCE против учётной записи администратора.
Обнаружено и раскрыто компанией pwn.ai. Исправлено в WordPress 7.0.3 (бэкпорт до ветки 4.7).
Шаблон отправляет POST-запрос на /wp-login.php с полезной нагрузкой в поле log, содержащей:
< area id=xss2shell-marker href=/x>< div id=xss2shell-div>
Если WordPress уязвим, wp_kses_post() восстанавливает эти строки как реальные HTML-элементы в ответе. Шаблон использует два матчера в regex (условие and), чтобы подтвердить, что оба тега появляются восстановленными — снижая количество ложных срабатываний WAF, которые частично отражают входные данные.
# Validar sintaxe do template
nuclei -t CVE-2026-64638.yaml -validate
# Rodar contra um alvo único
nuclei -t CVE-2026-64638.yaml -u https://target.com
# Rodar contra uma lista de alvos
nuclei -t CVE-2026-64638.yaml -l targets.txt
# Debug (ver request/response completos)
nuclei -t CVE-2026-64638.yaml -u https://target.com -debug-req -debug-resp
| Результат | Значение |
|---|---|
| Положительное совпадение | Внедрённые теги были отражены как реальный HTML → присутствует дифференциальный парсер → цель уязвима (не исправлена) |
| Нет совпадения | Полезная нагрузка была экранирована или удалена → цель исправлена (WordPress ≥ 7.0.3) или защищена WAF/прокси, которые нормализуют пробелы внутри тегов |
Обновитесь до WordPress 7.0.3 или новее. Патч был бэкпортирован во все поддерживаемые ветки, начиная с версии 4.7.
Этот шаблон предоставляется для целей исследования безопасности и авторизованных тестов на проникновение. Использование против систем без явного разрешения незаконно. Автор не несёт ответственности за неправомерное использование.
Renzi