
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-57496 is a REST path traversal vulnerability in the netlicensing-mcp Python package (pip) that allows an authenticated MCP client to bypass token redaction and recover plaintext API key values, including admin-level credentials. The flaw affects all versions up to and including 0.1.5, and was patched in version 0.1.8. It was published on June 18, 2026, by researcher r-brown (EQSTLab) via GitHub Security Advisory GHSA-hxpf-9xvq-wph8. The vulnerability carries a CVSS v3.1 score of 9.6 (Critical) (GitHub Advisory).
The root cause is CWE-22 (Path Traversal): the netlicensing_get_product MCP tool in tools/products.py interpolates the caller-controlled product_number argument directly into a REST URL path (f"/product/{product_number}") without any sanitization. Supplying ../token as the product number causes httpx to construct the URL {BASE_URL}/product/../token, which httpx then normalizes per WHATWG URL rules to {BASE_URL}/token, silently redirecting the HTTP GET to the NetLicensing token endpoint. The response is then processed by the generic _wrap_json handler (treating it as a "Product" entity) rather than the token-specific _wrap_json_token_read handler, meaning the redact_token_read() function in redaction.py:180-239 — the only code that masks APIKEY number and SHOP shopURL fields — is never invoked, and raw API key values are returned verbatim in the MCP tool output. A public proof-of-concept is included in the advisory (GitHub Advisory).
An authenticated MCP client holding any valid NetLicensing API key can exploit this vulnerability to retrieve plaintext APIKEY number and SHOP shopURL values that the dedicated token read tools (netlicensing_get_token, netlicensing_list_tokens) intentionally redact. If the recovered token carries ROLE_APIKEY_ADMIN privileges, the attacker escalates from a scoped MCP client to full account owner, gaining unrestricted read, write, and delete access over all resources in the target NetLicensing account. The vulnerability is exploitable in all deployment modes (stdio single-user and HTTP/shared) with no special configuration required (GitHub Advisory).
A working proof-of-concept is publicly available as part of the GitHub Security Advisory, including both a direct Python script and a Docker-based reproduction environment. Exploitation requires only a valid (non-admin) API key to authenticate the MCP session — no elevated privileges are needed to trigger the traversal. No evidence of in-the-wild exploitation, threat actor attribution, EPSS score, or CISA KEV catalog listing is currently available for this CVE (GitHub Advisory).
netlicensing-mcp version 0.1.5 or earlier (e.g., via pip show netlicensing-mcp).../token as the product_number argument for the netlicensing_get_product MCP tool call.netlicensing_get_product(product_number="../token") via the MCP interface. Internally, this interpolates to the path /product/../token.httpx client normalizes /product/../token to /token per WHATWG URL rules and sends the HTTP GET request to the NetLicensing /core/v2/rest/token endpoint instead of the product endpoint._wrap_json(..., "Product") instead of _wrap_json_token_read(), so redact_token_read() is never called and the raw APIKEY number value is included in the tool output.number field and the console_url field, which both contain the unmasked credential.ROLE_APIKEY_ADMIN, use it to gain full read/write/delete control over all resources in the NetLicensing account (GitHub Advisory).netlicensing_get_product with a product_number value of ../token or other path traversal sequences (e.g., %2e%2e, %2f)./core/v2/rest/token endpoint originating from a code path that should only call /core/v2/rest/product/{id}.netlicensing_get_product that contain fields tokenType, role, or ROLE_APIKEY_ADMIN — fields that belong to token entities, not product entities.number field of netlicensing_get_product responses, or API key values embedded in console_url fields pointing to https://ui.netlicensing.io/#/tokens/ (GitHub Advisory).Upgrade netlicensing-mcp to version 0.1.8 or later, which introduces a centralized path-segment validator (_validated_path()) in client.py that rejects path segments containing ., .., /, \, or control characters before constructing any upstream URL. The fix is applied to all HTTP helper functions (nl_get, nl_post, nl_put, nl_delete). No configuration-based workaround is available for versions 0.1.5 and earlier; immediate upgrade is the only remediation (GitHub Advisory).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."