CVE-2025-67724
published 2025-12-12CVE-2025-67724: Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, the supplied reason phrase is used unescaped in HTTP…
PriorityP428medium6.1CVSS 3.1
AVNACLPRNUIRSCCLILAN
EPSS
0.21%
11.0th percentile
Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, the supplied reason phrase is used unescaped in HTTP headers (where it could be used for header injection) or in HTML in the default error page (where it could be used for XSS) and can be exploited by passing untrusted or malicious data into the reason argument. Used by both RequestHandler.set_status and tornado.web.HTTPError, the argument is designed to allow applications to pass custom "reason" phrases (the "Not Found" in HTTP/1.1 404 Not Found) to the HTTP status line (mainly for non-standard status codes). This issue is fixed in version 6.5.3.
Affected
3 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| debian | python-tornado | < python-tornado 6.2.0-3+deb12u4 (bookworm) | python-tornado 6.2.0-3+deb12u4 (bookworm) |
| tornadoweb | tornado | < 6.5.3 | 6.5.3 |
| tornadoweb | tornado | >= 0 < 6.5.3 | 6.5.3 |
CVSS provenance
nvdv3.16.1MEDIUMCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
osv6.1MEDIUM
vendor_debian5.4MEDIUM
vendor_redhat5.4MEDIUM
vendor_ubuntu5.4MEDIUM
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
GHSA
Tornado vulnerable to Header Injection and XSS via reason argument
ghsa·2026-07-20
CVE-2025-67724 [MEDIUM] CWE-79 Tornado vulnerable to Header Injection and XSS via reason argument
Tornado vulnerable to Header Injection and XSS via reason argument
# Header injection and XSS via `reason` argument
## Summary
The `reason` argument (used by both `RequestHandler.set_status` and `tornado.web.HTTPError` is designed to allow applications to pass custom "reason" phrases (the "Not Found" in `HTTP/1.1 404 Not Found`) to the HTTP status line (mainly for non-standard status codes). Vulnerabilities exist in Tornado versions prior to 6.5.3 if untrusted data is passed as the `reason` argument.
## Details
In vulnerable versions, the supplied `reason` phrase is used unescaped in HTTP headers (where it could be used for header injection) or in HTML in the default error page (where it could be used for XSS).
## Impact
* **Type:** Reflected Cross-Site Scripting (CWE-79) in default
OSV
python-tornado vulnerabilities
osv·2026-01-08·CVSS 6.1
CVE-2025-67724 [MEDIUM] python-tornado vulnerabilities
python-tornado vulnerabilities
It was discovered that Tornado incorrectly handled special characters in
HTTP headers. An attacker could possibly use this issue to execute a cross-
site scripting (XSS) attack. This issue only affected Ubuntu 20.04 LTS,
Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 25.04, and Ubuntu 25.10.
(CVE-2025-67724)
It was discovered that Tornado incorrectly handled repeated HTTP headers.
An attacker could possibly use this issue to cause Tornado to use excessive
resources, causing a denial of service. (CVE-2025-67725)
It was discovered that Tornado incorrectly handled parsing of certain HTTP
header values. An attacker could possibly use this issue to cause Tornado
to use excessive resources, causing a denial of service. (CVE-2025-67726)
OSV
CVE-2025-67724: Tornado is a Python web framework and asynchronous networking library
osv·2025-12-12·CVSS 6.1
CVE-2025-67724 [MEDIUM] CVE-2025-67724: Tornado is a Python web framework and asynchronous networking library
Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, the supplied reason phrase is used unescaped in HTTP headers (where it could be used for header injection) or in HTML in the default error page (where it could be used for XSS) and can be exploited by passing untrusted or malicious data into the reason argument. Used by both RequestHandler.set_status and tornado.web.HTTPError, the argument is designed to allow applications to pass custom "reason" phrases (the "Not Found" in HTTP/1.1 404 Not Found) to the HTTP status line (mainly for non-standard status codes). This issue is fixed in version 6.5.3.
Ubuntu
Tornado vulnerabilities
vendor_ubuntu·2026-01-08·CVSS 5.4
CVE-2025-67725 [MEDIUM] Tornado vulnerabilities
Title: Tornado vulnerabilities
Summary: Several security issues were fixed in Tornado.
It was discovered that Tornado incorrectly handled special characters in
HTTP headers. An attacker could possibly use this issue to execute a cross-
site scripting (XSS) attack. This issue only affected Ubuntu 20.04 LTS,
Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 25.04, and Ubuntu 25.10.
(CVE-2025-67724)
It was discovered that Tornado incorrectly handled repeated HTTP headers.
An attacker could possibly use this issue to cause Tornado to use excessive
resources, causing a denial of service. (CVE-2025-67725)
It was discovered that Tornado incorrectly handled parsing of certain HTTP
header values. An attacker could possibly use this issue to cause Tornado
to use excessive resources, causing a denial of
Red Hat
tornado: Tornado Header Injection and XSS via reason argument
vendor_redhat·2025-12-12·CVSS 5.4
CVE-2025-67724 [MEDIUM] CWE-79 tornado: Tornado Header Injection and XSS via reason argument
tornado: Tornado Header Injection and XSS via reason argument
Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, the supplied reason phrase is used unescaped in HTTP headers (where it could be used for header injection) or in HTML in the default error page (where it could be used for XSS) and can be exploited by passing untrusted or malicious data into the reason argument. Used by both RequestHandler.set_status and tornado.web.HTTPError, the argument is designed to allow applications to pass custom "reason" phrases (the "Not Found" in HTTP/1.1 404 Not Found) to the HTTP status line (mainly for non-standard status codes). This issue is fixed in version 6.5.3.
An unescaped input flaw has been discovered in the Tornado networking library. In
Debian
CVE-2025-67724: python-tornado - Tornado is a Python web framework and asynchronous networking library. In versio...
vendor_debian·2025·CVSS 5.4
CVE-2025-67724 [MEDIUM] CVE-2025-67724: python-tornado - Tornado is a Python web framework and asynchronous networking library. In versio...
Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, the supplied reason phrase is used unescaped in HTTP headers (where it could be used for header injection) or in HTML in the default error page (where it could be used for XSS) and can be exploited by passing untrusted or malicious data into the reason argument. Used by both RequestHandler.set_status and tornado.web.HTTPError, the argument is designed to allow applications to pass custom "reason" phrases (the "Not Found" in HTTP/1.1 404 Not Found) to the HTTP status line (mainly for non-standard status codes). This issue is fixed in version 6.5.3.
Scope: local
bookworm: resolved (fixed in 6.2.0-3+deb12u4)
bullseye: resolved (fixed in 6.1.0-1+deb11u3)
forky: resolved (fixed in 6.5.4-0.1)
sid:
No detection rules found.
No public exploits indexed.
Wiz
CVE-2025-67726 Impact, Exploitability, and Mitigation Steps | Wiz
blogs_wiz·CVSS 7.5
CVE-2025-67726 [HIGH] CVE-2025-67726 Impact, Exploitability, and Mitigation Steps | Wiz
## CVE-2025-67726 :
SaltStack vulnerability analysis and mitigation
Tornado is a Python web framework and asynchronous networking library. Versions 6.5.2 and below use an inefficient algorithm when parsing parameters for HTTP header values, potentially causing a DoS. The _parseparam function in httputil.py is used to parse specific HTTP header values, such as those in multipart/form-data and repeatedly calls string.count() within a nested loop while processing quoted semicolons. If an attacker sends a request with a large number of maliciously crafted parameters in a Content-Disposition header, the server's CPU usage increases quadratically (O(n²)) during parsing. Due to Tornado's single event loop architecture, a single malicious request can cause the entire server to become unresponsiv
Wiz
CVE-2025-67725 Impact, Exploitability, and Mitigation Steps | Wiz
blogs_wiz·CVSS 7.5
CVE-2025-67725 [HIGH] CVE-2025-67725 Impact, Exploitability, and Mitigation Steps | Wiz
## CVE-2025-67725 :
SaltStack vulnerability analysis and mitigation
Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, a single maliciously crafted HTTP request can block the server's event loop for an extended period, caused by the HTTPHeaders.add method. The function accumulates values using string concatenation when the same header name is repeated, causing a Denial of Service (DoS). Due to Python string immutability, each concatenation copies the entire string, resulting in O(n²) time complexity. The severity can vary from high if max_header_size has been increased from its default, to low if it has its default value of 64KB. This issue is fixed in version 6.5.3.
Source : NVD
## 7.5
Score
Published December 12, 2025
Severity HIG
Wiz
CVE-2025-67724 Impact, Exploitability, and Mitigation Steps | Wiz
blogs_wiz·CVSS 7.5
CVE-2025-67724 [HIGH] CVE-2025-67724 Impact, Exploitability, and Mitigation Steps | Wiz
## CVE-2025-67724 :
SaltStack vulnerability analysis and mitigation
Tornado is a Python web framework and asynchronous networking library. In versions 6.5.2 and below, the supplied reason phrase is used unescaped in HTTP headers (where it could be used for header injection) or in HTML in the default error page (where it could be used for XSS) and can be exploited by passing untrusted or malicious data into the reason argument. Used by both RequestHandler.set_status and tornado.web.HTTPError, the argument is designed to allow applications to pass custom "reason" phrases (the "Not Found" in HTTP/1.1 404 Not Found) to the HTTP status line (mainly for non-standard status codes). This issue is fixed in version 6.5.3.
Source : NVD
## 6.1
Score
Published December 12, 2025
Severity MEDIUM
2025-12-12
Published