Path traversal in Shiny for Python bookmark restore
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- None
- Impact type
- Information disclosure
- Confidentiality · integrity · availability
- Low · None · None
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub. Impact type from CWE-22 and the CVSS impact.
Summary
Shiny for Python from 1.4.0 before 1.6.4 does not validate the client-supplied state_id in bookmark restore, so it is joined into the server-side bookmark directory as a path. An unauthenticated remote attacker can use parent-directory segments or an absolute path (CWE-22) to make the server open input.json and values.json outside the bookmark store, even when bookmark_store is set to disable. In applications that set bookmark_store to server and use ui.input_file(), the restore handler can also copy and expose an attacker-selected file from an attacker-selected directory.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the CNA
Shiny for Python is a framework for building interactive web applications in Python. From 1.4.0 until 1.6.4, bookmark restore accepts a client-supplied state_id and joins it into the server-side shiny_bookmarks directory without validating that it is a single safe path segment. An unauthenticated request can use parent-directory segments or an absolute path to make the server open input.json and values.json outside the bookmark store, even when bookmark_store is set to disable. In applications configured with bookmark_store set to server and using ui.input_file(), the restore handler can additionally copy and expose an attacker-selected file from an attacker-selected directory. This issue is fixed in version 1.6.4.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- Yes
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| posit-dev | py-shiny | 1.4.0 to before 1.6.4 | 1.6.4 | Patch available | CNA |
| — | shiny (PyPI) | 1.4.0 to before 1.6.4 | 1.6.4 | Patch available | GHSA-47c3-hpmg-7j6p |
- py-shiny Vendorposit-dev Affected 1.4.0 to before 1.6.4 Fixed in 1.6.4 Patch available CNA
- shiny (PyPI) Vendor— Affected 1.4.0 to before 1.6.4 Fixed in 1.6.4 Patch available GHSA-47c3-hpmg-7j6p
Remediation
Upgrade the py-shiny package and the shiny package on PyPI to version 1.6.4, which fixes the issue.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
- Fix · CNA py-shiny (posit-dev) Fixed in 1.6.4
- Fix · GHSA-47c3-hpmg-7j6p shiny (PyPI) Fixed in 1.6.4 Advisory →
Vendor assessments
Timeline
- 2026-10-10 Threatist record created from CVE-2026-108258
- 2026-10-10 Alias added: GHSA-47c3-hpmg-7j6p
- 2026-10-10 Fix available: PyPI/[email protected] · GHSA-47c3-hpmg-7j6p
- 2026-10-10 CVSS score added · GHSA-47c3-hpmg-7j6p
- 2026-10-10 Weakness changed · GHSA-47c3-hpmg-7j6p
- 2026-10-10 4 new references · GHSA-47c3-hpmg-7j6p
- 2026-10-11 Priority changed: MEDIUM → LOW
- 2026-10-13 CISA SSVC decision points changed
- 2026-11-06 Affected versions changed · Red Hat
- 2026-11-06 CVSS score added · Red Hat
References
Sources
- CVE-2026-108258 · CVE Program
- CVE-2026-108258 · NVD
- FIRST EPSS
- GHSA-47c3-hpmg-7j6p · GitHub Advisory Database · CC BY 4.0
- CVE-2026-108258 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences