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



CVE-2026-86065

CVE-2026-86065: Denial of Service via Resource Exhaustion in klever-go WebSocket Subscription Endpoint

Alon Barad
Alon Barad
Software Engineer

Sep 23, 2026·7 min read·6 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can crash klever-go nodes via WebSocket resource exhaustion on the `/subscribe` endpoint, mitigated in v1.7.20.

Prior to version 1.7.20, the default-open WebSocket `/subscribe` endpoint in klever-go was vulnerable to remote resource exhaustion. Unauthenticated, remote attackers could crash validator and node processes by exploiting unbounded frame reads, uncapped concurrent connections, unrestricted memory allocation for subscription address keys, and a permanent memory leak in subscription map tracking on client disconnects.

Vulnerability Overview

The klever-go package provides the Go implementation of the Klever blockchain protocol. Within this node architecture, the WebSocket endpoint located at /subscribe is designed to allow clients to receive real-time updates regarding blockchain events, block proposals, and transaction confirmations. This service represents a significant portion of the external attack surface exposed by public validator nodes.

In versions prior to 1.7.20, this endpoint was exposed without robust traffic or memory management controls. Because HTTP REST and WebSocket APIs run inside the primary node process, any unhandled resource exhaustion on this interface directly impacts the core validator engine. A failure in the WebSocket sub-system will cause the entire process to crash or hang, rendering the node incapable of participating in the consensus mechanism or synchronizing blocks.

This vulnerability is categorized under CWE-770 (Allocation of Resources Without Limits or Throttling). It consists of five interrelated sub-flaws: unbounded frame parsing, uncapped concurrent connections, unrestricted slice allocation, oversized map-key retention, and a permanent memory leak during client teardown. Combined, these vectors permit unauthenticated remote attackers to trigger out-of-memory panics or thread exhaustion.

Root Cause Analysis

The technical root cause of the vulnerability lies in how the subscription lifecycle and the underlying network connection upgrades are handled. During a WebSocket protocol upgrade, the HTTP connection is hijacked and transitioned into a stateful WebSocket connection. In affected versions of klever-go, the server did not call the SetReadLimit function on the upgraded network connection. Consequently, the gorilla/websocket library was permitted to read frame payloads of arbitrary size, leading to immediate heap allocation of the incoming payload size.

Simultaneously, the connection tracking logic relied on nested Go maps (h.addressSubscription) to map target addresses to connected client structs. When a client registered interest in an address, a new key was inserted into the outer map. Upon client disconnection, the server executed handleClientDelete to locate the client in the inner map and delete the entry. However, the outer map's key itself was never pruned. This omission left empty map structures in memory, establishing a classic memory leak where each unique subscription address string remained in memory permanently.

Furthermore, the system failed to enforce bounds on the length of input address strings or the total count of addresses submitted in a single request. Attackers could supply arbitrarily long, non-compliant address strings, which were directly converted into map keys. Go's runtime implements map buckets that do not shrink dynamically; storing excessively long garbage keys caused significant memory amplification and heap fragmentation that could not be recovered by the garbage collector.

Code Analysis

To understand the precise code-level flaw, we examine the teardown function handleClientDelete as it existed before the patch:

// Vulnerable implementation
func (h *SocketHub) handleClientDelete(c *client) {
	delete(h.blockSubscription, c)
	delete(h.transactionSubscription, c)
	c.close()
	for _, clients := range h.addressSubscription {
		for cl := range clients {
			if cl == c {
				delete(clients, c)
			}
		}
	}
}

In this implementation, the nested inner map clients is iterated, and the target client c is deleted. However, the outer key in h.addressSubscription is never evaluated. If clients becomes empty (i.e., no other active clients are subscribed to that address), the address key remains in the parent map, referencing an empty map allocation.

This architecture is fixed in version 1.7.20 by introducing explicit cleanups on the outer map when the inner map's length reaches zero, alongside input string length constraints. The revised teardown logic performs the following operations:

// Patched implementation
func (h *SocketHub) handleClientDelete(c *client) {
	delete(h.blockSubscription, c)
	delete(h.transactionSubscription, c)
	c.close()
	for addr, clients := range h.addressSubscription {
		delete(clients, c)
		if len(clients) == 0 {
			delete(h.addressSubscription, addr)
		}
	}
	delete(h.clientAddresses, c)
}

By deleting addr from h.addressSubscription when len(clients) == 0, the parent map is successfully pruned, allowing the Go runtime's garbage collector to reclaim both the key string and the map bucket resources.

Exploitation Methodology

Exploitation of these vulnerabilities does not require authentication or complex cryptographic negotiation. A remote attacker can target the /subscribe endpoint directly over standard HTTP/HTTPS ports. The most straightforward vector involves an Out-of-Memory (OOM) attack via a single oversized WebSocket frame. By initiating a WebSocket handshake and subsequently transmitting a text frame containing a JSON subscription payload with highly inflated elements, the attacker forces the node to allocate a matching buffer size, exhausting physical memory.

Alternatively, an attacker can exploit the connection management failure. Because WebSocket upgrades bypass standard Gin connection-limiting middleware, an attacker can launch a slow-exhaustion attack by establishing thousands of concurrent TCP connections, upgrading them to WebSockets, and holding them open. This rapidly consumes file descriptors and initiates thousands of concurrent goroutines, halting the network thread of the validator node.

Finally, the memory leak vector (CWE-401) can be exploited dynamically over an extended period. An attacker can programmatically connect, subscribe to thousands of randomized, non-existent address strings, disconnect, and repeat. Since each disconnected session leaves empty keys behind, the node's resident set size (RSS) memory increases monotonically until the operating system's OOM killer terminates the validator daemon.

