Every CVE Search/ Get API key

CVE-2026-115775

Twisted: Unauthenticated Remote Denial of Service in the Twisted words domish XML Element Stream via an Unbounded Element Tree

8.7 HighFix available

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
High

Exploit likelihood

0.44%Down 0.2 points since Oct 24, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.7

Twisted: Unauthenticated Remote Denial of Service in the Twisted words domish XML Element Stream via an Unbounded Element Tree

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
CVE-2026-115775
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400, CWE-770
Updated
2026-11-02
EUVDEUVD-2026-109149 8.7

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
EUVD-2026-109149
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-3476-c5c2-fr73 8.7

Twisted: Unauthenticated Remote Denial of Service in the Twisted words domish XML Element Stream via an Unbounded Element Tree

Summary

An allocation-without-limits vulnerability in the Twisted XML element stream lets any unauthenticated remote peer exhaust server memory over a single stream. When the peer opens a container element and streams child elements without ever closing the container, every element is materialised into an in-memory tree with no limit on depth or child count. An element is released only when its end tag arrives, so a container the attacker never closes retains everything beneath it until the process is killed.

Details

In ExpatElementStream._onStartElement, each start tag appends a new element to the current element's children and descends into it, with no depth or child-count check:

# src/twisted/words/xish/domish.py  (ExpatElementStream._onStartElement)
if self.documentStarted == 1:
    if self.currElem != None:
        self.currElem.children.append(e)   # append child: no depth/count cap
        e.parent = self.currElem
    self.currElem = e                      # descend into the new element

An element is emitted and dropped only when its end tag arrives while it sits directly under the document root, so a container that is never closed keeps every child beneath it. The transport XmlStream.dataReceived feeds bytes to self.stream.parse(data) with no size limit, and in XMPP the stream is parsed during negotiation before authentication.

Affected product: Twisted, twisted.words.xish.domish element stream Affected versions: confirmed against 26.4.0

PoC

On any endpoint that parses untrusted XML streams with this stack, such as an XMPP server, open a stream by sending the opening stream:stream tag and a container element, then stream child elements continuously and never send the container's closing tag. No credentials are required, because in XMPP the stream is parsed before authentication.

Every child is appended to the container and retained because the container is never emitted, and the transport applies no limit on the size of the unfinished document. Because each small element becomes a full object in memory the footprint is many times the traffic sent, so a modest-bandwidth peer, or several such streams, drives the process to memory exhaustion.

Impact

This is an unauthenticated remote denial of service by memory exhaustion. A single stream grows an in-memory element tree without bound, amplified by per-element object overhead, until the operating system kills the server. There is no confidentiality or integrity impact and no code execution. The affected surface is any deployment that parses untrusted XML streams with this stack, such as an XMPP server or component.

Record
GHSA-3476-c5c2-fr73
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400, CWE-770
Updated
2026-11-02
NVD 8.7

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
CVE-2026-115775
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-400, CWE-770
Updated
2026-11-02
OSV 8.7

Twisted: Unauthenticated Remote Denial of Service in the Twisted words domish XML Element Stream via an Unbounded Element Tree

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
CVE-2026-115775
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400, CWE-770
Updated
2026-11-02
OSVDEBIAN-CVE-2026-115775 8.7

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
DEBIAN-CVE-2026-115775
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Updated
2026-11-02
Show 4 moreShow less
OSVGHSA-3476-c5c2-fr73 8.7

Twisted: Unauthenticated Remote Denial of Service in the Twisted words domish XML Element Stream via an Unbounded Element Tree

Summary

An allocation-without-limits vulnerability in the Twisted XML element stream lets any unauthenticated remote peer exhaust server memory over a single stream. When the peer opens a container element and streams child elements without ever closing the container, every element is materialised into an in-memory tree with no limit on depth or child count. An element is released only when its end tag arrives, so a container the attacker never closes retains everything beneath it until the process is killed.

Details

In ExpatElementStream._onStartElement, each start tag appends a new element to the current element's children and descends into it, with no depth or child-count check:

