##Description
Normal Behavior:
The setAllowedSellToken() function is meant to let the owner allow or disallow ERC20 tokens that sellers can list in the order book. This ensures only well-known, safe tokens like wETH, wBTC, and wSOL are traded.
Specific Issue:
There is no validation to check whether the token being whitelisted is a valid ERC20 with standard behavior (e.g. decimals, transfer mechanics, no fee-on-transfer). A malicious or broken token can be added by mistake — especially in future governance upgrades — which may:
Behave unexpectedly during transfers.
Lock buyer funds.
Cause buy orders to fail or drain buyers.
Likelihood:
Very likely during production operations or governance upgrades.
No interface checks mean any contract address can be whitelisted, even if it’s not an ERC20.
Impact:
Users may lose funds buying a malicious or broken token.
Buyers can be front-run or stuck in transactions that revert.
Sellers can list tokens that trap buyers' USDC, damaging platform trust.
A malicious token with a fake transfer()
function is whitelisted using setAllowedSellToken()
.
Buyers lose USDC without receiving any tokens, as transfers silently fail or do nothing.
Maintain a fixed allowlist in the constructor or restrict updates via multisig/governance only.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.