Summary
CVE-2026-63188 is a high-severity path traversal vulnerability (CWE-22) in the @logto/tunnel npm package, used to serve local sign-in experience files during Logto development/tunneling workflows. The flaw allows an unauthenticated, network-based attacker to escape the configured static file directory and read arbitrary files accessible to the tunnel process. It carries a CVSS score of 8.7 (High) and affects all versions prior to 0.3.9.
Technical details
- Root cause: In
packages/tunnel/src/commands/tunnel/utils.ts, the static file handler builds the target filesystem path withpath.join(staticPath, request.url)and then opens it withfs.open(), without normalizing the URL or verifying that the resolved path stays within the configured static directory. - Trigger conditions: The tunnel must be running with the
--experience-pathoption enabled (used to serve a custom sign-in experience) and reachable over the network. - Attack vector: Network, no authentication or user interaction required. An attacker sends a crafted HTTP request containing
../sequences (e.g.,GET /../secret.txt) to the tunnel’s listening port. - Impact: Disclosure of arbitrary files readable by the tunnel process — potentially including configuration files, credentials, or other secrets stored on the host — resulting in high confidentiality impact with no direct effect on integrity or availability.
Affected software
@logto/tunnel(Logto Tunnel npm package) versions ≤ 0.3.8- Fixed in version 0.3.9
Severity
- CVSS Score: 8.7 (High)
- Vector:
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 - Network attack vector, low attack complexity, no privileges or user interaction required, high confidentiality impact.
Mitigation and recommended actions
- Immediate: Upgrade
@logto/tunnelto version 0.3.9 or later, which normalizes and validates request paths against the configured static directory before serving files. - If immediate patching is not possible:
- Avoid running the tunnel with
--experience-pathexposed to untrusted networks; restrict access to the tunnel’s listening port via firewall rules or network segmentation. - Do not store secrets or sensitive files in or near the directory tree used as the static/experience path.
- Monitor logs for requests containing
../sequences targeting the tunnel service.
- Avoid running the tunnel with

