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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-27541-Analysis-Lab — # Docker-лаборатория для воспроизведения CVE-2026-27541 — аутентифицированное повышение привилегий в WooCommerce Wholesale Prices Сравнивает уязвимые и исправленные сборки, включает PoC-скрипт и анализ первопричины. | Kitploit
Инструменты/GitHubGitHub/rootdirective-sec/cve-2026-27541-analysis-lab
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHub
rootdirective-sec/cve-2026-27541-analysis-lab

CVE-2026-27541-Analysis-Lab

# Docker-лаборатория для воспроизведения CVE-2026-27541 — аутентифицированное повышение привилегий в WooCommerce Wholesale Prices Сравнивает уязвимые и исправленные сборки, включает PoC-скрипт и анализ первопричины.

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

Популярное

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

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

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

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

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

CVE-2026-27541 — Лабораторный стенд повышения привилегий с аутентификацией в WooCommerce Wholesale Prices

vulnx

Обзор

Этот проект представляет собой локальный Docker-стенд для анализа и воспроизведения поведения CVE-2026-27541 в плагине WooCommerce Wholesale Prices / Wholesale Suite путём сравнения уязвимой и исправленной сборок бок о бок на одной машине.

Суть проблемы — нарушенный контроль доступа в следующей конечной точке REST API:

/wp-json/wwp/v1/admin/save

Судя по исходному коду, используемому в этом стенде, этот маршрут уже имеет permission_callback как в уязвимой, так и в исправленной сборках. Однако в затронутой версии используется проверка прав, слишком широкая для операции записи настроек администратора:

  • уязвимая (2.2.6) → current_user_can( 'manage_woocommerce' )
  • исправленная (2.2.7) → current_user_can( 'manage_options' )

В этом стенде пользователь shopmgr с ролью shop_manager имеет manage_woocommerce=true, но не manage_options. В результате этот пользователь с низкими привилегиями может использовать действительную сессию входа плюс действительный X-WP-Nonce для вызова конечной точки сохранения настроек администратора в уязвимой сборке, тогда как исправленная сборка возвращает 403 rest_forbidden для того же запроса.


Что доказывает этот стенд

  • Уязвимый узел (2.2.6): пользователь shopmgr может успешно вызвать POST /wp-json/wwp/v1/admin/save и изменить настройки плагина.
  • Исправленный узел (2.2.7): тот же запрос от shopmgr отклоняется с кодом 403.
  • Запрос без аутентификации: если конечная точка вызывается напрямую без аутентификации, обе сборки возвращают 403, что согласуется с тем, что это проблема повышения привилегий после аутентификации.
  • Доказательство сохранения: после успешного запуска PoC уязвимая сборка сохраняет опцию WordPress wwp_see_wholesale_prices_replacement_text=PWNED_BY_POC, тогда как исправленная сборка по-прежнему возвращает See wholesale prices.

Топология стенда

Сервисы

  • vuln → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.6
  • patched → WordPress + WooCommerce + WooCommerce Wholesale Prices 2.2.7
  • db-vuln / db-patched → отдельные базы данных MariaDB
  • seed-vuln / seed-patched → задания инициализации wp-cli, которые устанавливают WordPress, устанавливают плагин, создают пользователей и создают товар для тестирования

Опубликованные порты

  • http://localhost:8081 → уязвимый
  • http://localhost:8082 → исправленный

Базовые образы

  • WordPress: wordpress:6.8.1-php8.2-apache
  • MariaDB: mariadb:11.4.5
  • Инициализатор: wordpress:cli-php8.2

Структура репозитория

.
├── docker-compose.yml
├── README.md
├── patched/
│   └── Dockerfile
├── vuln/
│   └── Dockerfile
├── scripts/
│   └── seed-wp.sh
└── poc.py

Важные файлы

  • docker-compose.yml — определяет уязвимый и исправленный стеки с отдельными базами данных
  • scripts/seed-wp.sh — устанавливает WordPress, WooCommerce, целевой плагин и создаёт тестовых пользователей и данные товара
  • poc.py — PoC с минимальным вредом для входа, извлечения nonce и вызова конечной точки REST

Инициализированная среда

После готовности стека скрипт инициализации создаёт следующее:

Пользователи

  • admin / AdminPass!234
  • shopmgr / ShopMgrPass!234

