Ad

CVE-2026-46403

MEDIUM CVSS 3.1: 6,3 EPSS 0.34%
Обновлено 23 июля 2026
Klever-Go
Параметр Значение
CVSS 6,3 (MEDIUM)
Тип уязвимости CWE-693
Поставщик Klever-Go
Публичный эксплойт Нет

Klever-Go — это реализация протокола блокчейна Klever на Go. До версии 1.7.17 KVM предоставлял ExecuteReadOnlyWithTypedArguments как механизм выполнения только для чтения. Перехватчик сохраняет предыдущее состояние только для чтения, устанавливает `runtime.SetReadOnly(true)`, выполняет контекст назначения, а затем восстанавливает предыдущее состояние только для чтения.

Однако пути косвенного удаления и обновления контракта не отклоняют выполнение, если `runtime.ReadOnly()` имеет значение true. В результате контракт, достигнутый посредством выполнения только для чтения, может вызвать хук производственного удаления для целевого контракта, которым он владеет. Путь удаления добавляет целевой адрес к vmOutput.DeletedAccounts, контекст вывода объединяет DeletedAccounts с выводом вызывающей стороны, а процессор смарт-контракта позже обрабатывает вывод виртуальной машины, удаляя учетные записи, перечисленные в этом поле.

Основная причина заключается в том, что режим только для чтения применяется как состояние времени выполнения, но не применяется изменяющими состояние путями удаления и обновления ядра хоста. Это нарушает ожидаемую границу изоляции для рабочих процессов, которые полагаются на вызовы только для чтения для проверки другого контракта, не позволяя этому вызываемому объекту создавать выходные данные виртуальной машины, изменяющие состояние. Проблема исправлена ​​в версии 1.7.17.

Пути удаления и обновления контракта к ядру хоста теперь отклоняют выполнение, если `runtime.ReadOnly()` имеет значение true. Инвариант проходит регрессионное тестирование на удаление, обновление, запись в хранилище, передачу значений и любое поле вывода виртуальной машины, которое может позже изменить состояние цепочки.

Показать оригинальное описание (EN)

Klever-Go is the Go implementation of the Klever blockchain protocol. Prior to 1.7.17, KVM exposes `ExecuteReadOnlyWithTypedArguments` as a read-only execution mechanism. The hook saves the previous read-only state, sets `runtime.SetReadOnly(true)`, executes the destination context, and then restores the previous read-only state. However, the indirect contract delete and upgrade paths do not reject execution when `runtime.ReadOnly()` is true. As a result, a contract reached through read-only execution can call the production delete hook for a target contract it owns. The delete path appends the target address to `vmOutput.DeletedAccounts`, the output context merges `DeletedAccounts` into the caller output, and the smart contract processor later processes the VM output by deleting accounts listed in that field. The root cause is that read-only mode is applied as runtime state, but not enforced by the state-changing delete and upgrade host-core paths. This breaks the expected isolation boundary for workflows that rely on read-only calls to inspect another contract without allowing that callee to produce state-changing VM output. The issue is fixed in 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.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Высокая
Сложно эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Нет
Нет утечки данных
Целостность
Высокое
Полная модификация данных
Доступность
Нет
Нет нарушения работы

Строка CVSS v3.1

Тип уязвимости (CWE)