Executive brief
Klever-Go's consensus layer uses BLS multi-signatures to finalize blocks, but the validator registration process does not validate submitted BLS public keys for mathematical correctness. An attacker can register a validator with a malformed public key for the cost of the minimum stake, causing the network to fail block production whenever that validator is selected for a consensus group. In networks with small validator sets, this can halt the entire chain; in larger networks, it causes ongoing slot misses and throughput degradation.
Technical details
The vulnerability stems from missing cryptographic validation in the BLS validator registration flow. The `validators.Register` function accepts a 96-byte BLS public key without verifying that it is a valid point on the BLS12-381 curve, a member of the prime-order subgroup, or non-zero. The `CheckPublicKeyValid` function performs these checks at genesis time but is never called during runtime validator registration or updates. When an attacker's malformed key is deserialized during consensus group slot initialization, the `MultiSigner().Reset()` call deterministically fails in the underlying herumi BLS library, triggering `SetSlotCanceled(true)` and causing the entire block production round to be missed. The attack requires no proof-of-possession, no fork-dependent validation, and can be repeated by any party with enough stake to register a validator.
Affected products
- Klever Klever-Go <unknown
Timeline
- 2026-09-23: disclosed: Advisory published