<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cve.radiocsirt.org/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-06T19:50:11.604883+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>csirt@opendfir.org</email>
  </author>
  <link href="https://cve.radiocsirt.org" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/cve-2026-21872</id>
    <title>CVE-2026-21872 — NiceGUI apps are vulnerable to XSS which uses `ui.sub_pages` and render arbitrary user-provided links</title>
    <updated>2026-10-06T19:50:11.607144+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> zauberzeug nicegui</p>
<p>NiceGUI is a Python-based UI framework. From versions 2.22.0 to 3.4.1, an unsafe implementation in the click event listener used by ui.sub_pages, combined with attacker-controlled link rendering on the page, causes XSS when the user actively clicks on the link. This issue has been patched in version 3.5.0.</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/cve-2026-21872"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-m7j5-rq9j-6jj9</id>
    <title>GHSA-m7j5-rq9j-6jj9 — NiceGUI apps are vulnerable to XSS which uses `ui.sub_pages` and render arbitrary user-provided links</title>
    <updated>2026-10-06T19:50:11.607196+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: nicegui</p>
<p>### Summary</p>
<p>An unsafe implementation in the `click` event listener used by `ui.sub_pages`, combined with attacker-controlled link rendering on the page, causes an XSS when the user actively clicks on the link.</p>
<p>### Details</p>
<p>1. On `click`, eventually `sub_pages_navigate` event is emitted.
https://github.com/zauberzeug/nicegui/blob/59fa9424c470f1b12c5d368985fa36e21fda706b/nicegui/elements/sub_pages.js#L41-L63</p>
<p>2. SubPagesRouter (used by ui.sub_pages), lisnening on `sub_pages_navigate`, `_handle_navigate` runs.
https://github.com/zauberzeug/nicegui/blob/59fa9424c470f1b12c5d368985fa36e21fda706b/nicegui/sub_pages_router.py#L18-L22</p>
<p>3. `_handle_navigate` runs `run_javascript` with f-string substituting `self.current_path` which is simply surrounded by double-quotes. The string context can be broken out easily.</p>
<p>https://github.com/zauberzeug/nicegui/blob/59fa9424c470f1b12c5d368985fa36e21fda706b/nicegui/sub_pages_router.py#L73-L88</p>
<p>### PoC</p>
<p>The minimal PoC boils down to this:</p>
<p>```py
from nicegui import ui</p>
<p>ui.sub_pages({'/': lambda: ui.link('Go to XSS', '/"+alert(1)+"')})</p>
<p>ui.run()
```</p>
<p>However, it is more likely that the attack takes place with attacker-controlled input, for which this shows it:</p>
<p>```py
from nicegui import app, ui</p>
<p>ui.sub_pages({'/': lambda: ui.label('Hello, World!')})</p>
<p>ui.textarea('Markdown content').bind_value(app.storage.general, 'markdown_content')</p>
<p>ui.markdown().bind_content_from(app.storage.general, 'markdown_content')</p>
<p>ui.run()
```</p>
<p>Vulnerable input is `[X…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-m7j5-rq9j-6jj9"/>
  </entry>
</feed>
