Root: placeBid enforces block.timestamp < auctionEnd and only extends when auctionEnd > block.timestamp. At == auctionEnd, bids are rejected outright and never trigger extension.
Impact: A malicious bidder can engineer inclusion in the boundary block (timestamp == auctionEnd), preventing all rival bids from being accepted and blocking extension, allowing them to snipe auctions cheaply.
The auction is designed to extend by 15 minutes if bids arrive shortly before the deadline, preventing last-second sniping and ensuring fair competition.
Due to strict < checks, any bid mined exactly at the deadline second (block.timestamp == auctionEnd) reverts. Because extension logic also checks auctionEnd > block.timestamp, these bids never trigger an extension. An attacker can exploit miner/builder timestamp flexibility to ensure competitor bids fall in this boundary window, winning unfairly.
Likelihood:
Likelihood:
Reason 1 // Competitive auctions routinely cluster bids at the deadline, making equality-second bids common.
Reason 2 // Builders/validators have limited control over block.timestamp, enabling attackers to manipulate equality timing.
Impact:
Impact 1 // Attacker can reliably snipe auctions by ensuring rivals’ bids land at the boundary second and revert.
Impact 2 // Auction anti-sniping design is broken; seller revenue reduced and fairness compromised.
Drop this in test/AuctionEndEdge.t.sol, replace the market deployment line with your actual market deployment, then run forge test --match-path test/AuctionEndEdge.t.sol.
Accept equality-second bids:
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.