CVE-2026-115776
## Summary An unbounded-buffer vulnerability (CWE-770) in the Twisted words IRC server lets any unauthenticated remote client exhaust server memory. `twisted.words.protocols.irc.IRC.dataReceived` appends every received byte to a per-connection buffer and only removes data at a line feed, with no maximum length. Because `IRC` is a plain `Protocol` and not a `LineReceiver`, one connection that streams bytes without a line feed grows the buffer without bound and drives the whole single-threaded process to out-of-memory, dropping every user at once. The `twistd words` server inherits the method unchanged through `IRCUser`, and the data is buffered before any authentication. ## Details `IRC.dataReceived` keeps everything up to the last line feed in `self.buffer`: ```python # twisted/words/protocols/irc.py class IRC(protocol.Protocol): # not a LineReceiver, so no MAX_LENGTH buffer = "" def dataReceived(self, data): if isinstance(data, bytes): data = data.decode("utf-8") lines = (self.buffer + data).split(LF) self.buffer = lines.pop() # no 3line feed -> whole input stays buffered ... ``` With no line feed in the data, `lines.pop()` returns the entire accumulated content to `self.buffer`, so it grows by every chunk and is never bounded; `IRC` defines no `MAX_LENGTH`, no `lineLengthExceeded`, and no timeout, so the connection is never closed. The `twistd words` server protocol `IRCUser` subclasses `IRC` without overriding `dataReceived`, and the buffer is filled before any `PASS`, `NICK`, or `USER`, so no credentials are required. Affected product: Twisted (`twisted.words`), `twisted.words.protocols.irc.IRC` and its subclass `twisted.words.service.IRCUser` Affected versions: 26.4.0 and earlier ## PoC On a standard Twisted words IRC server (the server `twistd words` runs, using `IRCUser`), an unauthenticated client opens a single TCP connection and continuously sends data that contains no line feed, never c
Properties
- Summary
- Twisted: Unauthenticated Remote Denial of Service in the Twisted IRC Server via an Unbounded Line Buffer
- Severity
- high
- Nvd fetched at
- 2026-10-23T22:30:12.098505+00:00
- Cvss score
- 7.5
- Cvss severity
- HIGH
- Retrieved at
- 2026-10-23T22:32:28+00:00
- Ghsa published
- 2026-10-23T20:45:35Z
- Source url
- https://github.com/advisories/GHSA-53xc-49m8-p798
- Ghsa updated
- 2026-10-23T20:45:36Z
- Ghsa id
- GHSA-53xc-49m8-p798
- Last source
- GitHub Advisory Database
- Score
- 7.5
- Cvss version
- 3.1
- Cve id
- CVE-2026-115776
- Cvss vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- First seen by Signal
- 2026-10-23T22:32:25+00:00
- Is ghsa only
- false
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Published at
- 2026-10-23T21:17:23.180
- Last modified
- 2026-10-23T21:17:23.180
Related Entities (4)
HAS_WEAKNESS (2)
AFFECTS (1)
VULNERABLE_TO (1)
Explore deeper with Ninja Signal's threat intelligence graph