The create()
and update()
functions lack validation for depositFee
and redeemFee
, enabling administrators to set fees exceeding 100%. This could result in complete loss of user funds during deposits/redemptions or denial-of-service by making transactions economically impossible.
Fee Representation:
Fees use 18-decimal fixed-point (1e18 = 100%)
Stored as uint256
, allowing values up to 1.15e77
(far beyond 100%)
Exploit Scenarios:
Malicious Admin: Sets depositFee = 2e18
(200%) → Users lose all deposited funds + extra
Accidental Misconfiguration: Admin typo (e.g., 1000000000000000000
→ 10000000000000000000
) sets 1000% fee
Protocol Impact:
Fees applied via amount * fee / 1e18
would invert returns:
Severity | Consequences |
---|---|
High | • Direct Fund Theft: Fees >100% let admins siphon user assets |
• Broken Economics: Fees ≥100% block deposits/redemptions entirely
• Reputation Damage: Users lose trust in protocol safety
• Governance Attack: Compromised admin keys could drain vaults
Example Attack Flow:
Attacker gains admin privileges (via compromise or malicious proposal)
Sets redeemFee = 1.5e18
(150%)
Users attempting to redeem $100 receive:
Result: All redemptions fail, funds permanently locked.
Add explicit fee validation in both functions:
Event Emission:
Log fee changes for transparency:
Input Sanitization:
Reject fees exceeding a safe threshold (e.g., 20%):
Multi-Sig Enforcement:
Require multiple signers for fee changes above 5%.
Timelock:
Implement a 24-72 hour delay for fee adjustments to allow user exits.
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.