Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app using vulnerable RedirectHandler template
-
DeliveryCraft path embedding attacker host
-
ExploitDeliver link to victim via phishing
-
ExecutionVictim browser follows redirect
-
ImpactLand on attacker-controlled site
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Redirect URL validation
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The application must use tornado.web.RedirectHandler with a URL template where a regex capture-group substitution can influence the scheme or host - specifically a substitution at the start of the path (e.g. {"url": "/{0}/destination"}), directly after a fixed host (e.g. {"url": "https://new.example.com{0}"}), or at the very start of the template (e.g. "{0}"); protocol-relative, absolute, backslash, percent-encoded, host-extension, and user-info variants all qualify. Applications are NOT affected if templates are static or if every substitution follows a fixed host and a slash (e.g. "/static/{0}" or "https://example.com/{0}"). Exploitation further requires victim user interaction (clicking the crafted link), so it is config-dependent and not exploitable against default or unaffected routing configurations, and yields only phishing-grade redirection, not code execution or data access. |
| Impact | This is a genuinely low-priority issue, and the signals agree. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:A) scores only 2.1, with impact limited to SI:L and no confidentiality, availability, or vulnerable-system integrity impact - consistent with an open redirect (CWE-601) used for phishing rather than direct compromise. EPSS is 0.46% (40th percentile), there is no CISA KEV listing, and the vuln.today decision label is 'monitor', so no signal points to urgency. The key limiting factor is not in the raw CVSS: exploitation requires the application to have deployed RedirectHandler with a specifically vulnerable template, so this is config-dependent and will not affect every Tornado deployment. No public exploit tool is provided in the input (the references are the vendor advisory, PR, and patch commits), though the advisory and patch tests document the exact triggering request paths. There are no contradictions between the signals; all consistently indicate a low-severity, defense-in-depth fix rather than an emergency. |
| Exploit ScenarioDerived | An attacker crafts a link to the victim application whose path contains an attacker host (e.g. a protocol-relative or absolute URL) that is substituted into a vulnerable RedirectHandler template, then delivers it to a victim in a phishing email or message. When the victim clicks the trusted-looking link on the application's own domain, their browser is transparently redirected to the attacker-controlled site, lending credibility to a credential-harvesting or malware page. No standalone exploit tool is published, but the advisory and patch test cases spell out concrete triggering paths such as /moved.evil.com/x and /any/https://evil.com/. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Open redirect in tornado.web.RedirectHandler (Tornado prior to 6.6) lets crafted request paths shift the scheme or host of the redirect target, so a link on the application's own domain can send victims to an attacker-controlled site for phishing. Only applications whose RedirectHandler URL template places a regex capture-group substitution where it can influence the scheme or host are affected - substitutions at the start of the path, immediately after a fixed host, or at the very start of the template - while static templates and substitutions after a fixed host plus a slash are unaffected, and the attacker needs the victim to click the crafted link (CVSS 4.0 base 2.1, assessed 3.1 vector AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N). Impact is limited to social-engineering-grade redirection with no code execution or data exposure; EPSS is 0.46% (40th percentile), there is no CISA KEV listing, no public exploit identified at time of analysis, and the vendor has released Tornado 6.6.
RemediationAI
Vendor-released patch: Tornado 6.6 (PyPI 6.6.0) - upgrade with pip install -U tornado and confirm the resolved version, see https://github.com/tornadoweb/tornado/releases/tag/v6.6.0 and the advisory https://github.com/tornadoweb/tornado/security/advisories/GHSA-pw9p-v7r6-gx4p (fix commits 940ea725bdd9bc68231d68a105eef17ea6e11233, cc75ab0eb3af459c714895a49f682ad354f50117, ccb6a2e5482f17997efd4a74b8200d5b4babc035, PR #3786). The patched handler now returns HTTP 400 instead of a redirect whenever substituted values would change the scheme or netloc, so any deployment that legitimately placed substitutions in the scheme or host portion will start failing those requests - inventory such handlers before rolling out and adjust the templates. Applications that cannot upgrade immediately can pass every substitution after a fixed prefix ending in "/" (for example "/static/{0}"), tighten capture-group regexes so they cannot match "/", "\", "@", "." or ":" in positions that affect the host, or replace RedirectHandler with a custom handler that validates the target before calling self.redirect(); each of these requires code changes and the strict-regex option also risks rejecting previously valid URLs, so upgrade remains the complete fix. Since the advisory explicitly excludes RequestHandler.redirect() called with user-controlled input, audit those call sites separately and validate destinations against an allow-list; there is no configuration flag or network control that removes the exposure while an affected handler remains registered, and the practical blast radius is a phishing redirect requiring victim interaction, so prioritization can follow normal maintenance rather than emergency patching.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
RedirectHandler in tornado/web.py builds its Location header by formatting a developer-supplied URL template with regex capture groups taken from the request path. Because the template itself defines the destination, any substitution that lands in the scheme or network-location (authority) portion of the URL hands that portion to the requester. The flaw is CWE-601 (URL Redirection to Untrusted Site / Open Redirect), and it is amplified by browser URL normalization under the WHATWG URL spec: browsers strip leading/trailing control characters and spaces, remove tabs and newlines anywhere in the URL, treat backslashes as forward slashes for http/https, and decode percent-encoding in path segments. That means a substitution yielding //evil.com, /\evil.com, /%5Cexample.com, /%09/example.com, an absolute https://evil.com, a javascript: URI, or host-extension and user-info forms such as .evil.com, @evil.com and :8080 all resolve to a destination the template author never intended. The 6.6 fix formats the template with a non-extendable placeholder ("/") to derive the expected scheme and netloc, compares it with the actual substituted URL via a _scheme_and_netloc helper, and raises HTTPError 400 "Redirect URL cannot change the scheme or netloc" when they differ; it also adds _normalize_url_like_browser/_is_protocol_relative helpers that harden the analogous check in StaticFileHandler against backslash, whitespace and control-character variants. The change is a server-side validation fix, not a parsing-memory or race-condition issue; the trigger is entirely a function of the template layout chosen by the application developer.
Know when Tornado gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
Remote, no auth, but victim must click the link (UI:R); scope changes as the redirect affects the browser/another origin, with only low integrity impact (open redirect) and no confidentiality or availability loss.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Tornado is a Python web framework and asynchronous networking library. Prior to 6.6, tornado.web.RedirectHandler URL templates can place regex-capture substitutions where crafted request paths change the redirect scheme or network location. Affected placements include substitutions at the start of a path, directly after a fixed host, or at the beginning of the template, including protocol-relative, absolute, backslash, encoded, host-extension, and user-info variants interpreted by browsers as attacker-controlled destinations. Static templates and substitutions after a fixed host followed by a slash are not affected. An attacker can use the resulting open redirect on the application's domain for phishing. This issue is fixed in version 6.6.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
An issue in Docmosis Tornado v.2.9.7 and before allows a remote attacker to execute arbitrary code via a crafted script
An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 8.8), this vulnerability i
py3-tornado in Alpine Linux received a security fix packaged as version 6.5.4-r0, addressing an unspecified vulnerabilit
Docmosis Tornado <= 2.9.4 is vulnerable to Directory Traversal leading to the disclosure of arbitrary content on the fil
An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 7.5), this vulnerability i
Denial of service in the Tornado web framework's CurlAsyncHTTPClient (all releases before 6.5.9) lets an unauthenticated
In versions of Tornado prior to 6.5.5, the only limit on the number of parts in `multipart/form-data` is the `max_body_s
Memory amplification denial of service in the Tornado Python web framework before 6.5.8 lets unauthenticated remote atta
Credential leakage in Tornado's CurlAsyncHTTPClient (all releases through 6.5.6) lets sensitive per-request state — clie
Unauthenticated local file disclosure in Tornado before 6.5.9 lets remote attackers read files outside a configured stat
Denial-of-service in Tornado prior to 6.5.8 allows unauthenticated remote attackers to stall the entire server by sendin
Tornado Python web framework on Alpine Linux received a security fix in package version 6.5.4-r0, addressing an uncharac
EUVD-2026-110319
GHSA-pw9p-v7r6-gx4p
NVD
CVE.org
EPSS
Exploit-DB