HTMX no es muy compatible con CSP (Content Security Policy)
(sjoerdlangkemper.nl)- HTMX es un framework de JavaScript que permite reemplazar elementos del DOM con datos dinámicos mediante solicitudes AJAX
- Como HTMX agrega comportamiento dinámico a la página usando etiquetas HTML normales con atributos personalizados, es difícil ofrecer seguridad adicional contra ataques de cross-site scripting (XSS)
- En general, una Content Security Policy (CSP) permite restringir el JavaScript que puede ejecutarse
- Es difícil configurar una CSP que siga permitiendo que HTMX funcione y que al mismo tiempo proteja contra cross-site scripting
Carga de fragmentos maliciosos
- Una forma de inyectar HTMX es hacer una solicitud a un host malicioso
- HTMX recupera fragmentos HTML que pueden incluir JavaScript y los coloca en la página
- Se puede usar para cargar scripts maliciosos al activar solicitudes a dominios distintos del dominio de la aplicación web
eval inseguro
- HTMX genera y ejecuta código dinámicamente
- Las siguientes funciones de HTMX hacen esto: filtros de disparadores, atributo
hx-on,hx-valsohx-headerscon prefijosjs:/javascript: - Para que estas funciones operen, la aplicación debe usar la opción CSP
unsafe-evalpara permitir la evaluación dinámica de código - Sin embargo, permitir
unsafe-evalhace posible inyectar JavaScript de inmediato usando funciones de HTMX
Deshabilitar HTMX con hx-disable
- Se puede usar el atributo
hx-disablepara deshabilitar funciones de HTMX en partes de la página - La documentación afirma que esto puede ofrecer seguridad adicional
- Pero esto se puede eludir fácilmente: basta con cerrar la etiqueta div con `
e insertar la carga útil fuera del elemento que tiene el atributohx-disable`
Nonce para scripts inline
- Usar un nonce en CSP es la forma más segura de prevenir la inyección de scripts
- La aplicación genera un nonce aleatorio y lo agrega a todos los scripts que forman parte de la aplicación
- Los scripts inyectados por un atacante no tendrán el nonce correcto, por lo que no se ejecutarán
- HTMX tiene una función para agregar automáticamente el nonce correcto a los scripts inline que recupera
- Esto es conveniente, pero rompe por completo el modelo de seguridad de una CSP basada en nonce
- Al agregar el nonce correcto a todos los scripts que encuentra, HTMX compromete por completo la seguridad que proporciona el nonce
- La adición automática del nonce se realiza mediante el parámetro
htmx.config.inlineScriptNonce
Meta tag de configuración
- HTMX tiene varias opciones de configuración que pueden definirse con una etiqueta ``
- En un ataque XSS, se puede modificar la configuración de HTMX inyectando la etiqueta `` adecuada
- Por ejemplo, antes se mencionó que el atributo
hx-disabledesactiva el procesamiento de HTMX - Sin embargo, en la configuración se puede cambiar el nombre de ese atributo
- Si se cambia
hx-disablepor otro nombre, la funciónhx-disablepuede quedar deshabilitada
Conclusión
- Usar HTMX en un sitio aumenta significativamente la superficie de ataque de la inyección HTML
- Una Content Security Policy puede limitar el riesgo de XSS, pero es imposible ofrecer seguridad contra la inyección mientras se usan todas las funciones de HTMX
2 comentarios
Parecería que podría haber una refutación a este artículo o una explicación sobre cómo usarlo de forma segura...
Lanzamiento de Htmx 2.0.0
htmx - herramientas potentes para HTML