Asymmetry Finance — disclosed vulnerability reports and payouts
Every publicly disclosed and closed bug bounty report we hold for Asymmetry Finance, with our own summary of each finding and a link to the original disclosure.
- Reports indexed
- 30
- Total paid
- $0
- Critical
- 0
- Largest payout
- $0
This page collects the 30 closed, publicly disclosed Asymmetry Finance reports indexed on CoinBuggie. Nothing here is active or unpatched — every entry was published by the programme or the researcher after remediation.
The findings concentrate in Access control, Logic error, Front-running / MEV, Oracle manipulation, Governance attack, across EVM-Solidity. Reading a single protocol end to end is the fastest way to see which assumptions its codebase repeatedly gets wrong, which is usually a better predictor of where the next finding lives than the category alone.
Use the vulnerability class links below to compare these findings against the same bug class in other protocols.
What reviewers look for
- Access control findings disclosed against Asymmetry Finance
- Logic error findings disclosed against Asymmetry Finance
- Front-running / MEV findings disclosed against Asymmetry Finance
- Oracle manipulation findings disclosed against Asymmetry Finance
- Governance attack findings disclosed against Asymmetry Finance
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
Asymmetry Finance: Lack of access control and value validation in the reward flow exposes functions to public access
Asymmetry Finance's AfEth yield-compounding pipeline exposed two functions in the Votium reward flow — AfEth::depositRewards() and VotiumStrategy::depositRewards() — without caller authorization and without validating that the amount argument matches the attached msg.value. This lets any external address invoke them to convert native Ether held by the contract into locked CVX tokens, effectively letting anyone spend the contract's stray ETH through the reward path. The code4rena judge confirmed this as a standalone Medium, distinguishing it from a mere QA-level value-check note, and the sponsor's mitigation (switch to msg.value and make depositRewards private) was later adjudicated as unmitigated pending review.
Asymmetry Finance: Forced relock in VotiumStrategy withdrawal causes denial of service if Convex locking contract is shutdown
Asymmetry Finance's VotiumStrategy withdraw() flow unconditionally calls relock(), which tries to re-stake unencumbered CVX into Convex's vlCVX contract via ILockedCvx.lock(). Convex's lock() enforces a non-shutdown precondition and reverts once the protocol sets its isShutdown flag. Consequently, once vlCVX is shutdown, every withdrawal attempt reverts, locking depositor funds inside the strategy and denying service. The sponsor confirmed the finding and mitigated it by guarding relock() with an isShutdown() check before invoking lock(); the mitigation was independently confirmed in a follow-up review.
Asymmetry Finance: VotiumStrategy withdrawal queue fails to consider available unlocked tokens causing different issues in the withdraw process
Asymmetry Finance's VotiumStrategy queues CVX withdrawals because the underlying tokens can be locked in Convex, and requestWithdraw() picks the exit epoch by walking the lockedBalances array. When every deposit predates the full 16-week lock window, that array is empty and the function skips the loop entirely then reverts with InvalidLockedAmount, even though unlocked CVX plus the contract's CVX balance already covers the requested amount. Depositors can therefore be unable to request a withdrawal at all, or their exit is delayed beyond what is necessary. The protocol confirmed the flaw; the judge ruled it a recoverable denial of service because a relock() can re-create locked entries, and a confirmed mitigation adds an early return that assigns the withdrawal to the current epoch whenever unlocked assets suffice.
Asymmetry Finance: Zero amount withdrawals of SafEth or Votium will brick the withdraw process
AfEth's withdrawal flow computes the amount owed for each underlying leg (SafEth and VotiumStrategy) by applying a single user ratio to each leg's contract balance and caching the result in the withdrawIdInfo mapping. When the contract holds no position in one leg at request time — reachable before the protocol seed deposit or on the last staker's full exit — the cached amount for that leg is zero. Invoking withdraw() afterward forces a zero-amount unstake on that leg, which reverts, permanently bricking the withdrawal and trapping the user's vAfEth. The sponsor confirmed the finding, the judge upheld it at high severity (also flagging an incorrect afEthBalance subtraction in the withdrawRatio denominator), and the mitigation guarding zero-value unstake/sell was confirmed.
Asymmetry Finance: Intrinsic arbitrage from price discrepancy
Asymmetry Finance's AfEth vault prices deposits and withdrawals using two different price sources: ETH is actually swapped into safEth and vAfEth at true exchange prices, while the afEth shares minted are valued from Chainlink-backed oracle estimates that may deviate up to 2%. Because deposits allocate per a configured ratio while withdrawals release assets proportionally from extant balances, any divergence between the oracle valuation and the realized swap price lets a user depositing and immediately withdrawing recover more ETH than they put in. The report works four numerical examples and derives a derivative-bounded mint cap to remove the leak. The protocol confirmed the issue but ultimately judged the residual risk acceptable and left it unmitigated, with the judge agreeing that the reconverging-ratio scenarios were infeasible while the price-discrepancy scenarios retained partial validity.
Asymmetry Finance: Functions in the `VotiumStrategy` contract are susceptible to sandwich attacks
Asymmetry Finance's VotiumStrategyCore swaps through Curve's ETH/CVX pool using exchange_underlying with a hardcoded zero minimum-output amount. While the higher-level AfEth deposit and withdraw flows carry a _minOut slippage guard, users calling VotiumStrategy.deposit(), VotiumStrategyCore.depositRewards(), or VotiumStrategy.withdraw() directly get no such protection, leaving those swaps vulnerable to mempool sandwich attacks that reduce the CVX or ETH received. The sponsor confirmed the finding and applied a mitigation (locking down depositRewards and adding minimum-output parameters to the reward functions), and the judge marked it the primary/best report for the slippage issue, noting _minOut also needed to flow through AfEth.applyRewards() to fully close the duplicates.
All reports in this group
- Asymmetry Finance: AfEth collaterals cannot be balanced after ratio is changedLogic error$0
- Asymmetry Finance: Missing circuit breaker checks in `ethPerCvx()` for Chainlink's price feedOracle manipulation$0
- Asymmetry Finance: It might not be possible to `applyRewards()`, if an amount received is less than 0.05 ethLogic error$0
- Asymmetry Finance: `price()` in `AfEth.sol` doesn't take afEth held for pending withdrawals into accountLogic error$0
- Asymmetry Finance: AfEth deposits could use price data from an invalid Chainlink responseOracle manipulation$0
- Asymmetry Finance: In de-peg scenario, forcing full exit from every derivative & immediately re-entering can cause big losses for depositorsGovernance attack$0
- Asymmetry Finance: `WstEth` derivative assumes a `~1=1` peg of stETH to ETHOracle manipulation$0
- Asymmetry Finance: Potential `stake()` DoS if sole safETH holder (ie: first depositor) unstakes `totalSupply` - 1Logic error$0
- Asymmetry Finance: `Reth.sol`: Withdrawals are unreliable and depend on excess `RocketDepositPool` balance which can brick the whole protocolAccess control$0
- Asymmetry Finance: Possible DoS on `unstake()`Oracle manipulation$0
- Asymmetry Finance: Non-ideal rETH/WETH pool used pays unnecessary feesGovernance attack$0
- Asymmetry Finance: sFrxEth may revert on redeeming non-zero amountLogic error$0
- Asymmetry Finance: Users can fail to unstake and lose their deserved ETH because malfunctioning or untrusted derivative cannot be removedAccess control$0
- Asymmetry Finance: Price of sfrxEth derivative is calculated incorrectlyOracle manipulation$0
- Asymmetry Finance: Stuck ether when use function `stake` with empty `derivatives`(`derivativeCount` = 0)Logic error$0
- Asymmetry Finance: Missing derivative limit and deposit availability checks will revert the whole `stake()` functionAccess control$0
- Asymmetry Finance: Reth `poolPrice` calculation may overflowOracle manipulation$0
- Asymmetry Finance: Staking, unstaking and rebalanceToWeight can be sandwiched (Mainly rETH deposit)Oracle manipulation$0
- Asymmetry Finance: Residual ETH unreachable and unutilized in SafEth.solAccess control$0
- Asymmetry Finance: Division before multiplication truncate `minOut` and incurs heavy precision loss and result in insufficient slippage protectionAccess control$0
- Asymmetry Finance: Lack of deadline for uniswap AMMFront-running / MEV$0
- Asymmetry Finance: An attacker can manipulate the preDepositvePrice to steal from other usersInteger overflow/underflow$0
- Asymmetry Finance: No slippage protection on `stake()` in SafEth.solLogic error$0
- Asymmetry Finance: DoS due to external call failureReentrancy$0