A critical ABI mismatch in the custom IAave interface causes failed withdrawals in Aave V3. The interface incorrectly declares the return type of the withdraw function, leading to ABI decoding failures and reverted transactions when users attempt to withdraw assets.
The custom IAave interface, located in Cyfrin/2025-01-diva, inaccurately declares the return type of the withdraw function. The interface specifies that the withdraw function returns a single uint256, but the official Aave V3 withdraw function returns two uint256 values:
amountWithdrawn: The actual amount of the underlying asset withdrawn.
newLiquidityIndex: The updated liquidity index of the reserve.
This mismatch causes ABI decoding failures when a contract using the flawed interface attempts to call the withdraw function, leading to transaction reverts.
withdraw(address asset, uint256 amount, address to) – The custom interface expects one uint256, but Aave V3’s implementation returns two.
Funds Locked: Users cannot withdraw assets from Aave V3 via contracts relying on this interface, effectively locking their funds.
Protocol Insolvency Risk: If this interface is used in a protocol managing user deposits (e.g., a yield aggregator), funds could become permanently inaccessible.
Reputation Damage: Broken core functionality causes users to lose trust in the protocol, which may lead to protocol abandonment.
Manual code review of the IAave interface from Cyfrin/2025-01-diva.
ABI decoding analysis to identify mismatches in function signatures.
Fix the Interface: Update the withdraw function declaration to match Aave V3’s return values:
Use Official Aave Interfaces: Replace the custom interface with Aave’s audited code
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.