Read the docs

Path traversal in Shiny for Python bookmark restore

Priority LOW 36CWE-22Published · Updated

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

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00358 29th percentileScored 2026-11-07
Fix Fixed py-shiny (posit-dev): 1.6.4shiny (PyPI): 1.6.4

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

VendorProductAffected versionsFixed inStatusSource
posit-devpy-shiny1.4.0 to before 1.6.41.6.4Patch availableCNA
—shiny (PyPI)1.4.0 to before 1.6.41.6.4Patch availableGHSA-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

Red Hat

Red Hat's page for this CVE →

Not affected: 1 product
  • Red Hat

Timeline

  1. 2026-10-10 Threatist record created from CVE-2026-108258
  2. 2026-10-10 Alias added: GHSA-47c3-hpmg-7j6p
  3. 2026-10-10 Fix available: PyPI/[email protected] · GHSA-47c3-hpmg-7j6p
  4. 2026-10-10 CVSS score added · GHSA-47c3-hpmg-7j6p
  5. 2026-10-10 Weakness changed · GHSA-47c3-hpmg-7j6p
  6. 2026-10-10 4 new references · GHSA-47c3-hpmg-7j6p
  7. 2026-10-11 Priority changed: MEDIUM → LOW
  8. 2026-10-13 CISA SSVC decision points changed
  9. 2026-11-06 Affected versions changed · Red Hat
  10. 2026-11-06 CVSS score added · Red Hat

References

Sources