placeBid function extends listing.auctionEnd by S_AUCTION_EXTENSION_DURATION relative to the previous auctionEnd rather than block.timestamp. This allows malicious bidders to repeatedly place last-minute bids, cumulatively extending the auction indefinitely. This is a lofic flow in auction timer handling that can be exploited for bid sniping or denial-of-auction.When a new bid is placed the extension should be relative to the current time, ensuring that the auction eventually ends.
In this contract, the auction is extended as listing.auctionEnd = listing.auctionEnd + S_AUCTION_EXTENSION_DURATION . Since this uses the previous auctionEnd rather than block.timestamp, a malicious bidder can place successive last-minute bids to continuously extend the auction.
Likelihood:
Denial-of-auction: Legitimate bidders may be unable to settle the auction, disrupting marketplace operations.
Economic manipulation: Attackers can repeatedly extend the auction to force other bidders to spend more gas or manipulate bid timing.
People can get fed up of the system and inturn reputational loss
Impact:
Any bidder placing a last-minute bid can trigger the cumulative extension, making exploitation trivial.
As the test output we can see that the correct time should be incremented in the current block.timestamp
Rather it is updating the 15 minutes in context of the previous listing.auctionEnd which is the issue here
This clearly solves the issue by apping the 15 minutes to the current time not listing.auctionEnd
BidBeast marketplace contains a flaw in its auction timing mechanism. This causes the contract to miscalculate the actual end time of an auction, resulting in auctions that either conclude prematurely or run longer than specified.
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.