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-82405

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

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 23, 2026·5 min read·7 visits

Executive Summary (TL;DR)

An incorrect authorization flaw in klever-go < 1.7.20 allows attackers to overwrite any account's permission set using a malicious contract call, resulting in unauthorized account takeover.

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.

Vulnerability Overview

The Go implementation of the Klever blockchain protocol (klever-go) contains a critical incorrect authorization vulnerability within its Virtual Machine execution layer. The flaw resides specifically in the KleverUpdateAccountPermission VM built-in function. This function is responsible for managing and modifying cryptographic authorization structures and permissions for user accounts on the blockchain network.

This security vulnerability belongs to the Incorrect Authorization class (CWE-863). During VM execution, the system fails to correctly verify whether the entity invoking the permission modification has the required cryptographic authority to perform the action. Instead, the validation checks rely on an attacker-controlled variable rather than the authenticated transaction caller.

Successful exploitation of this flaw allows an unauthenticated remote attacker to completely overwrite the permission structure of a target wallet. This enables a complete account takeover, leading to the unauthorized transfer of assets and permanent lockout of the legitimate owner. The vulnerability exposes a critical attack surface in the protocol's smart contract execution environment.

Root Cause Analysis

The root cause of the vulnerability resides within the authorization check in core/kapp/builtInFunctions/kleverUpdateAccountPermission.go. When a contract triggers the ProcessBuiltinFunction method, the virtual machine loads the target account data into memory. It then invokes the internal helper method contractHasValidPermission to determine whether the transaction execution is authorized.

This helper method validates authorization by comparing registered signers in the target account with the vmInput.RecipientAddr parameter. However, in the context of indirect contract calls, the calling contract controls both the parameters of the call and the value of vmInput.RecipientAddr. Because of this design choice, the target value is entirely under the control of the attacker's execution payload.

By setting vmInput.RecipientAddr to match the target victim's account address, the attacker forces the comparison bytes.Equal(signer.Address, recipientAddr) to evaluate as true. The validation checks identify the victim's self-signing entry and accept its weight as valid authorization. The virtual machine then proceeds to execute the state change without verifying that the actual transaction caller has any authorization over the victim account.

Code Analysis

Prior to the patch, the vulnerable helper function evaluated permissions using the uncontrolled recipient address as shown below:

func (e *kleverUpdateAccountPermission) contractHasValidPermission(permissions []*state.Permission, recipientAddr []byte) bool {
    for _, permission := range permissions {
        for _, signer := range permission.Signers {
            if !bytes.Equal(signer.Address, recipientAddr) {
                continue
            }
            if signer.Weight >= permission.Threshold &&
                permission.CheckPermissionGrantedForContracts(transaction.TXContract_UpdateAccountPermissionContractType) {
                return true
            }
        }
    }
    return false
}

The security patch resolved this flaw in commit c58740eb74d7ee8f07db1e18a7d6214b5559ba32 by removing the vulnerable helper and passing the authenticated CallerAddr directly to the KApp core:

// Updated call structure passing caller address explicitly
resultCode, err := e.kappController.GetAccountsKApp().UpdatePermission(vmInput.CallerAddr, address, contract)

The core KApp function signature was hardened to ensure that permissions can only be updated if the cryptographically verified authorizer matches the target account, or is explicitly registered as an authorized delegate in the permission state:

func (a *accountsKapp) UpdatePermission(authorizer []byte, target []byte, tc *transaction.UpdateAccountPermissionContract) (transaction.Transaction_TXResultCode, error) {
    ...
    if !bytes.Equal(authorizer, target) && !authorizerCanUpdatePermission(ownerAcc.GetPermissions(), authorizer) {
        ctx.Receipts().AddError(ctx.ContractID(), common.ErrFieldInvalidPermission, common.ErrNoPermission.Error())
        return transaction.Transaction_ParameterInvalid, common.ErrNoPermission
    }
    ...
}

Exploitation Methodology

To execute this attack, an adversary deploys a malicious smart contract on the target network. This smart contract is configured to trigger the KleverUpdateAccountPermission built-in function via an indirect call. The attack payload specifies the target victim's wallet address as the subject of the permission change.

The exploit sequence operates as follows:

The malicious contract sets the RecipientAddr parameter of the indirect call payload to the victim's account address. When the built-in function processes this input, it locates the victim's own self-signing key within their permission structure. Because the addresses match, the validator confirms that the self-signer key meets the threshold and approves the modification, replacing the legitimate key with the attacker's public key.

Impact Assessment

The impact of CVE-2026-82405 is critical to the security and integrity of the affected blockchain network. Successful exploitation allows an attacker to seize absolute control of any account on the network that has previously configured custom permissions. Legitimate users are locked out of their accounts because their active keys are deleted from the account's state.

With administrative access established, the attacker can transfer all tokens, interact with contracts as the victim, and modify secondary security settings. This bypasses multi-signature configurations entirely, rendering advanced account protection mechanisms ineffective. This poses a severe threat to decentralized organizations, validators, and individual participants.

Remediation and Mitigation

The primary remediation for this vulnerability is to upgrade all klever-go nodes, validators, and client software to version 1.7.20 or later. This release contains the formal patch that replaces the vulnerable validation checks with a robust identity check. Users should review their account permission configurations to ensure no unexpected changes occurred prior to patching.

In environments where immediate software upgrades are not feasible, network administrators should implement logging and monitoring controls to capture and analyze call parameters to the UpdateAccountPermission built-in contract. Any pattern of contract-initiated permission updates targeting separate user addresses should be treated as a highly critical security incident.

Official Patches

klever-ioOfficial Security Patch

Fix Analysis (1)

Technical Appendix

CVSS Score
8.7/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Affected Systems

klever-go

Affected Versions Detail

Product
Affected Versions
Fixed Version
klever-go
klever-io
< 1.7.201.7.20
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS v4.0 Score8.7 (High)
Exploit StatusPoC Available
CISA KEV StatusNot Listed
Remediation StatusPatched in v1.7.20

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The product performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly associate the authorization with the identity of the actor.

Known Exploits & Detection

GitHubFunctional Unit Test Proof of Concept demonstrating account takeover

Vulnerability Timeline

Vulnerability resolved by developers in commit c58740eb74d7ee8f07db1e18a7d6214b5559ba32
2026-06-18
Proof of Concept code published by security researchers
2026-07-11
Official publication and public disclosure of CVE-2026-82405
2026-09-23

References & Sources

  • [1]GHSA-97cv-x867-6xhm Security Advisory
  • [2]Fix Commit on GitHub
  • [3]Technical Proof of Concept
  • [4]Klever Go v1.7.20 Release Tag

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

•about 1 hour ago•CVE-2026-86065
7.5

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

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.

Alon Barad
Alon Barad
5 views•7 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
•about 8 hours ago•CVE-2026-54892
8.7

CVE-2026-54892: Algorithmic Complexity Denial of Service in Plug Query Decoder

An algorithmic complexity vulnerability (CWE-407) in the query decoder of the Elixir Plug library (CVE-2026-54892) allows unauthenticated remote attackers to trigger scheduler starvation and denial of service by transmitting deeply nested brackets in query parameters or URL-encoded post bodies.

Alon Barad
Alon Barad
9 views•6 min read