Vulnerabilidad XSS en la Vista previa en Directo
Bueno, si usas GrapesJS y permites la posibilidad de insertar HTML personalizado, sí, Self-XSS es posible. Desafortunadamente, hay pocos problemas que no me permitan solucionarlo correctamenteNecesito acceder al DOM del iframe para añadir o actualizar componentes internos, así que el editor no funcionará sin 'sandbox=...
Lee la respuesta completa abajo ↓Pregunta
Versión: 0.16.22
¿Puedes reproducir el error de la demo?
[x] Sí
Pasos:
- Haz clic en Importar HTML
- Insertar '<img src="any_image_source.gif" onload="alert(1)"/>'
- La JS será ejecutada
Tener un atributo "sandbox" adecuado en iframe probablemente podría mitigar el problema.
Respuestas (3)
Bueno, si usas GrapesJS y permites la posibilidad de insertar HTML personalizado, sí, Self-XSS es posible.
Desafortunadamente, hay pocos problemas que no me permitan solucionarlo correctamente
- Necesito acceder al DOM del iframe para añadir o actualizar componentes internos, así que el editor no funcionará sin 'sandbox="allow-same-origin"'.
- Ejecutar JS en el editor es una de sus funciones (Componentes con JS), así que para que funcionen también necesitaría 'allow-scripts'
- Tener 'permitir-mismo-origen' y 'permite-scripts' al mismo tiempo es casi como no usar 'sandbox', ya que el iframe puede acceder a cookies y otras interfaces de almacenamiento web (por ejemplo, LocalStorage, SessionStorage, etc.) del documento principal.
La única solución válida que veo, por ahora, es por defecto habilitar solo 'sandbox="permite-mismo-origen'. Lo que significa que Componentes con JS no funcionará y para habilitarlo deberías cambiar alguna opción nueva, arriesgándose a usar Self-XSS si también permites la importación personalizada de HTML
También he visto soluciones como esta https://stackoverflow.com/a/41606174 (en este caso elimina la posibilidad de leer/escribir cookies), pero no estoy seguro de cómo es realmente fiable
¿Alguna sugerencia? 😬
Tienes razón, pensábamos que 'sandbox="permite-mismo-origen"' bastaría, pero también hace falta 'permitir-scripts', y entonces es como no usar sandbox en absoluto. Pero, lo que podría ser útil es proporcionar una forma para que los usuarios de grapejs controlen de alguna manera los atributos del lienzo iframe, así pueden asumir la responsabilidad y controlar el valor sandbox u otros atributos.
¡Gracias!
Si usas el encabezado HTTP de la política de seguridad de contenido puedes solucionar muchos problemas de XSS como este. pero hay un problema con GrapesJS ahora mismo que es que usa underscore.js, que incluye una función con el uso de "eval", así que no puedes hacer que el encabezado CSP sea tan seguro como debería
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #1693
[BUG|/PREGUNTA] Caracteres extraños (Â) dentro de la vista previa CSS/HTML; Los elementos no se eliminan completamente
BICHO¿Estás usando la última versión (las versiones anteriores NO son compatibles)?0.14.50¿Te enfrentas al error con tu copia local de Grap...
Issue #1295
[Bug]: Falta el campo de selección de unidad en IE tras hacer clic
@artf actualmente estoy usando la última versión de GrapesJS (pero puedes reproducir este error usando la demo). Básicamente, solo tienes q...
Issue #3045
BUG: Problema al importar CSS y módulos en nodejs es6
Versión: 0.16.22 ¿Puedes reproducir el error de la demo? [x] Sí [ ] No ¿Cuál es el comportamiento esperado? Para importar Grapejs CSS y mód...
Issue #3579
RTE se pierde al abrirse justo después de soltar el componente 'activeOnRender'
Versión: 0.17.4 ¿Puedes reproducir el error de la demo?[x] Sí[ ] No Pasos para reproducir:Ir a la demoColocar un bloque de "Texto" dentro d...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.