Storybook: Falta de validación de origen en Storybook preview permite inyección de código desde sitios web maliciosos
Resumen
Un sitio web malicioso podría provocar modificaciones no autorizadas de archivos en el proyecto de un desarrollador mientras un servidor de desarrollo de Storybook afectado está en ejecución. Bajo condiciones adicionales, un archivo modificado podría ser ejecutado por un entorno de ejecución local con los privilegios del desarrollador. No se tiene conocimiento de explotación activa en el entorno real.
¿Quién está afectado?
Está afectado quien ejecute un servidor de desarrollo de Storybook en las versiones vulnerables.
No está afectado si:
- Ejecuta un servidor de desarrollo que nunca abre en un navegador web (por ejemplo, automatizaciones headless o clientes MCP)
- Ejecuta o visita una versión compilada (built) de Storybook
Las versiones recientes de Chrome y Firefox pueden solicitar permisos antes de permitir que un sitio web se conecte a un servicio localhost. Esto reduce el riesgo, pero no lo elimina. No conceda este permiso a sitios web en los que no confíe.
Revisión de posibles cambios incompatibles (breaking changes)
Debido a la naturaleza excepcional de las vulnerabilidades reportadas, el equipo de Storybook decidió cambiar el comportamiento predeterminado de Storybook, incluyendo las versiones 8 y 9, en varias funciones de red que no son esenciales para el flujo de trabajo de la mayoría de los usuarios. Para los equipos que dependen de estas funciones, se han incorporado feature flags que permiten deshabilitar actualizaciones de seguridad específicas para dar soporte a sus flujos de trabajo actuales.
Revise con atención las flags introducidas y las consecuencias de su uso:
- Incrustación de iframe por red deshabilitada de forma predeterminada: Storybook ya no permite que el manager o el preview se incrusten como iframe en un sitio web con un nombre de host diferente. Las versiones compiladas de Storybook no se ven afectadas y pueden incrustarse libremente. Si requiere incrustar un servidor de desarrollo de Storybook mediante una aplicación web independiente, ejecute dicha aplicación en
localhost. También puede utilizar la feature flagsecurity.insecureRemoteIframeEmbedpara volver a habilitar la incrustación mediante iframe desde cualquier origen. - El iframe de preview rechaza mensajes enviados por hosts desconocidos: Tanto el preview como el manager de Storybook restringen ahora el origen de los iframes y ventanas principales hacia los que pueden enviar mensajes y desde los que pueden recibirlos mediante la API
postMessage. Por defecto, Storybook en modo de desarrollo solo acepta comunicación con su propio origen y otros servicioslocalhost. Los Storybooks compilados continúan aceptando comunicación de orígenes desconocidos. Si algún addon o integración depende depostMessagepara actualizar los argumentos de una historia en vivo, contacte al equipo de Storybook para consultar alternativas más seguras. La composición de Storybook también depende depostMessage, por lo que un Storybook compuesto en un origen distinto ahora fallará al cargarse a menos que haya sido compilado. La feature flagsecurity.insecureIframeMessagingdesactiva esta protección, pero se recomienda compilar los Storybooks compuestos en su lugar. - Cambio en la firma del evento
highlight: El propio addon de accesibilidad de Storybook utiliza el eventohighlightpara inyectar elementos destacados en el preview sobre los que el usuario puede hacer clic, abriendo un menú con un enlace a una página de documentación. La API de ese evento era excesivamente permisiva y podía usarse para desencadenar eventos arbitrarios, incluidos eventos procesados por el servidor de desarrollo del usuario. Se reestructuró la API para evitar abusos. Además del addon de accesibilidad, el addon Visual Tests de Chromatic usa esta API para enlazar a la documentación desde elementos ignorados destacados. Actualice el addon Visual Tests a la versión 5.5.1 o posterior para mantener operativo dicho enlace. Al no tener conocimiento de otros addons que usen esta API, no se añadió una flag para restaurar el comportamiento anterior.
Cronología de divulgación
El 30th de septiembre, el equipo de Storybook recibió un informe de divulgación responsable que demostraba cómo un sitio web malicioso podía incrustar el iframe de preview de un servidor de desarrollo de Storybook y enviar eventos al servidor de desarrollo en la máquina del desarrollador.
Combinaron esta información con los hallazgos de una auditoría de seguridad en curso para determinar el peor escenario de ataque de la vulnerabilidad divulgada junto con las descubiertas de forma independiente. Posteriormente, trabajaron en mitigar todas las capas necesarias para que dicho escenario pudiera materializarse. No se han recibido pruebas de explotación en proyectos reales de Storybook. El ataque descrito depende de explotar con éxito una secuencia de múltiples vulnerabilidades, algunas de las cuales no habían sido reveladas previamente al equipo de Storybook.
Peor escenario de ataque
Un sitio web controlado por un atacante puede interactuar con el preview de un servidor de desarrollo de Storybook en ejecución. Con interacción del usuario, podría hacer que el servidor de desarrollo realice cambios no autorizados en los archivos de historias. Si el archivo malicioso resultante es ejecutado posteriormente por un entorno de ejecución local, el ataque podría permitir la ejecución arbitraria de código con los permisos del desarrollador.
Qué hacer
Actualice Storybook a una versión corregida antes de volver a ejecutar storybook dev:
- 11.0.0-alpha.6
- 10.6.2
- 9.1.21
- 8.6.19
Si no puede actualizar inmediatamente, evite ejecutar un servidor de desarrollo de Storybook afectado hasta que pueda aplicar la corrección.
Asimismo, actualice el addon Visual Tests de Chromatic a la versión 5.5.1 o superior para preservar la funcionalidad de enlaces de documentación.
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Paquete de npm | storybook | >= 8.0.0, < 8.6.19, >= 9.0.0, < 9.1.21, >= 10.0.0, < 10.6.2, >= 11.0.0-alpha.0, < 11.0.0-alpha.6 | 8.6.19, 9.1.21, 10.6.2, 11.0.0-alpha.6 |
| Paquete de npm | @storybook/addon-mcp | >= 10.6.0, < 10.6.2, >= 11.0.0-alpha.0, < 11.0.0-alpha.6 | 10.6.2, 11.0.0-alpha.6 |
| Paquete de npm | @storybook/addon-vitest | >= 9.0.0, < 9.1.21, >= 10.0.0, < 10.6.2, >= 11.0.0-alpha.0, < 11.0.0-alpha.6 | 9.1.21, 10.6.2, 11.0.0-alpha.6 |
| Paquete de npm | @storybook/core | >= 8.0.0, < 8.6.19 | 8.6.19 |
| Paquete de npm | @storybook/core-server | >= 8.0.0, < 8.6.19 | 8.6.19 |
| Paquete de npm | @storybook/experimental-addon-test | >= 8.0.0, < 8.6.19 | 8.6.19 |
Referencias
- https://github.com/storybookjs/storybook/security/advisories/GHSA-f2ph-cmg5-wxc8
- https://github.com/storybookjs/storybook/pull/36726
- https://github.com/storybookjs/storybook/commit/243c06bf8f1e2f09446c44868ea100261e1374da
- https://github.com/storybookjs/storybook/commit/3be03ec6f11f4616471cebc3fc65c13e1bf8c178
- https://github.com/storybookjs/storybook/commit/a9ef9345d73224c73e0b81dc2701ec5b465ea9bb
- https://github.com/storybookjs/storybook/commit/d9b09e332510a88689c71ecc081bbbc2d072476e
- https://github.com/storybookjs/storybook/commit/df3fed468c9b4830605f00068c4bc6b7e1e215ed
- https://github.com/storybookjs/storybook
- https://github.com/storybookjs/storybook/releases/tag/v10.6.2
- https://github.com/storybookjs/storybook/releases/tag/v11.0.0-alpha.6
- https://github.com/storybookjs/storybook/releases/tag/v8.6.19
- https://github.com/storybookjs/storybook/releases/tag/v9.1.21
- Vector CVSS
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H- Debilidad (CWE)
CWE-1021, CWE-22, CWE-346, CWE-441, CWE-749, CWE-862, CWE-94, CWE-96- Plataforma
- npm
- Paquete
storybook, @storybook/addon-mcp, @storybook/addon-vitest- Publicada
- 21.10.2026
- Actualizado
- 21.10.2026 20:26
Fuentes y licencias · Editado o traducido por DockRay; se mantienen los derechos y las licencias de las fuentes.
OSV / GitHub Advisory Database - GHSA-f2ph-cmg5-wxc8 - CC BY 4.0
Historial de vulnerabilidades: @storybook/addon-mcp
Todas las vulnerabilidades publicadas de este paquete (Paquete de npm), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
Esta es la única vulnerabilidad conocida de este paquete.
Identifica las vulnerabilidades de tu aplicación
Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.