Skip to content

chore(deps): update dependency nicegui to v3.10.0 [security]#531

Open
renovate[bot] wants to merge 5 commits intomainfrom
renovate/pypi-nicegui-vulnerability
Open

chore(deps): update dependency nicegui to v3.10.0 [security]#531
renovate[bot] wants to merge 5 commits intomainfrom
renovate/pypi-nicegui-vulnerability

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented Apr 8, 2026

This PR contains the following updates:

Package Change Age Confidence
nicegui 3.9.03.10.0 age confidence

NiceGUI: Upload filename sanitization bypass via backslashes allows path traversal on Windows

CVE-2026-39844 / GHSA-w8wv-vfpc-hw2w

More information

Details

Summary

The upload filename sanitization introduced in GHSA-9ffm-fxg3-xrhh uses PurePosixPath(filename).name to strip path components. Since PurePosixPath only recognizes forward slashes (/) as path separators, an attacker can bypass this sanitization on Windows by using backslashes (\) in the upload filename.

Applications that construct file paths using file.name (a pattern demonstrated in NiceGUI's bundled examples) are vulnerable to arbitrary file write on Windows.

Details

The sanitization in nicegui/elements/upload_files.py uses:

filename = PurePosixPath(upload.filename or '').name

PurePosixPath treats backslashes as literal characters, not path separators:

>>> PurePosixPath('..\\..\\secret\\evil.txt').name
'..\\..\\secret\\evil.txt'  # Not stripped!

When this filename is used in a path operation on Windows (e.g., Path('uploads') / file.name), Windows Path interprets backslashes as directory separators, resolving the path outside the intended directory.

Impact

On Windows deployments of NiceGUI applications that use file.name in path construction:

  • Arbitrary file write outside the intended upload directory
  • Potential remote code execution through overwriting application files or placing executables in known locations
  • Data integrity loss through overwriting existing files

Linux and macOS are not affected, as they treat backslashes as literal filename characters.

Severity

  • CVSS Score: 5.9 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


Release Notes

zauberzeug/nicegui (nicegui)

v3.10.0

Compare Source

Security
New features and enhancements
Bugfixes
Documentation
Infrastructure

Special thanks to our top sponsors Lechler GmbH and TestMu AI

and all our other sponsors and contributors for supporting this project!

🙏 Want to support this project? Check out our GitHub Sponsors page to help us keep building amazing features!


Configuration

📅 Schedule: (in timezone Europe/Berlin)

  • Branch creation
    • ""
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added bot Automated pull requests or issues dependencies Pull requests that update a dependency file renovate Pull requests from Renovate skip:codecov Skip Codecov reporting and check skip:test:long_running Skip long-running tests (≥5min) labels Apr 8, 2026
@renovate renovate Bot enabled auto-merge (squash) April 17, 2026 12:54
@renovate renovate Bot force-pushed the renovate/pypi-nicegui-vulnerability branch from 4adc790 to cb4b52b Compare April 17, 2026 12:54
@renovate renovate Bot requested a review from a team as a code owner April 17, 2026 12:54
@renovate renovate Bot force-pushed the renovate/pypi-nicegui-vulnerability branch 10 times, most recently from c8c1a2f to e51412d Compare April 23, 2026 12:46
@renovate renovate Bot force-pushed the renovate/pypi-nicegui-vulnerability branch 10 times, most recently from 37a0f0d to 4fcc0f4 Compare April 24, 2026 18:40
@renovate renovate Bot force-pushed the renovate/pypi-nicegui-vulnerability branch 5 times, most recently from 67fff13 to 5b9161f Compare April 25, 2026 09:06
@renovate renovate Bot force-pushed the renovate/pypi-nicegui-vulnerability branch from 5b9161f to 003f3a3 Compare April 25, 2026 09:17
NiceGUI 3.10.0 made ValueChangeEventArguments generic and tightened
ui.input/ui.switch value types to include None. Parameterize handlers
with the new optional value types and coerce at usage sites.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@renovate
Copy link
Copy Markdown
Contributor Author

renovate Bot commented Apr 25, 2026

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

…ession

NiceGUI 3.10.0 unified Outbox initialization through background_tasks.
create_or_defer, which checks core.is_loop_running() instead of the
previous app.is_started shortcut. Hitting a @ui.page handler via
fastapi.testclient.TestClient now blocks the outer event loop, so
is_loop_running() returns False while app.is_started is True, and the
deferred path raises "Unable to register another startup handler".

Switch test_serve_notebook to the async user fixture's http_client
(httpx.AsyncClient with ASGITransport), which the nicegui testing
plugin already wires up with a live event loop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@helmut-hoffer-von-ankershoffen helmut-hoffer-von-ankershoffen removed the skip:test:long_running Skip long-running tests (≥5min) label Apr 25, 2026
@helmut-hoffer-von-ankershoffen helmut-hoffer-von-ankershoffen added the skip:test:long_running Skip long-running tests (≥5min) label Apr 25, 2026
The label was removed by Renovate during rebase, causing long_running
tests to run unintentionally. Empty commit re-triggers synchronize so
github.event.pull_request.labels reflects the current label set.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot Automated pull requests or issues dependencies Pull requests that update a dependency file renovate Pull requests from Renovate skip:codecov Skip Codecov reporting and check skip:test:long_running Skip long-running tests (≥5min)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant