CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-6VCH-Q96H-7GC3

GHSA-6VCH-Q96H-7GC3: Unbounded Goroutine Creation and Denial of Service in etcd TLS Listener

Alon Barad
Alon Barad
Software Engineer

Jul 24, 2026·5 min read·23 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can crash etcd nodes by opening raw TCP connections and withholding the TLS ClientHello, leading to resource exhaustion through leaked goroutines and open socket file descriptors.

A critical Denial of Service (DoS) vulnerability exists in the etcd TLS listener. Due to the lack of a handshake timeout or deadline on incoming TLS connections within the connection acceptance loop, an unauthenticated remote attacker can spawn an unbounded number of blocking goroutines and leak file descriptors, eventually exhausting system resources and causing the etcd node to crash.

Vulnerability Overview

The etcd distributed key-value store relies on a custom TLS listener implementation (tlsListener) to handle secure communication between cluster peers and client applications. This component wraps standard network connections and processes incoming TLS transport layers. The attack surface is exposed directly on the peer port (typically TCP 2380) and client port (typically TCP 2379) when TLS encryption is enabled.

An unauthenticated remote attacker can exploit a vulnerability within the connection acceptance loop (acceptLoop) of this listener. By initiating a large number of TCP connections and intentionally withholding the expected TLS handshake data, the attacker can force the server to allocate resources that are never released.

This bug belongs to the class of uncontrolled resource consumption (CWE-400). It permits an attacker with network reachability to exhaust available system resources on the etcd host, leading to node crashes and cluster-wide denial of service.

Root Cause Analysis

The core vulnerability resides in client/pkg/transport/listener_tls.go within the acceptLoop() method. When a new TCP connection is accepted via l.Listener.Accept(), etcd registers the connection in a synchronized pending map to track active handshakes. To prevent slow TLS handshakes from blocking the main acceptance loop, etcd spawns a new Go goroutine for each incoming connection to complete the TLS handshake process.

Inside the spawned goroutine, etcd calls tlsConn.Handshake(), which is Go's standard library implementation of the TLS handshake. However, Go's standard network sockets do not enforce any default read or write deadlines. If a client establishes a TCP connection but transmits no data, any blocking read operation on that connection will block indefinitely.

Because etcd failed to establish a handshake timeout or a read/write deadline on the underlying connection before calling tlsConn.Handshake(), the blocking read call within the standard library remains suspended indefinitely. This allows an attacker to leak goroutines, file descriptors, and memory indefinitely by simply opening raw TCP connections and remaining silent.

Code Analysis

The vulnerable code path initiates the handshake directly without setting any deadline on the connection wrapper. The following diff illustrates the vulnerability and the subsequent remediation implemented in the patch:

// Prior to the patch:
tlsConn := conn.(*tls.Conn)
// Vulnerable: Handshake is called directly without a preceding SetDeadline call.
// The goroutine will block indefinitely if the client does not send a ClientHello.
herr := tlsConn.Handshake()
pendingMu.Lock()
delete(pending, conn)
pendingMu.Unlock()

The remediation introduces a constant handshake timeout of 10 seconds and applies it to the connection prior to executing the handshake:

// Patched implementation:
const (
	// tlsHandshakeTimeout bounds how long a single TLS handshake may block.
	tlsHandshakeTimeout = 10 * time.Second
)
 
// ...
 
tlsConn := conn.(*tls.Conn)
// Fix: Apply a 10-second deadline before calling Handshake
_ = tlsConn.SetDeadline(time.Now().Add(tlsHandshakeTimeout))
herr := tlsConn.Handshake()
pendingMu.Lock()
delete(pending, conn)
pendingMu.Unlock()
 
if herr != nil {
	l.handshakeFailure(tlsConn, herr)
	return
}
// Fix: Clear the deadline after a successful handshake to allow persistent streams
_ = tlsConn.SetDeadline(time.Time{})

This ensures that any connection failing to complete the TLS handshake within 10 seconds will trigger an I/O timeout, causing Handshake() to return an error, terminating the goroutine, and cleaning up the resources.

Exploitation Methodology

An attacker can exploit this vulnerability using a connection-gobbling pattern, similar to a classic Slowloris attack. The attack requires no cryptographic capability, credentials, or client certificates, making it effective even when mutual TLS (mTLS) is enforced. The handshake failure occurs before client certificate verification is executed.

The exploitation sequence begins with the attacker initiating a standard TCP three-way handshake with the target etcd port. Once the connection is established, the attacker halts all communication and does not send the standard TLS ClientHello message.

By repeating this cycle thousands of times, the attacker forces the etcd server to spawn a goroutine and allocate file descriptors for each connection. Because these goroutines remain active indefinitely, the host eventually exhausts its file descriptor limits or runs out of available RAM, causing the operating system to terminate the etcd process or refuse new connections.

