[Security]: generative widget accepts postMessage updates from any window (HTML injection via forged bitfun-widget:update)
- Lenguaje dominante
- Rust
- Estrellas
- 2.3k
- Forks
- 231
- Merge medio
- 2 h 49 min
- PR fusionados (30 d)
- 589
Descripción
Summary: The generative widget iframe shell processes `message` events without verifying the sender. Any window that can postMessage into the host page can forge a `bitfun-widget:update` event, causing arbitrary attacker-controlled HTML to be written into the widget document via `setContent`.
Area: Web UI
Reproduction or evidence: `src/web-ui/src/tools/generative-widget/GenerativeWidgetFrame.tsx:862` registers `window.addEventListener('message', ...)` whose handler reads `event.data` and, for `type === 'bitfun-widget:update'`, calls `setContent(String(data.html || ''), Boolean(data.runScripts))` with no `event.source` check — while the reverse (iframe→parent) direction already validates `event.source` against the iframe content window (:921/:922).
Environment: BitFun version/commit 32f2427697ee16f253ee6119860a03255c0b3e47 (origin/main).
Guía de contribución
Línea de trabajo
Comienza en src/web-ui/src/tools/generative-widget/GenerativeWidgetFrame.tsx alrededor de las líneas 862 y 921-922. Compara el manejador de mensajes entrantes con la validación de origen existente de iframe-to-parent y, después, verifica que las actualizaciones de ventanas no relacionadas no puedan llegar a setContent, mientras que las actualizaciones válidas del widget sigan funcionando. Se considera terminado cuando los mensajes falsificados bitfun-widget:update ya no controlen el HTML del widget.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- typescript
- Área
- frontend, security
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Activo
- Claridad
- Bien especificado
- Aptitud para principiantes
- 78/100