Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
drupal-move-block-markup — Drupal 11.4.8 - Alta - Remoto - XSS - Move Block: rótulos irmãos ignoram o escape de @label | Kitploit
Ferramentas/GitHubGitHub/abraxas/drupal-move-block-markup
Análise Estática de Código (SAST)Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de Penetração
GitHubabraxas/drupal-move-block-markup

drupal-move-block-markup

Drupal 11.4.8 - Alta - Remoto - XSS - Move Block: rótulos irmãos ignoram o escape de @label

Ver Repositório
há 4 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Abraxas Labs - drupal-move-block-markup

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

drupal-move-block-markup

Classe: XSS Armazenado Alcance: Remoto

Drupal core 11.4.8 (61044508) - Drupal

SA-CORE-2026-012 alterou a linha atual do Move Block para t('@label (current)'), que aplica Html::escape(). Linhas irmãs na mesma região ainda atribuem BlockPluginTrait::label() diretamente a #markup em MoveBlockForm. Esse label é configuration['label'], um campo de texto bruto. Renderer::ensureMarkupIsSafe então aplica filtro XSS a uma string com a lista de tags de admin, então um <b> (e outras tags de admin) sobrevive.

Um editor do Layout Builder que pode definir o título de um bloco como HTML alcança outro editor ou admin que abre Move em um bloco diferente naquela região. XSS Armazenado no diálogo Move. Não é RCE e não é LPE.

IDainda sem CVE
ClasseXSS Armazenado
AlcanceRemoto (configuração de bloco do Layout Builder; vítima abre Move Block)
CWECWE-79
CVSSMédio: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
ProdutoDrupal core
Afetado11.4.8 (61044508071749629aaf3380aa85971e94df9e84)
AutenticaçãoConfiguração de bloco do Layout Builder. Vítima abre Move Block.
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1

O que um atacante pode fazer

Autor: usuário que pode posicionar ou configurar blocos do Layout Builder (não configuração do site). Vítima: outro editor de LB ou admin que abre Move em um bloco diferente na mesma região.

PrivilégioMétodo / sinkTipoComprovado em lab ou inferido
Imprimir HTML do atacante na linha irmã do diálogo Move$label['#markup'] = $plugin->label(); então ensureMarkupIsSafeIntegridade do HTMLComprovado em lab. HTML irmão é <b class="lb-sib">DRUPAL-MOVE-BLOCK-MARKUP-WITNESS</b>
Manter markup de tag de admin (<b>, e o resto de Xss::getAdminTagList)string #markup é filtrada por XSS com a lista de admin, não escapadaIntegridade do HTMLComprovado em lab para <b>
Sessão / ações como o editor vítima na origem do Layout BuilderXSS Armazenado naquele diálogoIntegridade da sessão da vítimaInferido. Lab para em HTML bruto na célula irmã
Negativo: linha atualt('@label (current)', ...)FechadoComprovado em lab. &lt;em class="lb-cur"&gt;...
Negativo: irmão através de @labelcaminho de gadget corrigidoFechadoComprovado em lab. &lt;b class="lb-sib"&gt;...

Fechado neste resíduo: instalação de site Drupal ao vivo (este lab é um gadget); roubo de sessão da UI do Layout Builder como oráculo HTTP medido; RCE; LPE. Visitantes não autenticados não podem abrir Move Block.

Mesmo resíduo de pin: AttributeXss HTMX attrs.

Como eu encontrei

Fiz pin do Drupal 11.4.8 após o SA-CORE-2026-012. O advisory fechou o título do bloco atual. MoveBlockForm.php 210-218:

if ($is_current_block) {
  $label['#markup'] = $this->t('@label (current)', ['@label' => $plugin->label()]);
  // ...
}
else {
  $label['#markup'] = $plugin->label();
}

BlockPluginTrait::label() retorna configuration['label'] quando definido. Renderer::ensureMarkupIsSafe não aplica filtro XSS a MarkupInterface (@label já escapado). Uma string bruta é filtrada com a lista de tags de admin.

Caminhos errados já registrados: tratar a linha atual como ainda bruta (não é); afirmar que isto é RCE; um site Drupal ao vivo como único oráculo (o resíduo são estas funções); um reverse shell. Teatro.

Lab

python3 drupal-move-block-markup-Abraxas-Labs.py

ou

cd lab
./run.sh

Alvo apenas http://127.0.0.1:19490. Gadget fiel das funções 11.4.8 (cópia do resíduo de MoveBlockForm, FormattableMarkup, ensureMarkupIsSafe, Xss::filter). Não é um site drupal:11.4.8 ao vivo. A última linha usa 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

A correção

Use @label (ou Html::escape) para cada linha, não apenas o bloco atual.

Referências

  • github.com/drupal/drupal tag 11.4.8 (61044508071749629aaf3380aa85971e94df9e84)
  • MoveBlockForm.php · BlockPluginTrait.php
  • Próximo corrigido: SA-CORE-2026-012
  • Mesmo pin: drupal-htmx-attr
  • CWE-79

Licença

GNU Affero GPL v3.0. Veja LICENSE. Apenas lab em loopback. Sem garantia.

Baixar ferramenta