CVE-2026-53924
nicheMissing dispute-state check in Gardens v2 StreamingEscrow risks escrowed SuperTokens
Gardens v2, a modular DAO governance framework that manages governance pools with streaming payouts, contains a state-check gap in its StreamingEscrow contract: the claim() function correctly blocks withdrawals while an escrow is disputed, but the permissionless syncOutflow() path performs the same excess-balance transfer without any dispute check. After a streaming proposal is challenged, any unprivileged on-chain actor can call syncOutflow() to move escrowed SuperTokens to the proposal beneficiary while the dispute is still pending. If the disputed proposal is later rejected, those transferred tokens cannot be recovered through drainToStrategy(), permanently reducing the pool's escrowed funds. Affected parties are Gardens v2 deployments whose contracts predate the fix commit, since the attack requires no privileges, authentication, or user interaction. No exploitation, public proof-of-concept, or KEV listing is known; EPSS puts 30-day exploitation probability at roughly 0.2%.
What to do: Update Gardens v2 contracts to include commit 0xc9d4e0dacd937364793278180551e59d93cd43f9 or later, which may require contract redeployment or migration for already-deployed pools. In the meantime, administrators of pools with pending disputed streaming proposals should monitor StreamingEscrow for syncOutflow() calls during disputes, since funds moved this way are unrecoverable if the proposal is rejected.
| Gardens v2 governance framework (StreamingEscrow contract) | all deployments prior to commit 0xc9d4e0dacd937364793278180551e59d93cd43f9 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Gardens v2 is a modular governance framework that enables communities to create and manage multiple governance pools with customizable parameters and voting mechanisms. Prior to 0xc9d4e0dacd937364793278180551e59d93cd43f9, StreamingEscrow.claim() correctly rejects withdrawals while an escrow is disputed, but the permissionless syncOutflow() path performs the same excess-balance transfer without checking disputed. After a streaming proposal is challenged, anyone can call syncOutflow() to transfer escrowed SuperTokens to the proposal beneficiary while the dispute is pending. If the proposal is later rejected, those tokens cannot be recovered by drainToStrategy(). This issue has been patched in 0xc9d4e0dacd937364793278180551e59d93cd43f9.
- Weakness
- CWE-284
- Vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
In the news0 stories
No ingested article mentions this CVE yet.