{"id":"CVE-2026-27199","aliases":["GHSA-29vq-49wr-vm6x","PYSEC-2026-2320"],"title":" Werkzeug safe_join() allows Windows special device names","summary":" Werkzeug safe_join() allows Windows special device names","severity":"medium","vendor":"werkzeug","product":"werkzeug","ecosystem":"pip","affected":["werkzeug < 3.1.6"],"patched":["werkzeug 3.1.6"],"published":"2026-02-19","updated":"2026-09-10","sourceUpdated":"2026-09-10T03:50:33.709103081Z","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-29vq-49wr-vm6x","references":[{"url":"https://github.com/pallets/werkzeug/security/advisories/GHSA-29vq-49wr-vm6x"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-27199"},{"url":"https://github.com/pallets/werkzeug/commit/f407712fdc60a09c2b3f4fe7db557703e5d9338d"},{"url":"https://github.com/pallets/werkzeug"},{"url":"https://github.com/pallets/werkzeug/releases/tag/3.1.6"}],"tags":["osv","pip","exploit-available"],"epss":0.00578,"epssPercentile":0.46299,"exploits":{"github":1,"githubRepos":["https://github.com/alimezar/CVE-2026-27199-werkzeug-safe-join-bypass-PoC"],"checkedAt":"2026-09-23T07:13:56.429Z"},"exploitAvailable":true,"ingestedAt":"2026-07-13T18:57:51.251Z","slug":"CVE-2026-27199","body":"## Overview\n\nWerkzeug's `safe_join` function allows Windows device names as filenames if when preceded by other path segments.\n\nThis was previously reported as https://github.com/pallets/werkzeug/security/advisories/GHSA-hgf8-39gv-g3f2, but the added filtering failed to account for the fact that `safe_join` accepts paths with multiple segments, such as `example/NUL`.\n\n`send_from_directory` uses `safe_join` to safely serve files at user-specified paths under a directory. If the application is running on Windows, and the requested path ends with a special device name, the file will be opened successfully, but reading will hang indefinitely.\n\n## Affected packages\n\n- `werkzeug < 3.1.6`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `werkzeug 3.1.6`","depth":"twilight","depthScore":40,"depthScoreParts":{"impact":27.5,"likelihood":0.1,"exploitation":12,"ransomware":0},"changes":[{"seq":5052,"id":"CVE-2026-27199","ts":1788887230584,"field":"exploit_available","old":"false","new":"true"},{"seq":3935,"id":"CVE-2026-27199","ts":1788886361338,"field":"exploit_available","old":"true","new":"false"},{"seq":2757,"id":"CVE-2026-27199","ts":1788883028071,"field":"exploit_available","old":"false","new":"true"},{"seq":1786,"id":"CVE-2026-27199","ts":1788882431077,"field":"exploit_available","old":"true","new":"false"},{"seq":892,"id":"CVE-2026-27199","ts":1788881864385,"field":"exploit_available","old":"false","new":"true"}]}