CVE-2026-46403 Overview
CVE-2026-46403 affects Klever-Go, the Go implementation of the Klever blockchain protocol. The Klever Virtual Machine (KVM) exposes ExecuteReadOnlyWithTypedArguments as a read-only execution mechanism. However, the indirect contract delete and upgrade paths fail to reject execution when runtime.ReadOnly() returns true. A contract reached through read-only execution can invoke the production delete hook against a target contract it owns. The delete path appends the target address to vmOutput.DeletedAccounts, which the smart contract processor later applies to chain state. This breaks the isolation boundary that read-only calls are supposed to guarantee. The issue is fixed in version 1.7.17.
Critical Impact
A callee reached through a read-only KVM invocation can trigger contract deletion and upgrade operations, allowing state-changing side effects from calls that should be side-effect free.
Affected Products
- Klever-Go versions prior to 1.7.17
- Klever Virtual Machine (KVM) read-only execution subsystem
- Klever blockchain smart contract processor
Discovery Timeline
- 2026-07-21 - CVE-2026-46403 published to NVD
- 2026-07-23 - Last updated in NVD database
Technical Details for CVE-2026-46403
Vulnerability Analysis
The vulnerability is a protection mechanism failure [CWE-693] in the KVM host-core execution path. The ExecuteReadOnlyWithTypedArguments hook saves the previous read-only state, sets runtime.SetReadOnly(true), executes the destination context, and then restores the previous state. This mechanism relies on individual host-core hooks to check runtime.ReadOnly() before performing state-changing operations. The delete and upgrade paths never consulted that flag, so any contract executed under a read-only frame could still emit DeletedAccounts entries and upgrade instructions. The output context then merges these fields into the caller output, and the smart contract processor applies them to chain state after VM execution completes.
Root Cause
Read-only mode is applied as runtime state but is not enforced by the state-changing delete and upgrade host-core paths. The invariant that a read-only frame must produce a side-effect-free vmOutput was assumed rather than checked at each mutation site. Contract owners retained authority to call the production delete hook even when the current execution frame was flagged read-only.
Attack Vector
An attacker deploys or controls a contract that is invoked through ExecuteReadOnlyWithTypedArguments from a caller expecting a pure inspection. During that invocation, the attacker-controlled callee calls the delete hook against a contract it owns. The delete instruction is captured in vmOutput.DeletedAccounts and propagates up to the caller output. When the smart contract processor commits the VM output, the target account is removed from chain state. The same class of bypass applies to upgrade operations and other VM output fields that later mutate state.
// Patch context from fixed release (v1.7.17)
// New sentinel errors introduced alongside the read-only enforcement fix
var ErrTooManyItemsInBatch = errors.New("too many items in batch")
var ErrDecompressionTooLarge = errors.New("decompressed payload exceeds maximum allowed size")
var ErrDecompressedSizeMismatch = errors.New("decompressed payload size does not match advertised data size")
// Fixed behavior (described): delete and upgrade host-core paths now check
// runtime.ReadOnly() and abort execution before appending to
// vmOutput.DeletedAccounts or emitting upgrade instructions.
Source: Klever-Go Fix Commit
Detection Methods for CVE-2026-46403
Indicators of Compromise
- Unexpected entries in vmOutput.DeletedAccounts originating from transactions whose top-level call is a read-only inspection
- Contract accounts removed from chain state without a corresponding direct delete transaction from the owner
- Upgrade code changes to a contract that were emitted by a callee invoked through ExecuteReadOnlyWithTypedArguments
Detection Strategies
- Audit historical VM output logs for DeletedAccounts and upgrade fields produced by execution frames that entered through the read-only hook
- Correlate deleted contract addresses with the calling contract's ownership graph to detect deletes triggered through indirect read-only paths
- Add regression tests covering delete, upgrade, storage writes, and value transfers under a read-only frame, as introduced in v1.7.17
Monitoring Recommendations
- Alert on node versions below 1.7.17 running in validator or archive roles
- Monitor for anomalous rates of contract deletion or upgrade operations relative to historical baselines
- Track invocations of ExecuteReadOnlyWithTypedArguments where the resulting vmOutput contains any non-empty state-mutation field
How to Mitigate CVE-2026-46403
Immediate Actions Required
- Upgrade all Klever-Go nodes to version 1.7.17 or later
- Review contracts that expose owner-authorized delete or upgrade entry points and confirm callers cannot be reached through read-only execution
- Replay recent VM outputs against the fixed release to identify state changes that would have been rejected under the enforced invariant
Patch Information
The fix is available in Klever-Go v1.7.17. Contract delete and upgrade host-core paths now reject execution when runtime.ReadOnly() is true. The invariant is regression-tested for delete, upgrade, storage writes, value transfers, and any VM output field that can later mutate chain state. See the Klever-Go Security Advisory GHSA-jc6w-wmfc-fh33 and the remediation commit.
Workarounds
- No supported workaround exists short of upgrading to v1.7.17
- As a temporary measure, restrict read-only entry points on deployed contracts to disallow calls into contracts that expose owner-controlled delete or upgrade functions
- Disable or gate ExecuteReadOnlyWithTypedArguments usage in application logic until nodes are patched
# Upgrade Klever-Go node to the fixed release
git fetch --tags
git checkout v1.7.17
go build -o klever-node ./cmd/node
systemctl restart klever-node
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