Impact Assessment

The primary impact of this vulnerability is a complete denial of service. Since etcd serves as the state store for Kubernetes clusters and other distributed systems, a crash of the etcd daemon can destabilize the entire control plane.

The vulnerability has been assigned an estimated CVSS v3.1 score of 7.5 (High), with the vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. The exploitation complexity is low, as it requires no privileges and can be executed over the network.

While there are no reports of weaponized exploits in the wild, the low technical barrier to entry makes this a significant risk. Organizations running etcd clusters exposed to untrusted networks are particularly vulnerable to resource exhaustion attacks.

Remediation and Mitigation

The primary remediation strategy is upgrading the etcd cluster to a patched release. The fix is integrated into versions 3.5.33, 3.6.14, and 3.7.1.

If immediate upgrading is not feasible, several network-level mitigations can reduce the attack surface. Organizations should implement strict Access Control Lists (ACLs) at the firewall or security group level to limit access to etcd ports (2379 and 2380) solely to authorized client IPs and peer nodes.

Additionally, operators can deploy etcd behind a highly optimized TLS-terminating reverse proxy or load balancer. The proxy should enforce strict TCP handshake timeouts and limit the rate of concurrent connections from single source IPs, protecting the backend etcd listeners from resource exhaustion.

Fix Analysis (2)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

etcd

Affected Versions Detail

Product
Affected Versions
Fixed Version
etcd
etcd-io
< 3.5.333.5.33
etcd
etcd-io
>= 3.6.0, < 3.6.143.6.14
etcd
etcd-io
>= 3.7.0, < 3.7.13.7.1
AttributeDetail
CWE IDCWE-400
Attack VectorNetwork
CVSS Score7.5 (High)
EPSS Score0.00
ImpactDenial of Service (DoS)
Exploit StatusProof-of-Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-400
Uncontrolled Resource Consumption

The product does not sufficiently control or limit the allocation of resources, leading to resource exhaustion.

References & Sources

  • [1]GitHub Security Advisory GHSA-6VCH-Q96H-7GC3
  • [2]etcd Pull Request #22130
  • [3]etcd Release v3.5.33
  • [4]etcd Release v3.6.14
  • [5]etcd Release v3.7.1

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
8 views•5 min read
•1 day ago•CVE-2026-107848
3.5

CVE-2026-107848: Cross-Site Request Forgery (CSRF) in Contao Backend Actions via GET Requests

Contao Open Source CMS versions 4.0.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 contain a Cross-Site Request Forgery (CSRF) vulnerability in backend parameter handling. The `RequestTokenListener` component validates anti-CSRF tokens solely for HTTP POST requests, while GET-based declarative guards run only when an `act` parameter is present in the query string. Consequently, custom backend actions dispatched via alternative parameters such as `key=` can execute without CSRF token verification when triggered by an authenticated user.

Amit Schendel
Amit Schendel
8 views•5 min read
•1 day ago•CVE-2026-107843
5.3

CVE-2026-107843: Unthrottled Activation Email Resend and Account Enumeration in Contao CMS

Contao CMS versions 4.1.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 fail to validate form submission tokens and enforce rate limiting when processing activation email resend requests via HTTP POST, enabling resource exhaustion and account state enumeration.

Amit Schendel
Amit Schendel
8 views•4 min read
•1 day ago•CVE-2026-107842
5.3

CVE-2026-107842: Information Disclosure via Stale Indexing in Contao Search Module

An information disclosure vulnerability in Contao CMS allows unauthenticated site visitors to view protected page titles, URLs, and text excerpts through search queries when protected page indexing is disabled after previously being enabled.

Amit Schendel
Amit Schendel
10 views•4 min read
•1 day ago•GHSA-G38J-7V97-X298
6.5

GHSA-G38J-7V97-X298: Missing Authorization Check in Vikunja CalDAV Task Relation Creation

In Vikunja prior to version 2.6.0, relation creation via the CalDAV endpoint fails to invoke the TaskRelation.CanCreate authorization check. This missing access control allows an authenticated user to establish unauthorized relationships and perform write operations against any task, provided its unique identifier (UID) is known.

Alon Barad
Alon Barad
12 views•5 min read
•1 day ago•GHSA-3HC7-R24J-RPWC
6.8

GHSA-3hc7-r24j-rpwc: Cross-Project Task Disclosure via Subtask Expansion in Vikunja

A cross-project information disclosure vulnerability in Vikunja allows authenticated users with read access to one project to view private task details from unauthorized projects via subtask expansion parameters.

Alon Barad
Alon Barad
9 views•5 min read