
Drupal 11.4.8 - उच्च - रिमोट - XSS - Move Block सहोदर लेबल @label एस्केपिंग छोड़ते हैं
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · drupal-move-block-markup
राइट-अप: https://abraxaslabs.tech/research/drupal-move-block-markup
वर्ग: स्टोर्ड XSS पहुँच: रिमोट
Drupal core 11.4.8 (61044508) - Drupal
SA-CORE-2026-012 ने वर्तमान Move Block पंक्ति को t('@label (current)') में बदल दिया, जो Html::escape() करता है। उसी क्षेत्र की सहोदर पंक्तियाँ अभी भी BlockPluginTrait::label() को सीधे MoveBlockForm में #markup पर असाइन करती हैं। वह लेबल configuration['label'] है, जो एक कच्चा टेक्स्टफ़ील्ड है। इसके बाद Renderer::ensureMarkupIsSafe एक स्ट्रिंग को एडमिन टैग सूची के साथ XSS-फ़िल्टर करता है, इसलिए एक <b> (और अन्य एडमिन टैग) बच जाता है।
एक Layout Builder संपादक जो किसी ब्लॉक के शीर्षक को HTML पर सेट कर सकता है, उसी क्षेत्र में किसी भिन्न ब्लॉक पर Move खोलने वाले किसी अन्य संपादक या एडमिन तक पहुँच जाता है। Move डायलॉग में स्टोर्ड XSS। RCE नहीं और LPE नहीं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | स्टोर्ड XSS |
| पहुँच | रिमोट (Layout Builder ब्लॉक कॉन्फ़िगर; पीड़ित Move Block खोलता है) |
| CWE | CWE-79 |
| CVSS | मध्यम: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N |
| उत्पाद | Drupal core |
| प्रभावित | 11.4.8 (61044508071749629aaf3380aa85971e94df9e84) |
| प्रमाणीकरण | Layout Builder ब्लॉक कॉन्फ़िगर। पीड़ित Move Block खोलता है। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
लेखक: वह उपयोगकर्ता जो Layout Builder ब्लॉक रख या कॉन्फ़िगर कर सकता है (साइट-कॉन्फ़िग नहीं)। पीड़ित: एक अन्य LB संपादक या एडमिन जो उसी क्षेत्र में किसी भिन्न ब्लॉक पर Move खोलता है।
| विशेषाधिकार | विधि / सिंक | प्रकार | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
| Move डायलॉग की सहोदर पंक्ति में हमलावर का HTML प्रिंट करना | $label['#markup'] = $plugin->label(); फिर ensureMarkupIsSafe | HTML की अखंडता | लैब-प्रमाणित। सहोदर HTML है <b class="lb-sib">DRUPAL-MOVE-BLOCK-MARKUP-WITNESS</b> |
एडमिन-टैग मार्कअप (<b>, और Xss::getAdminTagList का शेष) बनाए रखना | स्ट्रिंग #markup को एडमिन सूची के साथ XSS-फ़िल्टर किया जाता है, एस्केप नहीं | HTML की अखंडता | <b> के लिए लैब-प्रमाणित |
| Layout Builder ओरिजिन में पीड़ित संपादक के रूप में सत्र / क्रियाएँ | उस डायलॉग में स्टोर्ड XSS | पीड़ित सत्र की अखंडता | अनुमानित। लैब सहोदर सेल में कच्चे HTML पर रुकती है |
| नकारात्मक: वर्तमान पंक्ति | t('@label (current)', ...) | बंद | लैब-प्रमाणित। <em class="lb-cur">... |
नकारात्मक: @label के माध्यम से सहोदर | पैच किया गया गैजेट पथ | बंद | लैब-प्रमाणित। <b class="lb-sib">... |
इस शेष पर बंद: लाइव Drupal साइट इंस्टॉल (यह लैब एक गैजेट है); मापे गए HTTP ओरेकल के रूप में Layout Builder UI सत्र चोरी; RCE; LPE। अनप्रमाणित आगंतुक Move Block नहीं खोल सकते।
वही पिन शेष: AttributeXss HTMX attrs।
मैंने SA-CORE-2026-012 के बाद Drupal 11.4.8 को पिन किया। सलाहकार ने वर्तमान ब्लॉक शीर्षक को बंद कर दिया। MoveBlockForm.php 210-218:
if ($is_current_block) {
$label['#markup'] = $this->t('@label (current)', ['@label' => $plugin->label()]);
// ...
}
else {
$label['#markup'] = $plugin->label();
}
BlockPluginTrait::label() सेट होने पर configuration['label'] लौटाता है। Renderer::ensureMarkupIsSafe MarkupInterface (@label पहले से escaped) को XSS-फ़िल्टर नहीं करता। एक raw string को admin tag सूची से फ़िल्टर किया जाता है।
पहले से दर्ज गलत मोड़: वर्तमान row को अभी भी raw मानना (यह नहीं है); इसे RCE बताना; एक लाइव Drupal साइट को एकमात्र oracle मानना (बचा हुआ हिस्सा ये functions हैं); एक reverse shell। नाटक।
python3 drupal-move-block-markup-Abraxas-Labs.py
या
cd lab
./run.sh
केवल http://127.0.0.1:19490 को लक्षित करें। 11.4.8 फ़ंक्शंस का निष्ठावान गैजेट (MoveBlockForm का बचा हुआ कॉपी, FormattableMarkup, ensureMarkupIsSafe, Xss::filter)। यह लाइव drupal:11.4.8 साइट नहीं है। अंतिम पंक्ति how=gadget का उपयोग करती है।
SUCCESS drupal-move-block-markup how=gadget sibling-raw-tag=yes current-escaped=yes patched-sibling-escaped=yes DRUPAL-MOVE-BLOCK-MARKUP-WITNESS
प्रत्येक पंक्ति के लिए @label (या Html::escape) का उपयोग करें, न कि केवल वर्तमान ब्लॉक के लिए।
61044508071749629aaf3380aa85971e94df9e84)MoveBlockForm.php · BlockPluginTrait.phpGNU Affero GPL v3.0. देखें LICENSE. केवल लूपबैक लैब। कोई वारंटी नहीं।