Summary
CVE-2026-103263 is a path traversal vulnerability (CWE-59, Improper Link Resolution Before File Access) in the StaticFileHandler of the Tornado Python web framework. All versions prior to 6.5.9 are affected, and the issue allows an unauthenticated, remote attacker to read arbitrary files from the host filesystem, including configuration files, private keys, and other application secrets. The vulnerability has been assigned a CVSS v4.0 base score of 8.2 (High).
Technical details
- Root cause:
StaticFileHandlervalidates requested paths usingos.path.abspath(), which normalizes a path string but does not resolve symbolic links. File operations performed afterward do follow symlinks, so the string-based check and the actual file access can diverge. - Trigger condition: The static directory served by the application must contain a symbolic link that points to a location outside that directory. This can occur through manual configuration, user-uploaded content, or build tooling (e.g., npm/webpack) that creates symlinks inside a static assets folder.
- Attack vector: Network — an attacker sends an HTTP request for the symlinked path served via
StaticFileHandler; no authentication or user interaction is required. - Impact: Disclosure of arbitrary files readable by the process user, including configuration files, private keys, and application secrets. The vulnerability affects confidentiality only; integrity and availability are not impacted.
Affected software
- Tornado (PyPI package
tornado), vendortornadoweb: all versions prior to 6.5.9 - Fixed in version 6.5.9 and later
Severity
- CVSS v4.0: 8.2 (High) —
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - CVSS v3.1: 5.9 (Medium) —
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
Mitigation and recommended actions
- Immediate: Upgrade Tornado to version 6.5.9 or later, which replaces
os.path.abspath()withos.path.realpath()in the static file path validation logic so that resolved (post-symlink) paths are checked against the allowed static directory. - If immediate patching is not possible:
- Audit static file directories served by
StaticFileHandlerand remove any symbolic links that point outside the intended static root. - Restrict filesystem permissions for the process user so that sensitive files (private keys, credentials, configuration) are not readable even if traversed.
- Avoid build or deployment processes that place symlinks inside directories exposed via
StaticFileHandler.
- Audit static file directories served by

