Reproduced Exploit
Aragon — EarlyExecution proposals vulnerable to flashloan vote attacks
1. EarlyExecution mode executes a proposal as soon as a YES vote pushes it over the support threshold. 2. If the lock token is flashloanable/flashmintable, an attacker can temporarily lock enough weight to cast that YES vote. 3. Inside the same transaction they unlock and repay the flashloan — no l…
Chain
Other
Category
governance
Date
Jul 2025
Source
AuditVault
EVM Playground
Source-level debugger — step opcodes and Solidity in sync
The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Balances (native / ERC-20 / NFT), Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.
Source & credit. Reproduction of a public audit finding curated by AuditVault — the original finding: 62256-proposals-created-with-voting-mode-earlyexecution-are-vulner. Standalone Foundry PoC and full write-up: 62256-proposals-created-with-voting-mode-earlyexecution-are-vulner_exp in the
evm-hack-registrymirror.
Vulnerability classes: vuln/governance/flashloan-vote · trigger/flash-loan · impact/unauthorized-execution
Reproduction: a self-contained Foundry PoC that compiles & runs in an isolated project with only
forge-std— no fork, no RPC, noanvil_state. Full trace: output.txt. PoC: test/62256-proposals-created-with-voting-mode-earlyexecution-are-vulner_exp.sol.
Key info#
| Impact | HIGH — anyone can early-execute an EarlyExecution proposal by flashloaning (or flashminting) lockable tokens, voting YES, unlocking, and repaying in one tx |
| Protocol | Aragon Lock-to-Vote governance plugin |
| Vulnerable code | LockToVotePlugin EarlyExecution path: succeed → _execute in the same vote tx |
| Bug class | Same-block flashloan governance capture |
| Finding | Spearbit — Aragon Security Review July 2025 · #62256 · reporter Om Parikh |
| Report | Aragon-Spearbit-Security-Review-July-2025.pdf |
| Source | AuditVault |
| Status | Audit finding — fixed in PR 26 (EarlyExecution removed). Reproduced here as a standalone local PoC. |
| Compiler | ^0.8.24 (PoC) |
TL;DR#
EarlyExecutionmode executes a proposal as soon as a YES vote pushes it over the support threshold.- If the lock token is flashloanable/flashmintable, an attacker can temporarily lock enough weight to cast that YES vote.
- Inside the same transaction they unlock and repay the flashloan — no lasting stake.
- The proposal action runs (here: drain a 5 REWARD treasury pot to the flash voter).
- HARM: unauthorized early execution + treasury payout with zero lasting lock.
The vulnerable code#
function _vote(...) internal {
// tally YES/NO ...
if (p.mode == VotingMode.EarlyExecution && _hasSucceeded(p)) {
_execute(proposalId); // @> VULN: same-tx early execute after flashloaned YES
// FIX: delay execute to a later block, or remove EarlyExecution (Aragon PR 26)
}
}
Attack shape (finding PoC):
flashloan → lock → lockAndVote(YES) → early execute → unlock → repay
Root cause#
Early execution binds “proposal succeeded” to “execute now” without requiring economic finality of the voting weight. Ephemeral flashloaned weight is enough.
Preconditions#
- Proposal created with
VotingMode.EarlyExecution. - Lock token can be flashloaned or flashminted.
- Attacker can reach the support / min-participation thresholds with temporary weight.
Attack walkthrough#
- Create EarlyExecution proposal:
treasury.payout(voter, 5 ether). - Flashmint 10 lock tokens to the FlashVoter.
lockAndVote(YES, 10e18)— threshold met →_executeruns.- Unlock and repay the flashmint.
- Voter holds 5 REWARD; treasury is empty; locked balance is 0.
Diagrams#
Impact#
- Any EarlyExecution proposal can be force-executed without lasting voter capital.
- DAO actions (transfers, permission grants, upgrades) become flashloan-triggerable.
- Aragon removed EarlyExecution rather than add a same-block delay.
Sources#
- AuditVault finding #62256
- Spearbit Aragon July 2025 report
- Fixed in Aragon PR 26 (EarlyExecution removed)
Taxonomy (AuditVault)#
severity/high·sector/governance·platform/spearbit·trigger/flash-loan- genome: flash-loan-attack · role-bypass · flashloan-callback-auth · proposal-state-check
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 62256-proposals-created-with-voting-mode-earlyexecution-are-vulner_exp (evm-hack-registry mirror).
- AuditVault finding: 62256-proposals-created-with-voting-mode-earlyexecution-are-vulner.
Alerts & third-party analyses
These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.