Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Fastify app with list option enabled
-
DeliveryCraft path traversal URL (e.g., /static/../../etc/)
-
ExploitSend unauthenticated HTTP GET request
-
ExecutiondirList.path() resolves outside static root via path.join()
-
PersistServer returns directory listing of arbitrary path
-
ImpactEnumerate sensitive filenames and directory structure
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the Fastify application has explicitly configured the list option in the @fastify/static plugin - directory listing is disabled by default and must be intentionally enabled by the application developer. Without this option, the dirList.path() function is never invoked and the vulnerability is not reachable. Once that condition is met, no authentication is required (CVSS PR:N) and no user interaction is needed, making the attack fully automated. Key limiting factors: only directory and file names are disclosed - file contents cannot be read via this vulnerability; the Node.js process must have OS-level read permission on the target directory for a listing to be returned; and the affected version range is bounded to 8.0.0-9.1.0, so deployments on older or already-patched versions are not affected. |
| Impact | The CVSS 3.1 score of 5.3 Medium reflects a network-reachable, unauthenticated, zero-complexity attack (AV:N/AC:L/PR:N/UI:N) with limited confidentiality impact (C:L) and no integrity or availability impact. This scoring is consistent with the actual impact - directory and filename enumeration only. EPSS at 0.02% (4th percentile) is very low, and the SSVC framework corroborates this with Exploitation: none and Technical Impact: partial, indicating no observed exploitation and bounded blast radius. The SSVC Automatable: yes flag is the main escalation risk - once a POC exists, mass scanning is trivial. The non-default prerequisite (list option must be explicitly enabled) meaningfully shrinks the exposed population; deployments using default @fastify/static configurations are not affected. Real-world priority is moderate for organisations that have enabled directory listing and cannot immediately upgrade; low for all others. No data conflicts exist between sources - all signals align on a contained, patchable, currently unexploited issue. |
| Exploit ScenarioDerived | An attacker identifies a Fastify application that has enabled directory listing via the list option in @fastify/static. They send an unauthenticated HTTP GET request with a path traversal sequence such as GET /assets/../../etc/ HTTP/1.1, causing dirList.path() to resolve to /etc/ on the server. The response returns a directory listing containing filenames and subdirectory names from /etc/, revealing configuration file names, user directories, or other sensitive path structure without requiring any credentials or prior knowledge of the server layout. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 24, 2026
Path traversal in @fastify/static 8.0.0-9.1.0 allows unauthenticated remote attackers to obtain directory listings for arbitrary filesystem paths accessible to the Node.js process when the directory listing feature is explicitly enabled. The flaw resides in dirList.path(), which uses Node.js path.join() without verifying the resolved path remains within the configured static root, making URL sequences like /public/../etc/ sufficient to escape the intended boundary. No active exploitation has been identified (SSVC Exploitation: none; EPSS: 0.02%), though the attack is automatable against susceptible configurations; disclosure is limited to directory and file names only - file contents are not readable via this path.
RemediationAI
Upgrade @fastify/static to version 9.1.1 or later, which introduces a containment check in dirList.path() to prevent resolution outside the configured static root. This is a drop-in upgrade with no reported breaking changes. The authoritative advisory is at https://github.com/fastify/fastify-static/security/advisories/GHSA-pr96-94w5-mx2h. For deployments that cannot immediately upgrade, the effective workaround is to remove the list option from the @fastify/static plugin configuration, which disables directory listing entirely and prevents the vulnerable code path from being reached; the trade-off is loss of browser-accessible directory browsing, with no impact on static file serving itself.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected package is @fastify/static, an npm plugin for the Fastify web framework responsible for serving static assets and, optionally, directory listings (CPE: cpe:2.3:a:@fastify/static:@fastify/static). The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory): the dirList.path() function constructs filesystem paths using Node.js's path.join(), which normalises traversal sequences such as '../' into a valid absolute path, but the function then uses the result without checking that it falls within the configured static root. This is a classic path traversal omission - the API resolves the path correctly but the caller never validates containment. The vulnerability is conditioned on the administrator having opted in to directory listing via the list plugin option, which is not active in default configurations.
Know when Node.js gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Network-reachable with no auth once list is enabled; impact is directory enumeration only, so C:L, I:N, A:N.
Primary rating from NVD.
CVSS VectorNVD
Lifecycle Timeline
3DescriptionCVE.org
@fastify/static versions 8.0.0 through 9.1.0 allow path traversal when directory listing is enabled via the list option. The dirList.path() function resolves directories outside the configured static root using path.join() without a containment check. A remote unauthenticated attacker can obtain directory listings for arbitrary directories accessible to the Node.js process, disclosing directory and file names. File contents are not disclosed. Upgrade to @fastify/static 9.1.1 to fix this issue. As a workaround, disable directory listing by removing the list option from the plugin configuration.
Blast Radius
ecosystem impact- 2 npm packages depend on @fastify/static (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 8.0.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-23243
GHSA-pr96-94w5-mx2h
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB