A critical vulnerability exists in Treasury.deposit
function due to missing validation of ERC20 transfer success. This issue allows failed token transfers to corrupt protocol accounting by improperly updating balance states. The flaw enables false deposit records, protocol insolvency risks, and griefing attacks through non-compliant ERC20 tokens. Immediate remediation requires adding return value checks and implementing OpenZeppelin's SafeERC20 library for secure token transfers.
The Treasury
contract contains a critical vulnerability in its deposit mechanism due to improper handling of ERC20 token transfers. The Treasury.deposit
function at Treasury.sol#L50 fails to properly validate the success of the ERC20 transferFrom
operation, creating a mismatch between actual token balances and contract accounting.
Key issues:
Missing Return Value Check: The implementation assumes successful token transfers without verifying the boolean return value from transferFrom
, violating ERC20 specification requirements
State Corruption Risk: Failed transfers could still trigger balance state updates (_balances
and _totalValue
), creating false accounting records
Protocol Incompatibility: Fails to support ERC20 tokens that return false
on failed transfers rather than reverting, including several widely-used legitimate tokens
This vulnerability poses significant risks to protocol integrity and user funds:
Direct Consequences:
Fund Accounting Corruption: Creates discrepancies between actual token balances and recorded deposits
Protocol Insolvency Risk: Treasury may report inflated asset holdings leading to unsustainable withdrawals
Griefing Attacks: Malicious actors could spam failed deposits to bloat protocol accounting
Financial Impact:
Enables direct theft of protocol credibility if exploited
Could facilitate secondary attacks through corrupted state data
Attack Scenarios:
Attacker deposits using non-reverting ERC20 token that returns false
on failed transfers
Protocol records deposit without actual token transfer
Attacker claims services/withdrawals based on fake deposit records
The vulnerability fundamentally undermines the treasury's primary purpose of accurate value tracking, making this a critical threat to protocol stability.
Manual Review
Add return value check and custom error in function Treasury.deposit
:
LightChaser Low-60
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.