Товар

  • slug: lab-product
  • обычная цена: 100
  • оптовая цена: 50

Версии

  • WooCommerce: 10.6.0

  • WooCommerce Wholesale Prices:

    • уязвимая: 2.2.6
    • исправленная: 2.2.7

Скрипт также записывает lab-secrets.json в каждый контейнер WordPress, чтобы можно было проверить инициализированные данные и информацию о версиях.


Почему PoC наносит минимальный вред

Этот PoC не пытается захватить сайт, изменить роли, установить плагины или выполнить shell.

Он делает только следующее:

  1. входит как shopmgr
  2. посещает соответствующую страницу администратора для извлечения wpApiSettings.nonce
  3. отправляет запрос к целевой конечной точке
  4. изменяет легко наблюдаемое значение настройки:
wwp_see_wholesale_prices_replacement_text = PWNED_BY_POC

Эта настройка используется как наблюдаемый маркер для демонстрации того, что пользователь с низкими привилегиями может изменять конфигурацию, доступную только администратору.


Сводка по уязвимости

Затронутый компонент

  • Плагин: WooCommerce Wholesale Prices / Wholesale Suite
  • Маршрут: POST /wp-json/wwp/v1/admin/save

Класс уязвимости

  • Нарушенный контроль доступа
  • Повышение привилегий с аутентификацией

Практическое значение

Хотя конечная точка требует действительную сессию и nonce, уязвимая версия всё равно позволяет пользователю с низкими привилегиями, такому как shopmgr с ролью shop_manager, вызывать конечную точку, которая должна быть доступна только администратору.

Важный нюанс

Это не уязвимость без аутентификации.

Если конечная точка вызывается напрямую без сессии входа, и уязвимая, и исправленная сборки отклоняют запрос. Ошибка заключается в авторизации после аутентификации, а не в самой аутентификации.


Анализ первопричины

В уязвимой версии отсутствует не permission_callback. Недостаток в том, что она использует слишком широкую проверку прав (manage_woocommerce) для REST-действия, которое записывает настройки на стороне администратора.

Из исходного кода в includes/class-wwp-admin-settings.php:

  • и уязвимая, и исправленная сборки регистрируют один и тот же маршрут: POST /wp-json/wwp/v1/admin/save
  • обе сборки направляют его в save_registered_settings()
  • обе сборки используют permission_admin_check() в качестве permission_callback
  • реальная разница — в проверяемой возможности

Уязвимая (2.2.6)

if ( ! current_user_can( 'manage_woocommerce' ) ) {
    return new WP_Error( 'rest_forbidden', ... );
}

Исправленная (2.2.7)

if ( ! current_user_can( 'manage_options' ) ) {
    return new WP_Error( 'rest_forbidden', ... );
}

В этом стенде пользователь shopmgr с ролью shop_manager имеет manage_woocommerce=true, но не manage_options, поэтому он проходит уязвимую проверку, но не проходит исправленную.

Что изменилось в исправленном поведении

Исправленная версия делает больше, чем просто меняет ответ с 200 на 403. Она меняет логику контроля доступа, ужесточая требование к правам с manage_woocommerce до manage_options.

Кроме того, путь сохранения в исправленной сборке дополнительно укреплён за счёт перехода от фильтрации на основе префиксов к явным спискам разрешений и более строгой санитизации.

Почему PoC срабатывает на уязвимой версии

PoC следует тому же потоку, что и реальный браузерный контекст:

  • вход как shopmgr
  • открытие страницы настроек плагина
  • извлечение wpApiSettings.nonce
  • вызов POST /wp-json/wwp/v1/admin/save

Поскольку уязвимая сборка позволяет пользователям с manage_woocommerce вызывать эту операцию записи настроек, запрос успешен и приводит к постоянному изменению опции.

Урок безопасности

nonce помогает защитить от CSRF, но это не механизм авторизации.

Наличие действительной сессии и действительного nonce не означает, что пользователю должно быть разрешено выполнять действия администратора. Использование слишком широкой возможности на привилегированной конечной точке достаточно для создания обхода авторизации с низкими привилегиями.


Воспроизведение стенда

Предварительные требования

  • Docker Desktop / Docker Engine
  • Docker Compose v2
  • Python 3
  • Доступ в интернет для первоначальной загрузки образов и плагина

1) Запуск стенда

docker compose up -d --build

2) Проверка запущенных контейнеров

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