{"id":"CVE-2026-90982","summary":"@fastify/static vulnerable to route guard bypass via path case-folding","details":"@fastify/static is a Fastify plugin that serves static files from a configured root directory. In versions before 10.1.4, on a case-insensitive filesystem such as Windows or the default macOS volume, a route guard or allowedPath restriction can be bypassed by altering the letter case of a path segment. The route matcher is case-sensitive while the filesystem is not, so a request that changes the case of a protected segment does not match the guarded route and falls through to the static handler, yet the filesystem resolves it to the same protected file. As a result, an unauthenticated request can read a file that a route guard or allowedPath was configured to protect. The issue does not affect case-sensitive filesystems and is not a directory traversal, since nothing is served from outside the configured root. The issue is fixed in @fastify/static 10.1.4, which validates the requested path against its actual on-disk spelling and rejects case-aliased paths before authorization. As a workaround, serve static files from a case-sensitive filesystem, or ensure route guards and allowedPath rules account for every letter-case variant of the protected paths.","aliases":["GHSA-r799-r9gc-m956"],"modified":"2026-09-20T11:30:15.465069971Z","published":"2026-09-17T06:55:42.300Z","database_specific":{"cna_assigner":"openjs","cwe_ids":["CWE-178","CWE-284"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/90xxx/CVE-2026-90982.json"},"references":[{"type":"ADVISORY","url":"https://cna.openjsf.org/security-advisories.html"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/90xxx/CVE-2026-90982.json"},{"type":"ADVISORY","url":"https://github.com/fastify/fastify-static/security/advisories/GHSA-r799-r9gc-m956"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-90982"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/fastify/fastify-static","events":[{"introduced":"0"},{"fixed":"a39a464728f3766e73272c22d2dd04fcf13f13e6"}],"database_specific":{"extracted_events":[{"introduced":"0"},{"fixed":"10.1.4"}],"source":["AFFECTED_FIELD","DESCRIPTION"]}}],"versions":["v10.1.3","v10.1.2","v10.1.1","v10.1.0","v10.0.0","v9.3.0","v9.2.0","v9.1.3","v9.1.2","v9.1.1","v9.1.0","v9.0.0","v8.3.0","v8.2.0","v8.1.1","v8.1.0","v8.0.4","v8.0.3","v8.0.2","v8.0.1","v8.0.0","v7.0.4","v7.0.3","v7.0.2","v7.0.1","v7.0.0","v6.12.0","v6.11.2","v6.11.1","v6.11.0","v6.10.2","v6.10.1","v6.10.0","v6.9.0","v6.8.0","v6.7.0","v6.6.1","v6.6.0","v6.5.1","v6.5.0","v6.4.1","v6.4.0","v6.3.0","v6.2.0","v6.1.0","v6.0.0","v5.0.2","v5.0.1","v5.0.0","v4.6.1","v4.6.0","v4.5.0","v4.4.2","v4.4.1","v4.4.0","v4.3.0","v4.2.4","v4.2.3","v4.2.2","v4.2.1","v4.2.0","v4.1.0","v4.0.1","v4.0.0","v3.5.0","v3.4.0","v3.3.1","v3.3.0","v3.2.1","3.2.0","v3.1.0","v3.0.1","v3.0.0","v2.7.0","v2.6.0","v2.5.1","v2.5.0","v2.4.0","v2.3.4","v2.3.3","v2.3.2","v2.3.1","v2.3.0","v2.2.0","v2.1.0","v1.0.0","v2.0.0","v0.14.0","v0.13.0","v0.12.0","v0.11.0","v0.10.0","v0.9.0","v0.8.0","v0.6.0","v0.5.0","v0.4.1","v0.4.0","v0.3.0","v0.2.1","v0.2.0","v0.1.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-90982.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N"}]}