GitHub Advisoryadvisory · PyPI
GHSA-2m4f-cg75-76w2 NiceGUI Stored/Reflected XSS in ui.interactive_image via unsanitized SVG content
MEDIUM
Official page ↗
- Aliases
- CVE-2025-66470
- Ecosystem
- PyPI
- Packages
- nicegui
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Weaknesses
- CWE-79
- Reviewed
- 2025-12-08
Affected packages
• PyPI nicegui: < 3.4.0 → fixed in 3.4.0
Description
Summary
A Cross-Site Scripting (XSS) vulnerability exists in the `ui.interactive_image` component of NiceGUI (v3.3.1 and earlier). The component renders SVG content using Vue's `v-html` directive without any sanitization. This allows attackers to inject malicious HTML or JavaScript via the SVG `` tag.
Details
The vulnerability is located in `nicegui/elements/interactive_image.js`.
The component uses the following code to render content:
```javascript
```
Vue's v-html directive renders raw HTML strings into the DOM. If an application allows user-controlled input to be passed to the content property of an interactive image, an attacker can embed a tag containing malicious scripts, bypassing typical image restrictions.
PoC
```python
from nicegui import ui
@ui.page('/')
def main():
ui.label('NiceGUI SVG XSS PoC')
# Standard image loading
img = ui.interactive_image('https://picsum.photos/640/360')
# Payload: Embeds raw HTML execution inside SVG
# This executes immediately when the image component is rendered
img.content = (
''
''
''
''
''
)
ui.run()
```
Impact
• Type: Reflected / Stored XSS (depending on data source)
• Severity: Moderate
• Impact: Attackers can inject malicious scripts that execute whenever the image component is rendered or updated. This is particularly dangerous for dashboards or multi-user applications displaying user-generated content or annotations.
Related
Alias · CVE (1)
- CVE-2025-66470 NiceGUI is a Python-based UI framework. vulnerability
Weakness · CWE (1)
- CWE-79 Improper Neutralization of Input During Web Page Generation weakness