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:
- Call
__executeBreakGlassOnCompoundwith all 7 market addresses plus the Comptroller. This sets pending admin to the governance return address. - Call
__executeBreakGlassOnSetAdminwith the Oracle address. - Call
__executeCompoundAcceptAdminOnContractto 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.