➡wp2shell — unauth RCE чейн, уязвимы WordPress'ы версий [включительно]:
▪️
6.9.0 – 6.9.4 (2 декабря – 11 марта 2026)▪️
7.0.0 – 7.0.1 (20 мая – 9 июля 2026)▪️ немного*
6.8.0 – 6.8.5 (*только SQLi)🔗 Чекер: wp2shell.com
🔗 PoC: github.com/Icex0/wp2shell-poc
🔗 PoC: github.com/0xsha/wp2shell
🔗 PoC: github.com/dinosn/wp2shell-lab
🔗 PoC: github.com/sergiointel/wp2shell-poc
⚡️ ШАГ 1:
CVE-2026-630300️⃣
POST /wp-json/batch/v1 или POST /?rest_route=/batch/v1 — unauth метод, принимающий целый список подзапросов к API в виде JSON, прим.:{
"requests": [
{
"path": "/wp/v2/posts"
},
{
"method": "POST",
"path": "/wp/v2/users/me"
}
]
}1️⃣ Метод поверяет каждый запрос➡️параллельно собирает 2 массива с результатами:
$matches + $validation;Если какой-то запрос не прошёл проверку**
wp_parse_url() — массивы $matches + $validation рассинхронизируются➡️один подзапрос может быть выпущен с хендлером другого подзапроса;**Например, такой запрос:
GET http://:2️⃣ Далее рассинхрон поможет сметчить привилегированный хендлер (из
$match) + с методом, для которого хочется обойти валидацию;⚡ *ШАГ 2:
CVE-2026-601370️⃣
GET /wp/v2/posts/<id> — метод, который после валидации передаёт свои параметры (author_exclude, orderby, per_page, ...) функции get_items();1️⃣
author_exclude➡️мапится в WP_Query.author__not_in, который вставляется в SQL запрос;⬆️ ИТОГ: можем вызвать
GET /wp/v2/posts/999999?author_exclude=<payload> [в составе batch-запроса] в обход проверок!
➡Почитать ещё:
▪️ ‟wp2shell: Pre Authentication RCE in WordPress Core”
▪️ ‟Exploit brokers pay $500,000 for a WordPress RCE. I found one with GPT5.6 Sol Ultra and $25”
▪️ ‟wp2shell hits WordPress: detecting pre-auth RCE from plugin drop to command execution”
@HaHacking 🐇
