Skip to main content

Tornado CVE-2026-116578

| EUVDEUVD-2026-110319 LOW
URL Redirection to Untrusted Site (Open Redirect) (CWE-601)
2026-10-26 GitHub_M GHSA-pw9p-v7r6-gx4p
2.1
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify app using vulnerable RedirectHandler template
  2. Delivery
    Craft path embedding attacker host
  3. Exploit
    Deliver link to victim via phishing
  4. Execution
    Victim browser follows redirect
  5. Impact
    Land 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/.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Tornado < 6.6

Affected Packages

pypi tornado fix: 6.6

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

Vendor (GitHub_M) PRIMARY 2.1 LOW
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
vuln.today AI 4.7 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Active
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
Low
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Oct 26, 2026 - 21:03 EUVD

DescriptionCVE.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

EPSS Score
0.5%
Top 60% exploitable
Prevalence
Medium
widely used Python async web framework, but a subset of all web deployments
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC Yes
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0
CVE-2024-42733 CRITICAL POC
9.8 Mar 07

An issue in Docmosis Tornado v.2.9.7 and before allows a remote attacker to execute arbitrary code via a crafted script

CVE-2023-25266 HIGH POC
8.8 Feb 28

An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 8.8), this vulnerability i

CVE-2025-67726 HIGH POC
7.5

py3-tornado in Alpine Linux received a security fix packaged as version 6.5.4-r0, addressing an unspecified vulnerabilit

CVE-2023-25265 HIGH POC
7.5 Feb 28

Docmosis Tornado <= 2.9.4 is vulnerable to Directory Traversal leading to the disclosure of arbitrary content on the fil

CVE-2023-25264 HIGH POC
7.5 Feb 28

An issue was discovered in Docmosis Tornado prior to version 2.9.5. Rated high severity (CVSS 7.5), this vulnerability i

CVE-2026-103262 HIGH
8.7 Oct 01

Denial of service in the Tornado web framework's CurlAsyncHTTPClient (all releases before 6.5.9) lets an unauthenticated

CVE-2026-31958 HIGH
8.7 Mar 11

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

CVE-2026-91990 HIGH
8.7 Sep 15

Memory amplification denial of service in the Tornado Python web framework before 6.5.8 lets unauthenticated remote atta

CVE-2026-91992 HIGH
8.2 Sep 15

Credential leakage in Tornado's CurlAsyncHTTPClient (all releases through 6.5.6) lets sensitive per-request state — clie

CVE-2026-103263 HIGH
8.2 Oct 01

Unauthenticated local file disclosure in Tornado before 6.5.9 lets remote attackers read files outside a configured stat

CVE-2026-82397 HIGH
7.5 Aug 31

Denial-of-service in Tornado prior to 6.5.8 allows unauthenticated remote attackers to stall the entire server by sendin

CVE-2025-67725 HIGH
7.5

Tornado Python web framework on Alpine Linux received a security fix in package version 6.5.4-r0, addressing an uncharac

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy