HTMX não é muito compatível com CSP (Content Security Policy)
(sjoerdlangkemper.nl)- 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-valsouhx-headerscom prefixosjs:/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-disablepara 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-disabledesativa o processamento do HTMX - No entanto, é possível alterar o nome desse atributo na configuração
- Se ele for alterado de
hx-disablepara outra coisa, o recursohx-disablepode 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
Parece que caberia uma contestação a este texto ou uma discussão sobre formas seguras de usar isso...
Lançamento do Htmx 2.0.0
htmx - ferramentas poderosas para HTML