
# Docker लैब CVE-2026-10795 का पुनरुत्पादन: UpdraftPlus UpdraftCentral प्रमाणीकरण बाईपास को प्लगइन इंस्टॉलेशन के साथ जोड़कर RCE प्राप्त करना। इसमें असुरक्षित/पैच किए गए लक्ष्य, PoC एक्सप्लॉइट, और स्रोत-स्तरीय वॉकथ्रू शामिल हैं।
इस रिपॉजिटरी में 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 पेलोड स्वीकार करता है, उसे अस्थायी स्थान पर लिखता है, प्लगइन इंस्टॉल करता है, और अनुरोध किए जाने पर उसे सक्रिय करता है।