# src/twisted/words/xish/domish.py  (ExpatElementStream._onStartElement)
if self.documentStarted == 1:
    if self.currElem != None:
        self.currElem.children.append(e)   # append child: no depth/count cap
        e.parent = self.currElem
    self.currElem = e                      # descend into the new element

An element is emitted and dropped only when its end tag arrives while it sits directly under the document root, so a container that is never closed keeps every child beneath it. The transport XmlStream.dataReceived feeds bytes to self.stream.parse(data) with no size limit, and in XMPP the stream is parsed during negotiation before authentication.

Affected product: Twisted, twisted.words.xish.domish element stream Affected versions: confirmed against 26.4.0

PoC

On any endpoint that parses untrusted XML streams with this stack, such as an XMPP server, open a stream by sending the opening stream:stream tag and a container element, then stream child elements continuously and never send the container's closing tag. No credentials are required, because in XMPP the stream is parsed before authentication.

Every child is appended to the container and retained because the container is never emitted, and the transport applies no limit on the size of the unfinished document. Because each small element becomes a full object in memory the footprint is many times the traffic sent, so a modest-bandwidth peer, or several such streams, drives the process to memory exhaustion.

Impact

This is an unauthenticated remote denial of service by memory exhaustion. A single stream grows an in-memory element tree without bound, amplified by per-element object overhead, until the operating system kills the server. There is no confidentiality or integrity impact and no code execution. The affected surface is any deployment that parses untrusted XML streams with this stack, such as an XMPP server or component.

Record
GHSA-3476-c5c2-fr73
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-400, CWE-770
Updated
2026-11-02
OSVUBUNTU-CVE-2026-115775 8.7

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
UBUNTU-CVE-2026-115775
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-05
OSVAZL-111422 No score

CVE-2026-115775 affecting package python-twisted 22.10.0-7

Twisted is an event-based framework for internet applications, supporting Python 3.6+. Prior to 26.10.0rc1, the twisted.words.xish.domish ExpatElementStream parser allows an unauthenticated remote peer to keep a container element open while continuously adding child elements. The parser retains the unfinished stanza as an in-memory tree without a byte or element-count limit, and XMPP pre-authentication stream parsing exposes this behavior before credentials are accepted. A single connection can therefore exhaust server memory and terminate the process. This issue is fixed in version 26.10.0rc1.

Record
AZL-111422
Updated
2026-11-05
OSVCLSA-2026-1793013013 No score

TuxCare security update for twisted (4 CVEs)

TuxCare rebuilt twisted to address 4 CVEs. Fixed in 20.3.0.post7+tuxcare.

