The smart contract contains a logic flaw in the placeBid() function where the "Already highest bidder" validation check is positioned after the Buy Now execution logic. This allows the current highest bidder to bypass the intended restriction and purchase the NFT at the fixed Buy Now price, even though they should be prevented from placing additional bids. The vulnerability stems from the premature return statement in the Buy Now logic that prevents the validation check from ever executing for Buy Now purchases.
User places an initial bid (e.g., 1 ETH) to become the highest bidder
User calls placeBid() again with msg.value >= buyNowPrice (e.g., 2 ETH)
The Buy Now logic executes first, bypassing the require(msg.sender != previousBidder) check
Function returns early from Buy Now logic, never reaching the validation
User successfully purchases the NFT at Buy Now price despite being the current highest bidder
Undermines auction integrity by allowing bypass of fundamental bidding rules
Move the "Already highest bidder" validation check before the Buy Now logic execution:
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.