Governance Notice: Unverified Proposal on Moonriver (MIP-R39) ⚠️

After seeing the abnormal proposal process we have analyzed the proposing address, calldata and all contracts involved. This proposal is clearly an attack, the proposal contract that will get ownership of the markets in case this proposal gets executed already includes the transactions necessary to exploit them.

The voting power acquisition clearly shows that the attacker has a very clear (and very profitable) plan to execute here. Either governance or the guardian stops this, or over $1M will be lost from funds allocated to those markets.

Blockful is a governance security company, below is our report of the situation. We hope this is helpful and are available on telegram @zeugh or @alextnetto to support further.

Governance Attack Report: Moonwell Proposal #74

Date: March 25, 2026 | Network: Moonriver | Status: Active, voting ends March 27 at 10:28 UTC

Summary

An attacker bought 40.17M MFAM tokens on SolarBeam DEX for 1,600 MOVR (approximately $1,808 at current prices), created a fraudulent governance proposal, and voted it past quorum. The whole operation took 11 minutes.

The proposal, titled “MIP-R39: Protocol Recovery - Admin Migration” (spoofing the legitimate proposal #73), would transfer admin control of all 7 lending markets, the Comptroller, and the Oracle to the attacker’s contract. Once admin, the contract can drain all market funds.

Current vote tally: 41.57M FOR, 0 AGAINST. Quorum of 40M is met. There are approximately $1.08M in drainable funds across the protocol.

The cancel function cannot stop this proposal. The only reliable defenses are defeating the vote or using the Break Glass Guardian, a 2-of-3 multisig that can bypass the timelock and neutralize the attack immediately.

Attack Timeline

All times UTC, March 24, 2026.

10:16:30, Block 15,616,557: Funding

A hot wallet (0x88baeb35...37f8) sends 1,682 MOVR to the deployer (0xe62da344...736d).

Transaction: 0xccb0ce74...5700

10:23:48, Block 15,616,623: Contract deployment

The deployer creates the attack contract at 0x18275952...e1B4. It contains 16,521 bytes of purpose-built bytecode with hardcoded proposal calldata, drain logic, and cash-out functions.

Transaction: 0xf95f93d5...c006

10:24:24, Block 15,616,629: Token acquisition and delegation

In a single atomic transaction, the contract wraps 1,600 MOVR into WMOVR, swaps it on SolarBeam for 40,170,745.69 MFAM, and self-delegates all tokens. The pool went from 2,247 WMOVR / 96.76M MFAM to 3,847 WMOVR / 56.59M MFAM. No intervention window existed between token purchase and delegation.

Transaction: 0xe03be433...e450

10:27:36, Block 15,616,661: Proposal creation

Proposal #74 is created with 9 actions: _setPendingAdmin(attacker) on all 7 markets and the Comptroller, plus setAdmin(attacker) on the Oracle. The title “MIP-R39: Protocol Recovery - Admin Migration” was chosen to look like a continuation of the legitimate proposal #73.

Transaction: 0xd701a0d2...b066

10:28:36: Voting opens

The 60-second voting delay elapses. Voting period is 3 days, ending March 27, 2026 at 10:28:36 UTC.

10:32:00, Block 15,616,695: Attacker votes

The contract calls castVote(74, 0) where 0 means Yes. The attacker’s 40.17M MFAM exceeds quorum of 40M. An additional 1.4M MFAM was voted For by at least one other address, bringing the total to 41.57M. Zero opposition.

Transaction: 0xe4c4a6f1...4ef

Voting Rights

The governor contract sums voting power from three sources:

Source Contract Description
MFAM token 0xBb8d88bc...a58F1 Direct token holdings, must be delegated. Total supply: 1B.
Distributor 0x8568a675...cfab1 Unvested MFAM from the token sale vesting contract.
Safety Module (stkMFAM) 0xcd76e63f...da3a Staked MFAM.

The attacker’s votes came entirely from direct MFAM holdings. The proposal can still be affected by votes from any of these three sources. Vote encoding is reversed from standard GovernorBravo: 0 = Yes, 1 = No, 2 = Abstain. To defeat the proposal, Against votes must exceed For votes (quorum is already met).

Funds at Risk

Prices from CoinGecko, March 25, 2026 at 00:12 UTC.

Market Address Cash USD Value
mUSDC 0xd067...BFA8 269,337.65 USDC $269,308
mFRAX 0x93Ef...e9D 227,934.99 FRAX $225,996
mETH 0x6503...7aE 102.53 ETH $221,334
mMOVR 0x6a1A...8F1 123,547.58 MOVR $139,609
mUSDT 0x3691...BF21 123,796.42 USDT $123,741
mWBTC 0x6E74...4D90 1.01 WBTC $71,673
mxcKSM 0xa0d1...8e0f 6,315.26 xcKSM $28,229
Total $1,079,891

Attack cost: 1,600 MOVR at $1.13 = $1,808. Profit: 597x.

Admin on all 7 markets confirmed as the Timelock. The most efficient drain path is a single _setComptroller() call on all markets to a malicious comptroller that allows unlimited uncollateralized borrowing.

Response Plan

Deadlines

Now to March 27, 10:28 UTC: Voting active, approximately 46 hours remain.
March 27, ~10:30 UTC: If the proposal passes, the attacker can call queue(). This starts the 24-hour timelock.
March 28, ~10:30 UTC: Earliest execution. The attacker can drain all funds.

The Break Glass Guardian can act at any point, before, during, or after the vote.

Option 1: Break Glass Guardian (safest)

The Break Glass Guardian is a 2-of-3 Gnosis Safe (0x5ded9d10...8db) that can bypass the timelock via fastTrackExecuteTransaction.

Signers (need 2 of 3):

Signer Address
Signer 1 0x8c48d0dd4074f4839fcc20ea6715e2982001ed7a
Signer 2 0xcca82a517870b00fb31bc93a38025f042b5cc2ee
Signer 3 0x2228375a0bd358fa2d04aab70cf057cff7c863c7

What to execute:

  1. Call __executeBreakGlassOnCompound with all 7 market addresses plus the Comptroller. This sets pending admin to the governance return address.
  2. Call __executeBreakGlassOnSetAdmin with the Oracle address.
  3. Call __executeCompoundAcceptAdminOnContract to accept admin on all contracts.

Once executed, the Timelock loses admin, and the attacker’s proposal becomes a no-op even if it passes and executes.

Open question for the Moonwell core team: Does the team still have access to at least 2 of the 3 Break Glass Guardian signer keys? And separately, does the team control the governance return address multisig (also a Gnosis Safe)? If admin transfers to the governance return address but nobody controls it, the protocol contracts become permanently locked.

Option 2: Vote against

Requires mobilizing more than 41.57M MFAM in No votes before March 27, 10:28 UTC. Voting power is snapshotted at the proposal’s start block (15,616,694), so buying more MFAM now would not increase anyone’s votes on this proposal. The real concern is the attacker or allies already holding delegated MFAM, Distributor allocations, or staked stkMFAM at that block that have not yet been voted.

The Prop73 proposer (0xb5235bb9ec03353da455d742dd09cbc3817fe3fa) has at least 48.8M voting power at the snapshot block, entirely from staked MFAM in the Safety Module.

One castVote(74, 1) call from that address defeats the proposal outright. No coordination needed — the VP is frozen, so the attacker can’t counter by buying more. The risk of other related wallets voting in favor of the attack remains, so more research is necessary before confirming the safety on this strategy.

Option 3: Cancel (not possible)

The cancel function requires the proposer’s voting power to drop below 500,000 MFAM. The attacker holds 40.17M MFAM locked in the contract with no way to reduce it externally.

Monitoring

Things to watch:

  • The attacker calling queue() after March 27, 10:28 UTC
  • Other wallets that held delegated MFAM, Distributor allocations, or stkMFAM at block 15,616,694 that have not yet voted (potential hidden voting power aligned with the attacker)
  • New proposals from the attacker
  • Break Glass Guardian transaction activity
  • New votes cast on Proposal #74

Key Addresses

Entity Address
Governor 0x2BE2e230e89c59c8E20E633C524AD2De246e7370
Timelock (24h delay) 0x04e6322D196E0E4cCBb2610dd8B8f2871E160bd7
MFAM Token 0xBb8d88bcD9749636BC4D2bE22aaC4Bb3B01A58F1
Break Glass Guardian 0x5ded9d1025a158554ab19540ae83182d890bb8db
Governance Return Address 0x017efffd8abea3b1891f81e7c0e5166458b3584d
Comptroller 0x0b7a0EAA884849c6Af7a129e899536dDDcA4905E
Oracle 0x892bE716Dcf0A6199677F355f45ba8CC123BAF60
Attack Contract 0x18275952D3EA09D80DbE446D2cBA085E01e681B4
Deployer 0xe62da344872b1a5644ee521001da6677a7ad736d
Funder 0x88baeb35f73c72d0a4554d36851c1a76403937f8

Testing

We are currently checking for all delegated voting power in the 3 voting power contracts, to estimate the safety of winning the vote vs the likelihood of hidden power held by the attacker.
We are also testing the “break glass defense” in a local fork to guarantee all works as intended.

3 Likes