When creating an auction using the factory contract, the factory address is set as the owner of the auction. In case an auction ends with no bidders, the tokens are transferred to the factory contract, which cannot move the tokens later.
A user, presumably a Fjord admin can create an auction using FjordAuctionFactory::createAuction
which deploys a new FjordAuction
contract where the owner is set to msg.sender
(factory) and cannot be changed.
The owner
variable is used solely as the recipient of the auction tokens if there are no bidders after the auction ends.
The factory doesn’t implement any functionality to transfer ERC20 tokens, resulting in a permanent loss of these tokens within the factory contract.
The following PoC demonstrates that the factory contract receives the auction tokens if no bids are placed.
Permanent loss of auction tokens
Manual Review, Foundry
Consider adding an _owner
parameter to the constructor in FjordAuction.sol
and ensure the address can receive and spend the tokens.
Alternatively, you can add token transfer functionality to the FjordAuctionFactory
, which would only be callable by the owner:
An auction with 0 bids will get the `totalTokens` stuck inside the contract. Impact: High - Tokens are forever lost Likelihood - Low - Super small chances of happening, but not impossible
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.