Conic Finance Read-Only Reentrancy
Conic Finance's ETH Omnipool had reentrancy guards but assumed Curve v2 used a specific ETH address. A new CurveLPOracleV2 slipped past it, draining $3.2M.
- Date
- Victim
- Conic Finance
- Chain(s)
- Status
- Funds Stolen
On July 21, 2023, the Curve-Omnipool platform Conic Finance lost 1,724 ETH (~$3.2 million) to a read-only reentrancy exploit. The protocol had reentrancy guards in place — but they relied on an incorrect assumption about how Curve v2 ETH pools represent ETH internally, letting the attacker slip past the guard entirely.
What happened
Conic's ETH Omnipool aggregated user deposits across multiple Curve liquidity pools to maximise yield. To value the deposited LP tokens, Conic used its CurveLPOracleV2 contract — a newly deployed oracle that read the underlying Curve pools to compute fair value.
The reentrancy guard in the oracle was conditional on an _isETH() method that returned true if one of the pool's coins was the canonical ETH address (0xeeeeeeee...eeeeeeee). For pools matching this check, the contract would acquire a reentrancy lock before reading state. For pools not matching, it would skip the lock.
The fatal mistake: Curve v2 pools that hold ETH use the WETH address internally, not the canonical ETH address. The _isETH() method returned false for these pools, and the contract proceeded without the reentrancy lock.
The attack:
- Flash-borrowed 20,000 stETH.
- Initiated a series of swaps through the rETH Curve pool that put it in a partial-execution state.
- Mid-execution — while the rETH pool was internally inconsistent — called Conic's oracle to read rETH LP token price.
- The oracle, without the reentrancy guard, read the manipulated mid-swap state and returned an incorrect (inflated) price for rETH LP tokens.
- Deposited and withdrew Conic positions at the inflated rate, minting nearly double the cncETH tokens for the same deposit value.
- Looped the operation, drained funds from the Omnipool, repaid the flash loan.
Net theft: 1,724 ETH (~$3.2M).
Aftermath
- Conic paused the Omnipool and published a detailed post-mortem.
- The team announced a compensation plan funded from protocol revenue.
- The CurveLPOracleV2 was patched to use the correct WETH-aware reentrancy logic.
- The exploit revealed that audit scope had not included CurveLPOracleV2 — the contract was deployed after the most recent audit and the same reentrancy issue had been previously identified and fixed in earlier oracle versions, but reintroduced when V2 was written.
Why it matters
Conic Finance's incident is a textbook case for two compounding failure modes:
-
Read-only reentrancy is harder to spot than write-reentrancy. Most reentrancy education focuses on attacks that mutate state during the re-entry — checks-effects-interactions guards specifically against this. Read-only reentrancy — where the re-entered function only reads state, but that state is mid-mutation — slips past intuitive analysis because "we're just reading" feels safe. Curve v1's
remove_liquidityis a particularly fertile source of read-only reentrancy bugs that subsequent oracle integrations recurringly miss. -
Patched bugs re-emerge in new code. Conic's earlier oracle had been audited and patched against the same reentrancy class; the V2 oracle, written from scratch by the same team, reintroduced the bug because it was not part of the audit scope. The pattern recurs everywhere a team ships a "v2 rewrite" of a contract that had been hardened in v1 — institutional knowledge about specific known vulnerabilities does not always transfer through the rewrite.
The defensive answer is consistent: every oracle integration that reads from another protocol's state must explicitly handle that protocol's known reentrancy surface, and any rewrite of a previously-audited contract must include re-audit of the specific bug class the original fix addressed. Conic's $3.2M is the price of skipping these steps.
Sources & on-chain evidence
- [01]halborn.comhttps://www.halborn.com/blog/post/explained-the-conic-finance-hack-july-2023
- [02]coindesk.comhttps://www.coindesk.com/tech/2023/07/21/defi-protocol-conic-finance-hacked-for-1700-ether
- [03]immunebytes.comhttps://immunebytes.com/blog/conic-finance-detailed-hack-analysis-july-21/