Record
CLSA-2026-1793013013
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
twisted
PyPI
through 26.4.0
26.10.0rc1
python-twisted
Azure Linux:3
through 22.10.0-7 None known
twisted
TuxCare:PyPI
From an advisory covering 4 CVEs
20.3.0 up to 20.3.0.post7+tuxcare, plus listed versions
20.3.0.post4+tuxcare20.3.0.post5+tuxcare20.3.0.post6+tuxcare
20.3.0.post7+tuxcare
twisted
Debian:12
All versions, plus listed versions
22.4.0-422.4.0-4+deb12u123.10.0-123.10.0-224.10.0-1
Show 20 moreShow less
24.10.0-224.11.0-124.3.0-124.3.0-224.3.0-324.7.0-124.7.0-224.7.0-325.5.0-125.5.0-225.5.0-325.5.0-425.5.0-526.10.0-126.4.0-126.4.0-226.4.0-326.4.0-426.4.0-526.4.0-6
None known
twisted
Debian:13
All versions, plus listed versions
24.11.0-125.5.0-125.5.0-225.5.0-325.5.0-4
Show 8 moreShow less
25.5.0-526.10.0-126.4.0-126.4.0-226.4.0-326.4.0-426.4.0-526.4.0-6
None known
twisted
Debian:14
before 26.10.0-1, plus listed versions
24.11.0-125.5.0-125.5.0-225.5.0-325.5.0-4
Show 7 moreShow less
25.5.0-526.4.0-126.4.0-226.4.0-326.4.0-426.4.0-526.4.0-6
26.10.0-1
twisted
PyPI
before 26.10.0rc1, plus listed versions
1.0.11.0.31.0.41.0.51.0.6
Show 45 moreShow less
1.0.71.1.01.1.11.2.010.0.010.1.010.2.011.0.011.1.012.0.012.1.012.2.012.3.013.0.013.1.013.2.014.0.014.0.114.0.215.0.015.1.015.2.015.2.115.3.015.4.015.5.016.0.016.1.016.1.116.2.016.3.016.3.116.3.216.4.016.4.116.5.016.5.0rc116.5.0rc216.6.016.6.0rc116.7.0rc116.7.0rc217.1.017.1.0rc117.5.0
26.10.0rc1
twisted
Ubuntu:Pro:14.04:LTS
All versions, plus listed versions
13.0.0-1ubuntu113.2.0-1ubuntu113.2.0-1ubuntu1.213.2.0-1ubuntu1.2+esm113.2.0-1ubuntu1.2+esm213.2.0-1ubuntu1.2+esm3
None known
twisted
Ubuntu:Pro:16.04:LTS
All versions, plus listed versions
15.2.1-1ubuntu215.5.0-115.5.0-215.5.0-2ubuntu115.5.0-4
Show 9 moreShow less
16.0.0~pre1-116.0.0~pre1-1ubuntu116.0.0~pre1-2ubuntu116.0.0~pre1-316.0.0-116.0.0-1ubuntu0.216.0.0-1ubuntu0.416.0.0-1ubuntu0.4+esm116.0.0-1ubuntu0.4+esm2
None known
twisted
Ubuntu:Pro:18.04:LTS
All versions, plus listed versions
16.6.0-2ubuntu317.9.0-117.9.0-217.9.0-2ubuntu0.117.9.0-2ubuntu0.317.9.0-2ubuntu0.3+esm117.9.0-2ubuntu0.3+esm2
None known
Show 5 moreShow less
Affected packages
PackageAffectedFixed
twisted
Ubuntu:20.04:LTS
All versions, plus listed versions
18.9.0-3ubuntu118.9.0-518.9.0-618.9.0-6build118.9.0-6ubuntu1
Show 7 moreShow less
18.9.0-818.9.0-1118.9.0-11ubuntu0.20.04.118.9.0-11ubuntu0.20.04.218.9.0-11ubuntu0.20.04.318.9.0-11ubuntu0.20.04.418.9.0-11ubuntu0.20.04.5
None known
twisted
Ubuntu:22.04:LTS
All versions, plus listed versions
20.3.0-7ubuntu120.3.0-7ubuntu322.1.0-2ubuntu222.1.0-2ubuntu2.122.1.0-2ubuntu2.3
Show 5 moreShow less
22.1.0-2ubuntu2.422.1.0-2ubuntu2.522.1.0-2ubuntu2.622.1.0-2ubuntu2.722.1.0-2ubuntu2.8
None known
twisted
Ubuntu:24.04:LTS
All versions, plus listed versions
22.4.0-422.4.0-4ubuntu123.10.0-224.3.0-124.3.0-1ubuntu0.124.3.0-1ubuntu0.224.3.0-1ubuntu0.3
None known
twisted
Ubuntu:26.10
All versions, plus listed versions
25.5.0-526.4.0-426.4.0-4ubuntu0.1
None known
twisted
Ubuntu:26.04:LTS
All versions, plus listed versions
24.11.0-125.5.0-425.5.0-525.5.0-5ubuntu0.125.5.0-5ubuntu0.2
None known

History

History
RecordedChangedSources
affected
affectedOSV
affected, factsOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-115775 is a high vulnerability (CVSS 8.7) in Twisted, published October 23, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.44%, the 38th percentile. Fixed in twisted 26.10.0rc1.

References

Show 5 moreShow less
This page doesn't list everything

Left out here: 61 versions. The JSON record has them.

MoveEnter Open