7 pontos por xguru 2024-07-05 | 2 comentários | Compartilhar no WhatsApp
  • HTMX é um framework JavaScript que permite substituir elementos do DOM por dados dinâmicos por meio de requisições AJAX
  • Como o HTMX adiciona comportamentos dinâmicos à página usando tags HTML comuns com atributos personalizados, é difícil oferecer segurança adicional contra ataques de cross-site scripting (XSS)
  • Em geral, é possível usar a Content Security Policy (CSP) para limitar qual JavaScript pode ser executado
  • É difícil configurar uma CSP que continue permitindo o funcionamento do HTMX e, ao mesmo tempo, proteja contra cross-site scripting

Carregamento de fragmentos maliciosos

  • Um dos métodos de injeção no HTMX é realizar uma requisição para um host malicioso
  • O HTMX busca fragmentos HTML que podem incluir JavaScript e os insere na página
  • Isso pode ser usado para acionar requisições para domínios externos ao da aplicação web e carregar scripts maliciosos

eval inseguro

  • O HTMX gera e executa código dinamicamente
  • Os seguintes recursos do HTMX fazem isso: filtros de trigger, atributo hx-on, hx-vals ou hx-headers com prefixos js:/javascript:
  • Para que esses recursos funcionem, a aplicação precisa usar a opção CSP unsafe-eval, permitindo avaliação dinâmica de código
  • Porém, ao permitir unsafe-eval, torna-se possível injetar JavaScript imediatamente usando recursos do HTMX

Desativando o HTMX com hx-disable

  • É possível usar o atributo hx-disable para desativar recursos do HTMX em partes da página
  • A documentação afirma que isso pode fornecer segurança adicional
  • Mas isso é facilmente contornado: basta fechar a tag div com `

e inserir o payload fora do elemento que tem o atributohx-disable`

Nonce para scripts inline

  • Usar nonce na CSP é a forma mais segura de evitar injeção de scripts
  • A aplicação gera um nonce aleatório e o adiciona a todos os scripts que fazem parte da aplicação
  • Scripts injetados por um atacante não terão o nonce correto, então não serão executados
  • O HTMX tem um recurso que adiciona automaticamente o nonce correto aos scripts inline que ele encontra
  • Isso é conveniente, mas quebra completamente o modelo de segurança de uma CSP com nonce
  • Ao adicionar o nonce correto a todos os scripts encontrados, o HTMX compromete totalmente a segurança fornecida pelo nonce
  • A adição automática de nonce é feita por meio do parâmetro htmx.config.inlineScriptNonce

Meta tag de configuração

  • O HTMX tem várias opções de configuração que podem ser definidas usando a tag ``
  • Em um ataque XSS, é possível alterar a configuração do HTMX injetando a tag `` correta
  • Por exemplo, acima foi mencionado que o atributo hx-disable desativa o processamento do HTMX
  • No entanto, é possível alterar o nome desse atributo na configuração
  • Se ele for alterado de hx-disable para outra coisa, o recurso hx-disable pode ser desativado

Conclusão

  • Usar HTMX em um site aumenta significativamente a superfície de ataque para injeção de HTML
  • É possível usar a Content Security Policy para limitar o risco de XSS, mas é impossível manter todos os recursos do HTMX e, ao mesmo tempo, oferecer segurança contra injeções

2 comentários

 
galadbran 2024-07-06

Parece que caberia uma contestação a este texto ou uma discussão sobre formas seguras de usar isso...