Skip to content

v2.18.1

Choose a tag to compare

@github-actions github-actions released this 06 Sep 17:16
· 190 commits to main since this release
ae93893

v2.18.1

Nibiru v2.18.1 repairs a cross-VM authorization bug in delegated EVM calls. It also adds consensus-enforced restrictions for incident accounts and a mainnet upgrade handler to recover remaining assets from configured incident accounts.

This release responds to the FunToken pool-drain incident. It is separate from the Wasmer sandbox vulnerability addressed by the later v2.19, v2.20, and runtime repair work.

1 - Main highlights

  • Mutable FunToken and Wasm precompiles use authority derived from the current EVM call frame. Delegation cannot borrow authority from a caller across an intervening ordinary call.
  • Direct router delegation and proxy-to-implementation delegation remain supported.
  • Incident-account restrictions apply during transaction admission and block execution, so enforcement does not depend on one node's RPC policy.
  • The mainnet upgrade handler processes configured Bank and ERC20 recovery operations independently and records failures without discarding successful work.
  • The release also improves passkey account creation and adds regression evidence for a separate inter-block cache race.

2 - Why delegated-call authority needed repair

FunToken precompiles move assets between ERC20 balances and Cosmos Bank balances. Their authorization therefore has to identify the account the current call frame may act for.

The old delegated-precompile path could retain an earlier caller's identity across an ordinary contract call. A callback could then reach a mutable precompile through delegation and act for an account whose authority it should no longer possess.

The repair makes that boundary explicit:

root call       -> transaction sender
ordinary CALL   -> authority of the called contract
DELEGATECALL    -> preserves the current frame's authority

Nibiru pins geth fork version v1.14.13-nibiru.5, which supplies these call-frame rules. The precompiles consume the resolved authority rather than reconstructing it from a parent caller. This preserves legitimate proxy and router patterns while preventing delegation from reaching back across an ordinary call boundary. PR #2748

3 - Containment and recovery

Repairing authorization prevents the same identity confusion from authorizing another transfer. The release also restricts configured incident accounts in the Cosmos and EVM transaction paths. These checks run in both CheckTx and DeliverTx, making them part of validator-enforced behavior.

The mainnet upgrade handler attempts to transfer remaining Bank coins and configured ERC20 balances from incident accounts to designated recovery recipients. Each source and token is handled independently. A failed operation emits a failure event and does not stop the remaining operations or normal module migrations.

This describes what the handler can recover. It does not establish that all stolen assets remained on Nibiru or that every recovery operation succeeded. Public upgrade implementation

4 - Other release work

Passkey account creation supplies an explicit bounded gas limit instead of relying on an estimation step that could fail before the transaction was broadcast. This addresses a first-connect failure where no account bytecode could appear because account creation never reached the chain. PR #2735

The release source also includes tests reproducing stale reads in the inter-block store cache. Those tests document a separate consensus failure mechanism; their inclusion is not a claim that this release repairs that cache race. PR #2727