Impact Assessment

The impact of CVE-2026-86065 is classified as High (CVSS Base Score: 7.5). The primary impact is on availability, as successful exploitation results in a complete process crash or complete unresponsiveness of the target node. In the context of the Klever blockchain, if validator nodes are targeted, this can result in missed blocks, loss of staking rewards, and potential disruption to the consensus layer of the network.

Because the WebSocket endpoint is typically exposed publicly to allow block explorers, wallets, and dApps to receive real-time updates, the vulnerability can be reached by any entity with network access to the API port. No privileges are required, and the attack complexity is extremely low, requiring no prior knowledge of state or session variables.

There is no impact on confidentiality or integrity, as the vulnerability does not permit remote code execution or unauthorized access to sensitive cryptographic keys. However, the operational impact on node infrastructure makes remediation a critical priority for all network operators running affected versions.

Remediation & Mitigation

The primary remediation path is upgrading the klever-go daemon to version 1.7.20 or later. This release introduces comprehensive structural safeguards, including a max message size limit on WebSocket frames, global and per-IP connection limits, and correct map key garbage collection on client disconnects.

If an immediate upgrade is not feasible, operators should apply temporary network-level mitigations. This includes implementing a reverse proxy (such as Nginx, HAProxy, or Cloudflare) in front of the API port. The reverse proxy should be configured to limit the maximum allowed body size for WebSocket upgrades, enforce rate limiting on connections, and restrict the absolute number of concurrent open connections per client IP address.

> [!NOTE] > Restricting access to the /subscribe endpoint via firewall rules or firewall-level IP whitelisting is highly recommended for internal nodes or private validators that do not require public WebSocket exposure.

Fix Analysis (1)

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

klever-go validator nodesklever-go observer nodes

Affected Versions Detail

Product
Affected Versions
Fixed Version
klever-go
klever-io
< 1.7.201.7.20
AttributeDetail
CWE IDCWE-770
Attack VectorNetwork (Unauthenticated)
CVSS v3.17.5 (High)
Exploit StatusNone (Theoretical, except regression tests)
KEV StatusNot listed
RemediationUpgrade to v1.7.20

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-770
Allocation of Resources Without Limits or Throttling

The software allocates resources without limits, throttling, or explicit accounting, which allows remote actors to consume excessive resources.

References & Sources

  • [1]GitHub Security Advisory GHSA-4fwh-wrm6-97xm
  • [2]Klever-Go Patch Commit

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

•9 minutes ago•CVE-2026-56669
7.5

CVE-2026-56669: Remote Denial of Service via Algorithmic Complexity and Interpretation Conflict in Elysia

CVE-2026-56669 is a high-severity vulnerability in the Elysia web framework (ElysiaJS) that combines Inefficient Algorithmic Complexity (CWE-407) and an Interpretation Conflict (CWE-436). It allows remote, unauthenticated attackers to cause a complete Denial of Service (DoS) via CPU resource exhaustion using specially crafted multipart or urlencoded payloads.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 2 hours ago•CVE-2026-82405
8.7

CVE-2026-82405: Incorrect Authorization leading to Account Takeover in klever-go

A critical incorrect authorization vulnerability (CWE-863) exists in the Go implementation of the Klever blockchain protocol (klever-go) prior to version 1.7.20. The vulnerability allows an attacker to completely replace a target account's permission set by manipulating the RecipientAddr parameter in a VM built-in function, leading to total account takeover.

Amit Schendel
Amit Schendel
7 views•5 min read
•about 4 hours ago•CVE-2026-63000
6.4

CVE-2026-63000: Cross-Site Request Forgery in REDAXO CMS Package Update API

A Cross-Site Request Forgery (CSRF) vulnerability in REDAXO CMS prior to version 5.21.2 allows unauthenticated remote attackers to trigger unauthorized package updates by exploiting an insecure default configuration in the base API class.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 5 hours ago•CVE-2026-85724
9.6

CVE-2026-85724: Pattern-ACL Wildcard Injection & Cross-Tenant Authorization Bypass in Moquette MQTT Broker

CVE-2026-85724 is a critical vulnerability in the Moquette MQTT broker (versions prior to 0.18.1) where unvalidated substitution of client identifiers and usernames into pattern-based Access Control Lists (ACLs) permits remote authenticated attackers to bypass multi-tenant boundaries and trigger a Denial of Service.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 6 hours ago•CVE-2026-88974
5.4

CVE-2026-88974: Incorrect Authorization in WPGraphQL updatePost Mutation

CVE-2026-88974 is an incorrect authorization vulnerability in the WPGraphQL plugin for WordPress. Due to a failure to perform object-level capability checks or validate status-transition requirements in the updatePost mutation handler, authenticated Contributor-level users can publish their own draft posts without editorial approval or modify their previously published posts.

Amit Schendel
Amit Schendel
9 views•7 min read
•about 7 hours ago•CVE-2026-73858
5.3

CVE-2026-73858: Server-Side Twig Template Injection in Solspace Freeform for Craft CMS

A technical analysis of CVE-2026-73858 / GHSA-gxrg-x694-283w, a server-side template injection vulnerability in the Solspace Freeform plugin for Craft CMS. The vulnerability permits unauthenticated users to trigger dynamic Twig evaluation of input fields during form validation re-rendering, causing local directory path disclosure and PHP runtime information exposure.

Alon Barad
Alon Barad
8 views•6 min read