Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
drupal-move-block-markup — Drupal 11.4.8 — высокий — удалённый — XSS — перемещение блока: метки соседних элементов пропускают экранирование @label | Kitploit
Инструменты/GitHubGitHub/abraxas/drupal-move-block-markup
Статический анализ кода (SAST)Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на Проникновение
GitHubabraxas/drupal-move-block-markup

drupal-move-block-markup

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Drupal 11.4.8 — высокий — удалённый — XSS — перемещение блока: метки соседних элементов пропускают экранирование @label

Репозиторий
3 дней назадЕщё не проверено

Abraxas Labs - drupal-move-block-markup

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  drupal-move-block-markup

drupal-move-block-markup

Класс: Stored XSS Достижимость: Удалённая

Drupal core 11.4.8 (61044508) - Drupal

SA-CORE-2026-012 перевёл строку текущего блока в Move Block на t('@label (current)'), что применяет Html::escape(). Соседние строки в том же регионе по-прежнему присваивают BlockPluginTrait::label() напрямую в #markup в MoveBlockForm. Эта метка — это configuration['label'], необработанное текстовое поле. Затем Renderer::ensureMarkupIsSafe XSS-фильтрует строку с помощью списка административных тегов, поэтому <b> (и другие административные теги) выживает.

Редактор Layout Builder, который может задать заголовок блока как HTML, достигает другого редактора или администратора, открывающего Move на другом блоке в том же регионе. Stored XSS в диалоге Move. Не RCE и не LPE.

IDCVE пока нет
КлассStored XSS
ДостижимостьУдалённая (настройка блока Layout Builder; жертва открывает Move Block)
CWECWE-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 (не site-config). Жертва: другой редактор LB или администратор, открывающий Move на другом блоке в том же регионе.

ПривилегияМетод / стокТипДоказано в лаборатории или выведено
Вывод HTML атакующего в соседней строке диалога Move$label['#markup'] = $plugin->label(); затем ensureMarkupIsSafeЦелостность HTMLДоказано в лаборатории. Соседний HTML — <b class="lb-sib">DRUPAL-MOVE-BLOCK-MARKUP-WITNESS</b>
Сохранение разметки административных тегов (<b> и остального из Xss::getAdminTagList)строковый #markup XSS-фильтруется с административным списком, а не экранируетсяЦелостность HTMLДоказано в лаборатории для <b>
Сессия / действия от имени редактора-жертвы в origin Layout BuilderStored XSS в этом диалогеЦелостность сессии жертвыВыведено. Лаборатория останавливается на необработанном HTML в соседней ячейке
Отрицательный: текущая строкаt('@label (current)', ...)ЗакрытоДоказано в лаборатории. &lt;em class="lb-cur"&gt;...
Отрицательный: соседняя через @labelпропатченный путь гаджетаЗакрытоДоказано в лаборатории. &lt;b class="lb-sib"&gt;...

Закрыто по этому остатку: установка на живой сайт Drupal (эта лаборатория — гаджет); кража сессии через UI Layout Builder как измеряемый HTTP-оракул; RCE; LPE. Неаутентифицированные посетители не могут открыть Move Block.

Тот же закреплённый коммит: AttributeXss HTMX attrs.

Как я это нашёл

Я закрепил Drupal 11.4.8 после SA-CORE-2026-012. Рекомендация закрыла заголовок текущего блока. 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 не XSS-фильтрует MarkupInterface (@label уже экранирован). Необработанная строка фильтруется с административным списком тегов.

Уже зафиксированные ошибочные пути: считать текущую строку по-прежнему необработанной (это не так); утверждать, что это RCE; живой сайт Drupal как единственный оракул (остаток — это данные функции); 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) для каждой строки, а не только для текущего блока.

Ссылки

  • github.com/drupal/drupal тег 11.4.8 (61044508071749629aaf3380aa85971e94df9e84)
  • MoveBlockForm.php · BlockPluginTrait.php
  • Рядом пропатчено: SA-CORE-2026-012
  • Тот же закреплённый коммит: drupal-htmx-attr
  • CWE-79

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только лаборатория на loopback. Без гарантий.

Скачать инструмент