Vulnerabilidad XSS en el atributo iframe src
Creo que la opción de pre-analizador es una muy buena idea. Se mantiene en el concepto de 'plug-in' por función. ¿Qué tal actualizar 'fromElement' para aceptar un ID de elemento de cadena o un booleano? Si bool == cierto, funciona como ahora, analizando el HTML del contenedor. Si es un ID de cadena, utiliza el conteni...
Lee la respuesta completa abajo ↓Pregunta
Versión GrapesJS
- Confirmo que se debe usar la última versión de GrapesJS
¿Qué navegador usas?
Edge v122
Enlace de demo reproducible
https://jsfiddle.net/bwreyq29/1/
Describe el bicho
¿Cómo reproducir el bicho? Abre este enlace https://jsfiddle.net/bwreyq29/1/ y el código JavaScript adjunto al atributo 'SRC' se ejecutará automáticamente.
¿Cuál es el comportamiento esperado? Este código no debería ejecutarse
¿Cuál es el comportamiento actual? Existe una vulnerabilidad XSS
Código de conducta
- Acepto seguir el Código de Conducta de este proyecto
Respuestas (4)
Creo que la opción de pre-analizador es una muy buena idea. Se mantiene en el concepto de 'plug-in' por función.
¿Qué tal actualizar 'fromElement' para aceptar un ID de elemento de cadena o un booleano? Si bool == cierto, funciona como ahora, analizando el HTML del contenedor. Si es un ID de cadena, utiliza el contenido del elemento y el contenedor se convierte en el editor como ocurre ahora. Luego podríamos actualizar la documentación a favor de una plantilla de script HTML para el desarrollo. Esto evita cualquier cambio de frenada y favorece un uso adecuado.
'''js const editor = grapesjs.init({ Contenedor: '#gjs', fromElement: '#mySource', Altura: '100%', storageManager: { type: 0 }, Plugins: ['GJS-Bloques-Básico'] });
Totalmente de acuerdo con @bernesto de hecho, por mucho que intentemos que sea seguro, nunca será suficiente y no quiero dar la impresión de que la biblioteca es "tan segura" como para justificar la falta de validación del servidor. Las opciones actuales (por ejemplo, 'permitirAtraerInseguro', 'permitirValorAtraerInseguro') evitan solo lo básico y común.
Esto es inevitable al usar 'fromElement' para cargar desde un elemento DOM activo. El elemento de la página se carga y ejecuta de forma sincrónica. GrapesJS nunca tendría la oportunidad de procesar y desactivar el HTML de XSS.
Esto tendría que solucionarse impidiendo que el código malicioso se cargue nunca. Esto debería gestionarse en el servidor en la partida guardada. Pero, si en el cliente se necesita procesar, envolviendo el código en etiquetas de script y luego sanitizando el código antes de cargarlo en el editor así:
https://jsfiddle.net/bernesto/5gcxa0jm/1/
Veo que al cargar desde la propiedad 'components' en la inicialización o al publicar dinámicamente desde una fuente remota, existe la misma vulnerabilidad XSS, y esto puede ser algo que queramos evitar.
Personally, creo que el servidor debería procesar todas las partidas guardadas y desinfectar. Un actor malicioso siempre podría emular una solicitud del cliente y guardar un XSS malicioso en tu servidor, independientemente del editor used.
@artf ¿qué opinas?
En tu opinión, ¿debería incorporarse un desinfectante XSS en el editor? Y si es así, eso plantea la pregunta; ¿qué opinas de 'fromElement', por cierto? ¿Debería reimplementarse como algo similar a mi ejemplo, donde el contenido se proporciona usando etiquetas de script en su lugar? Por ejemplo, ¿quizá proporcionar un código fuente (plantilla de script) y un ID de elemento de destino (editor) en su lugar?
Esto no solo nos permitiría desinfectar las vulnerabilidades de XSS, sino que también eliminaría el procesamiento y la pintura de esos elementos iniciales del DOM en el navegador dos veces (una en carga y otra en el nuevo frame). Esto puede acelerar el tiempo de carga del editor como un beneficio positivo.
Gracias por informar de esto, @davidgabrichidze.
Los problemas de seguridad y dependencias son importantes. El equipo de GrapesJS trabaja activamente para mantener las dependencias actualizadas.
Para ti ahora mismo:
- Ejecutar 'npm audit fix' para ver los parches disponibles
- Busca una versión más reciente de GrapesJS que ya haya solucionado esto
- Si está disponible, prueba la última versión estable antes de actualizar
- Si la vulnerabilidad es crítica, 'npm audit fix ---force' es una opción, pero prueba a fondo
Entendiendo el riesgo:
- Revisar los detalles específicos de vulnerabilidades en los Avisos de Seguridad de GitHub
- No todos los problemas de alta gravedad afectan a tu ruta de código
- Algunas vulnerabilidades solo se activan bajo condiciones específicas
Manteniéndome al día:
- Atentos a nuevos lanzamientos de GrapesJS
- Suscribirse a las notificaciones de seguridad en el repositorio
- El equipo prioriza las actualizaciones de seguridad en su ciclo de lanzamiento
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #5334
La selección del tipo de componente personalizado no funciona en el lienzo
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome, Opera, Edge, etc Enlace de demo r...
Issue #4099
"Usando draggableComponents: false" todavía arrastra (¿clona?) algunos elementos si intento editar texto
Versión GrapesJS[X] Confirmo que se debe usar la última versión de GrapesJS¿Qué navegador usas? Chrome v96Enlace de demo reproducible https...
Issue #5618
El script antiguo de Componente no se elimina al importar. Lo que resulta en scripts duplicados
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Edge v120.0.2210.121 Enlace de demo repro...
Issue #6001
El administrador de capas se interrumpe al alternar entre páginas
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? MS Edge 126.0.2592.87 (Versión oficial) (...
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 →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
Big Updates: TinyMCE 8 and Placeholder 2.0 for GrapesJS
In May we shipped major updates to two of our most popular GrapesJS plugins — TinyMCE Inline Text Editor and Placeholder.
Tutorial
Find the Right GrapesJS Plugin in Seconds: Smarter Discovery Is Live
We're shipping a set of discovery upgrades. New label filters, a proper compatibility switch for GrapesJS vs Studio, one-click and a smarter sort bar.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.