ribbon finance

Ribbon Finance exploit results in $2.7 million loss

Ribbon Finance, now part of the Aevo ecosystem, lost about $2.7M in a hack targeting a legacy smart contract, with funds split across 15 wallets and some consolidated.

Blockchain analysts on X said the hack occurred days after Ribbon Finance updated its oracle and options logic. This allowed the attacker to drain hundreds of Ether and other tokens.

Web3 security researcher Liyi Zhou detailed how the exploit hinged on weaknesses in the Opyn/Ribbon oracle architecture. According to Zhou, the attacker manipulated price-feed proxy contracts, injecting fabricated expiry prices for assets such as wstETH, AAVE, LINK, and WBTC into the shared oracle system using a single expiration timestamp.

This manipulation enabled the attacker to open sizable short positions using oTokens against Ribbon’s MarginPool. Because the settlement process relied on the falsified oracle data, the protocol released significant amounts of WETH and wstETH, thousands of USDC, and multiple WBTC through redeem-related functions, directing the assets to attacker-controlled addresses.

Oracle upgrade exposed a structural weakness

The breach followed an oracle pricing update implemented six days earlier, which introduced 18-decimal support for certain assets, including stETH, PAXG, LINK, and AAVE. However, other tokens—such as USDC—continued to operate under an eight-decimal standard. Zhou noted that this mismatch in decimal handling played a role in enabling the exploit.

An X user Weilin pointed out that the attacker did not bypass the protocol’s permissioning system when creating oTokens. All underlying assets were properly whitelisted, meaning the malicious activity exploited logic flaws rather than violating token creation rules.

The exploit began with the deployment of unusually structured options, including a stETH call option with a strike price of 3,800 USDC, collateralized with WETH and set to expire on Dec. 12. Multiple oTokens tied to these options were created and later used to drain funds from the system.

Investigators saw repeated proxy admin calls, using ownership and implementation updates via delegate calls to manipulate the oracle. By forcing multiple assets to share the same expiry timestamp, the attacker triggered oracle updates that reflected fabricated price data.

As a result, the protocol interpreted stETH prices as significantly exceeding strike levels, allowing the attacker to burn 225 oTokens in exchange for more than 22.46 WETH. In total, the exploit yielded roughly 900 ETH.

Web3 security firm Spectre first identified the stolen funds moving into a wallet beginning with 0x354ad…9a355e. From there, the assets were spread across 14 additional addresses, many holding about 100 ETH each. Some of the funds have since been routed into what Zhou described as treasury-style consolidation wallets.

Leave a Reply

Your email address will not be published. Required fields are marked *