Skip to main content

Twisted EUVDEUVD-2026-109152

| CVE-2026-83813 LOW
Origin Validation Error (CWE-346)
2026-10-23 GitHub_M GHSA-jj36-9pvh-vj5r
3.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Gain adjacent or on-path network position
  2. Delivery
    Observe or trigger a pending DNS query
  3. Exploit
    Send forged UDP response with matching transaction ID
  4. Execution
    Resolver accepts spoofed record without source check
  5. Impact
    Redirect hostname resolution for MITM, SSRF, or mail interception

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Origin validation
Exploitation Conditions

No authentication is required (PR:N), but exploitation is constrained by network position and a guessing race, not by any product configuration toggle. The flaw is inherent to twisted.names.dns.DNSDatagramProtocol.datagramReceived, which accepts a UDP DNS response on transaction-ID match alone and never validates the datagram source address - affecting every consumer of the standard twisted.names.client.Resolver and createResolver, including twisted.mail MX resolution. Limiting factors per the advisory: against the standard client.Resolver, each query uses a fresh random source port, so an off-path attacker must guess ~32 bits (ephemeral port + transaction ID) within the query timeout window; an on-path attacker or one sharing a broadcast domain/NAT with the resolver or real server faces no barrier beyond the transaction ID. The single-barrier case is applications that directly construct and reuse one DNSDatagramProtocol instance across multiple queries (a supported pattern): after the first query the source port is fixed, so only the 16-bit transaction ID must be guessed. Affects Twisted <= 26.4.0; fixed in 26.10.0rc1.

Impact

This is a genuine but low-urgency defense-in-depth gap, not a high-priority emergency. The input CVSS 3.1 vector (AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N, base 3.1 Low) and the vuln.today Decision label 'monitor' are consistent: realistic exploitation requires a privileged network position and winning a probabilistic guessing race. The advisory itself quantifies the difficulty - against the standard twisted.names.client.Resolver, an off-path attacker must guess roughly 32 bits (a fresh random ephemeral source port plus the 16-bit transaction ID) within the query timeout, because the client cycles a new random source port per query; against code that reuses a single DNSDatagramProtocol instance across multiple queries, only the 16-bit transaction ID must be guessed after the first query. The AV:A (Adjacent) choice is well-supported because the advisory stresses that the real risk is for an on-path attacker or one sharing a broadcast domain or NAT, for whom source-address validation would be the stopping check and it is absent. No EPSS score was provided, so statistical exploitation-likelihood cannot be compared here. The vulnerability is NOT in CISA KEV (status not asserted in input) and there is no indication of active exploitation. A complete, demonstrated proof-of-concept is embedded in the vendor GHSA advisory (shown accepting a forged response), though the structured signals do not flag it as confirmed working exploit code. Net: a real correctness/best-practice flaw (missing RFC 5452 source-address validation) worth patching on a routine cycle, but the AC:H race condition and network-adjacency requirement keep real-world mass-exploitation risk low.

Exploit ScenarioDerived

An attacker on the same LAN, broadcast domain, or NAT as a host running a Twisted-based application delivers a forged UDP DNS response to the resolver's listening port with a matching 16-bit transaction ID (and, for the standard client, the correct ephemeral source port), before the legitimate server replies. Because twisted.names never checks the response's source address, the forged A/MX record is accepted, redirecting resolution to attacker-controlled infrastructure for mail interception, SSRF, or MITM. A working proof-of-concept demonstrating acceptance of a forged response from an unrelated local socket is published in the vendor's GHSA advisory.

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

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

Alert me

AnalysisAIv1 – Oct 23, 2026

DNS response spoofing in Twisted's twisted.names client and resolver (all versions through 26.4.0) arises because twisted.names.dns.DNSDatagramProtocol accepts a UDP DNS answer solely on a matching 16-bit transaction ID and never verifies that the datagram originated from the server the query was sent to. Attackers who can deliver a UDP packet to the resolver's listening port with the right transaction ID can inject a forged answer and redirect hostname resolution, enabling mail interception via spoofed MX/A records, server-side request forgery, or man-in-the-middle positioning; on-path attackers or those sharing a broadcast domain/NAT with the resolver or the real DNS server face essentially no barrier, while the standard client.Resolver's per-query random source-port rotation raises off-path effort to roughly 32 bits of combined entropy within the query timeout. Applications that directly construct and reuse one DNSDatagramProtocol instance across multiple queries are limited to the 16-bit transaction-ID space after the first query, which is the weakest case; the advisory includes a public PoC reference (not verified as working exploit code), there is no KEV listing or active-exploitation signal, and the assessed severity is low (CVSS 3.1, AV:A/AC:H) with a monitor priority.

RemediationAI

Vendor-released patch: 26.10.0rc1, which contains the source-address validation change delivered via PR #12700 (commit b53e1c3) and is published at https://github.com/twisted/twisted/releases/tag/twisted-26.10.0rc1 - since this is a release candidate, track the advisory https://github.com/twisted/twisted/security/advisories/GHSA-jj36-9pvh-vj5r for the corresponding final stable release and upgrade to it as soon as it ships. For environments that cannot move immediately, the highest-value compensating action targets the weakest case in the advisory: stop reusing a single DNSDatagramProtocol instance across multiple queries, and instead resolve through twisted.names.client.Resolver/createResolver, which binds a fresh random ephemeral port per query and restores the ~32-bit combined entropy for off-path attackers; the trade-off is per-query socket churn (extra setup/teardown latency and file-descriptor use) and no benefit against on-path attackers or those sharing a broadcast domain or NAT with the resolver or the real DNS server. Where the resolver's listening port is reachable only from a restricted network segment, tightening that reachability reduces the population of hosts that can deliver forged datagrams at all, but it does not substitute for source-address validation against on-path adversaries. DNSSEC validation of answers, where the resolver stack supports it, limits the impact of a successfully injected record but does not close the acceptance gap itself.

