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·9 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

•37 minutes ago•GHSA-3R53-75J5-3G7J
5.6

GHSA-3r53-75j5-3g7j: Prototype Pollution in Quasar Framework extend Utility

A prototype pollution vulnerability (CWE-1321) in the Quasar framework's utility function 'extend' allows unauthenticated remote attackers to modify the global Object.prototype. This vulnerability can lead to application-level logic bypasses, denial of service, or potentially arbitrary code execution depending on downstream implementation.

Alon Barad
Alon Barad
3 views•6 min read
•about 2 hours ago•GHSA-HMJ8-5XMH-5573
7.5

GHSA-HMJ8-5XMH-5573: Connection Denial of Service via Oversized DATA Frame in py-libp2p

A critical connection-level Denial of Service (DoS) vulnerability exists in the Yamux stream multiplexer implementation of py-libp2p (versions <= 0.6.0). The flaw allows unauthenticated or authenticated peers to permanently stall a Yamux multiplexed connection by transmitting a single malformed 12-byte header claiming an oversized payload while withholding the payload bytes.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 3 hours ago•CVE-2026-16756
7.5

CVE-2026-16756: Slowloris Denial of Service via Resource Exhaustion in aws-smithy-http-server

An unauthenticated remote resource exhaustion vulnerability in Amazon aws-smithy-http-server enables denial-of-service (DoS) attacks. Affected versions do not enforce connection limits or header timeouts, allowing standard Slowloris techniques to block server operations.

Alon Barad
Alon Barad
7 views•7 min read
•about 4 hours ago•GHSA-XG4H-6GFC-H4M8
6.5

GHSA-XG4H-6GFC-H4M8: Watch API Authorization Bypass via Open-Ended Range Requests in etcd

An authorization bypass vulnerability in the gRPC Watch API of etcd allows low-privileged users to read keys outside of their authorized range. By utilizing an open-ended range request sentinel, the input is prematurely normalized before RBAC validation, misclassifying a range watch as a single-key point query.

Amit Schendel
Amit Schendel
4 views•8 min read
•about 5 hours ago•CVE-2026-16796
7.3

CVE-2026-16796: Command Argument Injection in AWS Bedrock AgentCore SDK

An argument injection vulnerability in the AWS Bedrock AgentCore Python SDK allows authenticated users to execute arbitrary commands inside the Code Interpreter sandbox container via crafted Python package specifiers containing shell metacharacters.

Alon Barad
Alon Barad
8 views•5 min read
•about 6 hours ago•GHSA-JPCW-4WR7-C3VQ
7.5

GHSA-JPCW-4WR7-C3VQ: Remote Denial of Service via NULL Pointer Dereference in kin-openapi Parameter Validation

A NULL pointer dereference vulnerability was discovered in the getkin/kin-openapi Go library. When parsing incoming request parameters that are validated against a content map with an empty media type, the openapi3filter request validation engine attempts to resolve an uninitialized schema pointer. This results in an unhandled Go runtime panic and process termination, yielding an unauthenticated, remote Denial of Service vector.

Alon Barad
Alon Barad
7 views•5 min read