CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

CVE-2026-57496

criticalCVSS 9.6covered by 1 sourcefirst seen 2026-06-18
REST Path Traversal Bypasses Token Redaction in netlicensing-mcp Summary The netlicensing_get_product MCP tool in netlicensing-mcp interpolates a caller-controlled product_number argument directly into a REST URL path without any validation. Passing ../token as the product number causes httpx to normalize /product/../token into /token, silently redirecting the request to the NetLicensing token endpoint instead of the intended product endpoint. The response is then serialized through the generic _wrap_json wrapper rather than the token-specific _wrap_json_token_read wrapper, bypassing all APIKEY number and SHOP shopURL redaction. An authenticated MCP client can recover plaintext API key values that the token read tools intentionally mask, including admin-level APIKEY credentials. Details The vulnerability is a path traversal (CWE-22) that exploits the interaction between unsanitized string interpolation and httpx's WHATWG URL normalization. **Source — src/netlicensing_mcp/tools/products.py:22** async def get_product(product_number: str) -> dict: """Get a single product by its number.""" return strip_output_fields(await nl_get(f"/product/{product_number}")) product_number is inserted directly into the REST path with no validation. A value of ../token produces the path /product/../token. **Sink — src/netlicensing_mcp/client.py:143** async def nl_get(path: str, params: dict[str, str] | None = None) -> dict[str, Any]: client = _get_client() url = f"{BASE_URL}{path}" ... r = await client.get(url, headers=_headers(), params=params or {}) httpx constructs the full URL as {BASE_URL}/product/../token and, per WHATWG URL normalization rules applied to absolute URLs, resolves it to {BASE_URL}/token. The HTTP request is therefore sent to the NetLicensing /core/v2/rest/token endpoint. **Redaction bypass — src/netlicensing_mcp/server.py:336 and src/netlicensing_mcp/redaction.py:180-239** The tool handler wraps the response via _wrap_json(entity, "Product"), which calls

⚡ Watch CVE-2026-57496

Get an email if CVE-2026-57496 is added to CISA KEV, gains public exploit code, or a new advisory cites it — max one per day, one-click unsubscribe.

Advisory coverage (1)

External references

NVD record for CVE-2026-57496

CVE.org record

Embed the live status

CVE-2026-57496 live status badge — this badge updates automatically when the KEV or exploit status changes. How to embed it →

[![CVE-2026-57496 status](https://www.csirts.com/badge/CVE-2026-57496)](https://www.csirts.com/cve/CVE-2026-57496)