Affected VersionsENISA

twisted < 26.7.0rc1

Affected Packages

pypi twisted fix: 26.7.0rc1, 26.10.0rc1

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

Twisted is an event-driven Python networking framework, and twisted.names implements its DNS client on top of a UDP datagram protocol. The root cause is CWE-346 (origin validation error): DNSDatagramProtocol.datagramReceived in src/twisted/names/dns.py receives both the datagram and its source address, but the addr parameter is never compared to the address the pending query was sent to. Acceptance is gated only by 'm.id in self.liveMessages', a dictionary keyed by the 16-bit transaction ID chosen in DNSMixin.pickID(), and because the socket is created with a plain listenUDP(0, ...) that is not connected to the queried server, the kernel does not filter datagrams by source address either. Transaction IDs are generated with a secure random source, so they are not predictable, but 16 bits is only a 1-in-65536 space per attempt. RFC 5452 treats source-address validation as a defence independent of port and ID randomisation, and this implementation drops that backstop entirely; twisted.names.client.Resolver compensates partially by building a fresh DNSDatagramProtocol bound to a new random ephemeral port for every query and tearing it down afterwards, which is why the standard API path retains roughly 32 bits of combined entropy. The upstream fix (PR #12700, commit b53e1c3) reworks the related UDP/names plumbing and protocol typing alongside the validation change; the packaging metadata lists Twisted <= 26.4.0 as vulnerable and 26.10.0rc1 as fixed, and the CPE cpe:2.3:a:twisted:twisted:*:*:*:*:*:*:*:* reflects that the whole prior product line is affected rather than a single version.

Know when Twisted 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 3.1 LOW
AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 3.1 LOW

Realistic exploitation needs adjacent/on-path position (AV:A) and winning a port+transaction-ID guessing race in the timeout (AC:H); unauthenticated (PR:N); direct impact is forged resolution data (I:L), no inherent C/A loss.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Adjacent
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Oct 23, 2026 - 21:18 EUVD

DescriptionCVE.org

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, twisted.names.dns.DNSDatagramProtocol accepts a UDP DNS response for a pending query when its 16-bit transaction ID matches but does not verify that the response came from the queried host and port. An attacker able to deliver a packet to the resolver's listening port with the correct transaction ID can inject a forged answer. The standard twisted.names.client.Resolver uses a new random source port for each query, increasing off-path attack complexity, while applications that reuse a DNSDatagramProtocol instance expose only the transaction-ID search space after the first query. A successful forgery can redirect hostname resolution and enable mail interception, server-side request forgery, or man-in-the-middle positioning. This issue is fixed in version 26.10.0rc1.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 5 pypi packages depend on twisted (5 direct, 0 indirect)

Ecosystem-wide dependent count for version 26.10.0rc1.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Medium
widely-used Python networking framework; DNS client is a narrower subset
Threat Intel
1
1 source
Social Media
1
Sightings
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 No
EPSS 0.2%
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
None
System Exposure· derived
Controlled
Automatable· derived
No
Human Impact· derived
Low

Priority Score

16
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +16
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

CVE-2020-10109 CRITICAL POC
9.8 Mar 12

In Twisted Web through 19.10.0, there was an HTTP request splitting vulnerability. Rated critical severity (CVSS 9.8), t

CVE-2020-10108 CRITICAL POC
9.8 Mar 12

In Twisted Web through 19.10.0, there was an HTTP request splitting vulnerability. Rated critical severity (CVSS 9.8), t

CVE-2022-21716 HIGH POC
7.5 Mar 03

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Rated high severity (CVSS 7.5), t

CVE-2024-41810 MEDIUM POC
6.1 Jul 29

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Rated medium severity (CVSS 6.1),

CVE-2019-12387 MEDIUM POC
6.1 Jun 10

In Twisted before 19.2.1, twisted.web did not validate or sanitize URIs or HTTP methods, allowing an attacker to inject

CVE-2022-39348 MEDIUM POC
5.4 Oct 26

Twisted is an event-based framework for internet applications. Rated medium severity (CVSS 5.4), this vulnerability is r

CVE-2023-46137 MEDIUM POC
5.3 Oct 25

Twisted is an event-based framework for internet applications. Rated medium severity (CVSS 5.3), this vulnerability is r

CVE-2026-115775 HIGH
8.7 Oct 23

Unauthenticated memory exhaustion in Twisted's twisted.words.xish.domish XML element stream allows a remote peer to keep

CVE-2022-24801 HIGH
8.1 Apr 04

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Rated high severity (CVSS 8.1), t

CVE-2026-115778 HIGH
7.5 Oct 23

Unauthenticated remote memory exhaustion in Twisted's conch telnet transport lets any peer that can reach an exposed tel

CVE-2026-115776 HIGH
7.5 Oct 23

Unauthenticated remote memory exhaustion in Twisted's IRC server (twisted.words) lets a single TCP connection that never

CVE-2019-12855 HIGH
7.4 Jun 16

In words.protocols.jabber.xmlstream in Twisted through 19.2.1, XMPP support did not verify certificates when used with T

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