The withdrawTokens function uses IERC20.transfer() directly.
Some ERC20 tokens (e.g., USDT-style tokens or proxy tokens) return false instead of reverting when a transfer fails.
Since the code does not check the return value, failed transfers silently succeed from the hook’s perspective.
The event still emits, making it appear that tokens were withdrawn when they were not.
Likelihood:
Triggered whenever the hook tries to withdraw non-standard ERC20 tokens.
Common tokens such as USDT exhibit this behavior.
Silent transfer failures occur regularly when interacting with diverse assets.
Impact:
Tokens may remain stuck in the hook without the owner realizing.
Off-chain systems will falsely record successful withdrawals due to the event emission.
Can lead to accounting errors, treasury mismanagement, or permanent loss of funds.
This demonstrates that the hook logs a successful withdrawal even when the transfer failed.
Use SafeERC20.safeTransfer() to guarantee revert-on-failure behavior.
This ensures all ERC20 transfer failures properly revert and cannot be silently ignored.
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.