Authorization Bypass in Klever-Go KleverUpdateAccountPermission Built-in
An authorization flaw in the Klever-Go VM allows attackers to execute an account takeover by leveraging an incorrectly validated RecipientAddr parameter during indirect smart contract calls.
What's new
- 1. added detection rule: Detect Unauthenticated WebSocket Log Profile Manipulation Sep 23, 19:57 via ghsa
A critical authorization vulnerability (CVE-2026-82405) exists in the KleverUpdateAccountPermission built-in function within the klever-go repository, affecting versions 1.7.19 and earlier. The vulnerability occurs because the function validates permissions against the vmInput.RecipientAddr field rather than the authenticated vmInput.CallerAddr.
In the context of an indirect smart contract call via ExecuteOnDestContext, the RecipientAddr is determined by the destination contract's chosen dest argument, which an attacker can manipulate. Because most accounts are configured as their own signers by default, the permission check incorrectly returns true when the attacker specifies the target account as the recipient. This allows an attacker to overwrite the entire permission set of any target account with their own malicious keys, resulting in a full account takeover. The issue is restricted to calls originating from smart contracts, as the native transaction path correctly validates senders.
Attack Chain
- Attacker deploys a malicious smart contract to the blockchain.
- Attacker initiates an
ExecuteOnDestContextcall from their malicious contract. - Attacker sets the
destargument to the victim account address (V). - The VM dispatch mechanism
prepareIndirectContractCallInputsetsRecipientAddrto V andCallerAddrto the attacker's contract. - The
KleverUpdateAccountPermissionhandler receives the call and executescontractHasValidPermissionusing the attacker-controlledRecipientAddr(V). - The check compares V against V's own signers, which inherently grants permission for the Owner type.
- The VM proceeds to
UpdatePermission, replacing V's original account permissions with attacker-supplied signers. - Attacker gains full control over the victim account, enabling asset theft or account lock.
Impact
Successful exploitation results in the complete compromise of any account with configured permissions on the Klever blockchain. Victims include multisig and advanced-permission accounts. Attackers can evict original owners and gain full control over all operations associated with the victim's address, leading to irreversible loss of funds or total account lockout.
Recommendation
Patch the KleverUpdateAccountPermission handler to validate authorization against vmInput.CallerAddr instead of vmInput.RecipientAddr.
Update klever-go to a version containing the fix for CVE-2026-82405.
Review all smart contract built-in function handlers in the klever-go codebase for similar authorization discrepancies between RecipientAddr and CallerAddr.
Implement logic to require the target account address in Arguments[0] to match the authenticated caller or a legitimately authorized entity.
Immediate actions
Upgrade klever-go to the patched version as defined in the vendor advisory
Mitigations
Patch code to validate caller address instead of recipient address
CVE-2026-82405
Detection coverage 1
Detect Unauthenticated WebSocket Log Profile Manipulation
highDetects exploitation of CVE-2026-86064 where an unauthenticated client sends a logging profile mutation payload to the /log endpoint.
Detection queries are available on the platform. Get full rules →