Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
AV:N because attacker reaches the app over the network; AC:H because exploitation requires user input to flow into library calls; S:C because the impacted component (Vault server) is a separate system from the vulnerable library.
Primary rating from Vendor (https://github.com/kyndryl-open-source/hashi-vault-js).
CVSS VectorVendor: https://github.com/kyndryl-open-source/hashi-vault-js
Lifecycle Timeline
3DescriptionCVE.org
Summary
The hashi-vault-js library is vulnerable to path traversal and query string injection due to the lack of proper encoding of identifiers in path segments and query strings. This allows attackers to manipulate the request URL and potentially access unintended downstream endpoints or inject malicious parameters if untrusted input is passed to the library.
Details
There are zero calls to encodeURIComponent anywhere in Vault.js. Every identifier (e.g., name, username, group, role, version) provided to the library is concatenated straight into the HTTP URL without URI encoding.
Two vectors can be dynamically confirmed:
- Path Traversal: Passing
../../sys/sealas a secret name causes the HTTP client to normalize the path and send the request to/v1/sys/sealinstead of the intended Key-Value path. - Query Injection: Passing
1&list=trueas a version value injects an extra query parameter into the request payload.
Impact
In applications where Vault identifiers originate from untrusted user input, this allows an unauthenticated attacker to redirect requests to unintended Vault endpoints (including administrative paths under sys/) or otherwise alter the executed query, executing operations within the permissions of the Vault token used by the application.
Patches
This vulnerability has been addressed by wrapping path segments with encodeURIComponent() and safely formatting query strings instead of manual string concatenation. Users should upgrade to a version that includes this fix.
Workarounds
If you cannot immediately update the library, you can mitigate this issue by rigidly validating and sanitizing all user-supplied input before passing it into hashi-vault-js methods. Alternatively, manually encode inputs using encodeURIComponent() before supply them to the library's functions.
Acknowledgements
hashi-vault-js would like to thank Sebastián Alba Vives for reporting this vulnerability.
AnalysisAI
Path traversal and query parameter injection in hashi-vault-js (npm, versions ≤ 0.5.1) allow an attacker who can influence identifiers passed to the library to redirect Vault API requests to arbitrary endpoints - including administrative paths such as /v1/sys/seal - or inject unauthorized query parameters, all executed under the permissions of the application's configured Vault token. The vulnerability arises because Vault.js contains zero calls to encodeURIComponent(), concatenating every caller-supplied identifier directly into HTTP URL strings. Two attack vectors are dynamically confirmed in the GHSA advisory: path traversal via ../../sys/seal as a secret name, and query injection via 1&list=true as a version value. No public standalone exploit tool has been identified and this CVE is not listed in the CISA KEV catalog.
Technical ContextAI
The affected package is hashi-vault-js (CPE: pkg:npm/hashi-vault-js), a Node.js client library that wraps the HashiCorp Vault HTTP API. The root cause is CWE-23 (Relative Path Traversal), compounded by query-string injection through unsafe string concatenation. Vault.js builds every API URL by directly interpolating caller-supplied parameters - secret names, usernames, group names, role names, version numbers - into URL path segments and query strings without invoking encodeURIComponent() or any equivalent sanitization. HTTP clients normalize dot-segment sequences in paths (../../), so a traversal payload resolves outside the intended KV mount point and reaches unintended Vault API namespaces including the privileged sys/ tree. The fix in version 0.5.2, confirmed by PR #66 and commit ea2f760, wraps all path-segment identifiers with encodeURIComponent() and replaces manual query-string concatenation with safe parameter formatting.
RemediationAI
Upgrade hashi-vault-js to version 0.5.2, which resolves both attack vectors by applying encodeURIComponent() to all path-segment identifiers and replacing manual query-string concatenation with safe parameter formatting, as confirmed by PR #66 (https://github.com/kyndryl-open-source/hashi-vault-js/pull/66) and commit ea2f76052d366a08f35f62ef4c12b6a334c91ec2. If an immediate upgrade is not feasible, apply strict allowlist validation before passing any identifier to library methods: reject inputs containing /, ., &, =, ?, or % characters - note that an incomplete allowlist may still leave injection vectors open. Alternatively, manually wrap all caller-supplied identifiers with encodeURIComponent() before passing them to library functions. As a defense-in-depth measure, restrict the application's Vault token to the minimum required paths and capabilities so that even if traversal succeeds, the token cannot reach sensitive sys/ endpoints such as sys/seal or sys/unseal.
Credential-harvesting malware compromised 84 versions of 42 TanStack npm packages on 2026-05-11 via chained GitHub Actio
Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks agai
HashiCorp Terraform’s Vault Provider (terraform-provider-vault) did not correctly configure GCE-type bound labels for Va
An XML external entity (XXE) vulnerability in the Password Vault Web Access (PVWA) of CyberArk Enterprise Password Vault
PhotoRange Photo Vault 1.2 appends the password to the URI for authorization, which makes it easier for remote attackers
The REST API in CyberArk Password Vault Web Access before 9.9.5 and 10.x before 10.1 allows remote attackers to execute
Server-side request forgery in bank-vaults vault-secrets-webhook (<= 1.22.2) lets a low-privileged tenant with ConfigMap
Account takeover in self-hosted Bitwarden Server before 2026.6.0 lets a low-privileged organization member steal any oth
vault-cli is a configurable command-line interface tool (and python library) to interact with Hashicorp Vault. Rated cri
The SRP-6a implementation in Kee Vault KeePassRPC before 1.12.0 is missing validation for a client-provided parameter, w
The SRP-6a implementation in Kee Vault KeePassRPC before 1.12.0 generates insufficiently random numbers, which allows re
Server-side request forgery in the Ruby css_parser gem (< 3.0.0) lets a remote unauthenticated attacker force the parsin
Same weakness CWE-23 – Relative Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51575
GHSA-g956-2f74-rmv7