---
id: "CVE-2026-82405"
kind: "vulnerability"
aliases: ["CVE-2026-82405", "GHSA-97cv-x867-6xhm", "GO-2026-6582"]
title: "Klever-Go Account takeover: `kleverUpdateAccountPermission` authorizes on attacker-controlled `RecipientAddr` instead of the authenticated caller in github.com/klever-io/klever-go"
severity: "high"
cvss: 8.7
epss: 0.0026
exploited: false
status: "open"
category: "package"
products: [{"name": "github.com/klever-io/klever-go", "fixed": ["1.7.20"], "affected": "< 1.7.20", "ecosystem": "go"}]
ecosystems: ["go"]
tags: ["blockchain", "go", "klever", "klever-go", "package"]
not_affected_if: ["accounts-without-stored-permissions", "native-transaction-path-only"]
published_at: "2026-09-23T20:17:16+00:00"
first_seen_at: "2026-10-23T19:13:08+00:00"
updated_at: "2026-10-23T19:51:42+00:00"
sources: [{"source": "govuln", "url": "https://pkg.go.dev/vuln/GO-2026-6582", "first_seen_at": "2026-10-23T19:13:08+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-82405", "first_seen_at": "2026-10-23T19:13:43+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-82405", "first_seen_at": "2026-10-23T19:35:23+00:00"}]
---

# Klever-Go Account takeover: `kleverUpdateAccountPermission` authorizes on attacker-controlled `RecipientAddr` instead of the authenticated caller in github.com/klever-io/klever-go

Klever-Go, the Go implementation of the Klever blockchain protocol, has an authorization bug in its KleverUpdateAccountPermission built-in: it checks the attacker-controlled RecipientAddr instead of the authenticated CallerAddr. An attacker-controlled contract can replace a victim account's entire permission set without the victim's key, enabling asset theft or permanent lockout.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- go:github.com/klever-io/klever-go affected < 1.7.20 fixed 1.7.20

## How to check

Check whether go.mod pins github.com/klever-io/klever-go below 1.7.20 (grep klever-go go.mod).

## Fix

Upgrade github.com/klever-io/klever-go to 1.7.20 or later.

## Timeline

- 2026-10-23T19:13:08+00:00 govuln https://pkg.go.dev/vuln/GO-2026-6582
- 2026-10-23T19:13:43+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-82405
- 2026-10-23T19:35:23+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-82405

## From the sources

Klever-Go is the Go implementation of the Klever blockchain protocol. Prior to 1.7.20, the KleverUpdateAccountPermission built-in authorizes replacement of a target account's permissions by checking attacker-controlled vmInput.RecipientAddr instead of authenticated vmInput.CallerAddr. An attacker-controlled contract can choose a victim account with configured permissions as RecipientAddr, and contractHasValidPermission can accept the victim's default self-signer as authorization. UpdatePermission can then replace the victim's entire permission set with attacker-supplied Owner permissions, enabling asset theft or permanent lockout without a victim key or signature. Accounts without stored permissions and the native transaction path are not affected. This issue is fixed in version 1.7.20.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
