When calculating the minimum required next bid in placeBid , the code performs integer division before multiplication.
Because solidity integer division truncates toward zero, this expression can under-estimate the required amount whenever previousBidAmount is not a multiple of 100.
Likelihood:
Whenever a bid amount is less than 100 (or not a clean multiple of 100), the calculation will truncate the remainder and lower the required next bid.
Attackers can deliberately craft bids to exploit this rounding to gain a price advantage.
Impact:
Sellers receive less than the configured minimum increment.
Auction integrity is compromised and bidding rules can be bypassed.
Deploy the contract and list an NFT with S_MIN_BID_INCREMENT_PERCENTAGE = 5.
Place a first bid of 99 wei.
The next required bid is computed as `(99 / 100) * 105 = 0`
Any user can now bid 0 wei and become the highest bidder, violating the intended minimum increment rule.
Multiply before dividing to preserve precision:
Integer division in requiredAmount truncates fractions, allowing bids slightly lower than intended.
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.