Issue #3082✓ ResueltoAbierto el 20 de octubre de 2020por rukavinaReacciones 6

Vulnerabilidad XSS en la Vista previa en Directo

Respuesta rápidapor artf2

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)

👍 Muy útilartf23 de octubre de 2020

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? 😬

rukavina28 de octubre de 2020

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!

blinkybill7 de febrero de 2021

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.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

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 →
Opción premium

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.