NiceGUI vulnerable to XSS via Code Injection during client-side element function execution
Summary
Several NiceGUI APIs that execute methods on client-side elements (Element.run_method(), AgGrid.run_grid_method(), EChart.run_chart_method(), and others) use an eval() fallback in the JavaScript-side runMethod() function. When user-controlled input is passed as the method name, an attacker can inject arbitrary JavaScript that executes in the victim's browser.
Additionally, Element.run_method() and Element.get_computed_prop() used string interpolation instead of json.dumps() for the method/property name, allowing quote injection to break out of the intended string context.
Attack Vector
An attacker crafts a malicious URL with a payload as a query parameter. If the application passes this parameter as a method name to any of the affected APIs, the payload is sent to the client via WebSocket and executed via eval().
Example: /?method=alert(document.cookie) combined with application code like:
element.run_method(user_provided_method_name)
Impact
- Cookie/token theft
- DOM manipulation (phishing, fake login forms)
- Actions performed as the victim user
Affected Methods
Element.run_method()Element.get_computed_prop()AgGrid.run_grid_method()AgGrid.run_row_method()EChart.run_chart_method()JsonEditor.run_editor_method()Xterm.run_terminal_method()Leaflet.run_map_method()Leaflet.run_layer_method()LeafletLayer.run_method()
Fix
- Use
json.dumps()for proper escaping of method/property names inrun_method()andget_computed_prop() - Remove the
eval()fallback fromrunMethod()innicegui.js— method names that are not found on the element now raise an error instead of being evaluated as arbitrary JavaScript
Migration
Code that previously passed JavaScript functions as method names needs to use ui.run_javascript() instead:
# Before:
row = await grid.run_grid_method('g => g.getDisplayedRowAtIndex(0).data')
# After:
row = await ui.run_javascript(f'return getElement({grid.id}).api.getDisplayedRowAtIndex(0).data')
Software afectado
Haz clic en una tecnología para ver todas sus vulnerabilidades.
| Plataforma | Paquete | Versiones vulnerables | Corregida en |
|---|---|---|---|
| Python (PyPI) | nicegui | < 3.8.0 | 3.8.0 |
Referencias
- Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N- Debilidad (CWE)
CWE-79- Plataforma
- Python (PyPI)
- Paquete
nicegui- Publicada
- 24.02.2026
- Actualizado
- 11.10.2026 13:19
Fuentes y licencias
OSV / GitHub Advisory Database - PYSEC-2026-2232 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-78qv-3mpx-9cqq - CC BY 4.0
Historial de vulnerabilidades: nicegui
Todas las vulnerabilidades publicadas de este paquete (Python (PyPI)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.
- Entradas en total
- 17
- Primera → última
- 04.2024 05.2026
- Sin corrección
- 0
- Explotada en ataques
- 0
Distribución por gravedad
- Alta 6
- Media 11
Divulgaciones por año
- 2024: 1
- 2025: 5
- 2026: 11
-
NiceGUI vulnerable to XSS via Code Injection during client-side element function execution esta entrada
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.