Link to Affected Code:
https://github.com/Cyfrin/2025-02-raac/blob/89ccb062e2b175374d40d824263a4c0b601bcb7f/contracts/zeno/ZENO.sol#L46
https://github.com/Cyfrin/2025-02-raac/blob/89ccb062e2b175374d40d824263a4c0b601bcb7f/contracts/zeno/ZENO.sol#L65
Description:
The ZENO contract inherits ERC20's 18 decimals while interacting with USDC which uses 6 decimals. Both redeem
and redeemAll
functions transfer USDC using the same unit amount as ZENO tokens without decimal normalization. This creates a 1e12 (trillion) multiplier effect where redeeming 1 ZENO token (1e18 units) attempts to transfer 1e18 USDC units (1 trillion USDC tokens).
Impact:
Critical - If the ZENO contract is funded with USDC:
Users can extract 1e12 times more USDC than intended
Buying 1 USDC worth of ZENO allows redeeming for 1 trillion USDC
Complete draining of protocol's USDC reserves
System becomes insolvent after first redemption
Proof of Concept:
Recommended Mitigation:
Add decimal normalization in redemption functions:
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.