Marketplace should accept bids, keep the highest bid, refund the previous highest bidder when outbid, and transfer funds & NFT safely when an auction ends. Fee balance should be withdrawable only by owner.
The contract performs refunds / value transfers to previous bidders inside placeBid (push model) without pull-pattern and without sufficient reentrancy protection. A malicious bidder contract can either (a) revert on refund and block further bidding (DoS), or (b) reenter the marketplace to manipulate state and extract funds.
Likelihood:
When the previous highest bidder is a malicious contract whose fallback/receive either reverts or uses gas-heavy logic — the refund call will revert or consume gas.
When a bidder contract’s fallback function reenters placeBid / endAuction (if there is no nonReentrant or state update ordering protection), an attacker can manipulate auction state mid-refund.
Impact:
Protocol-level DoS: Auctions become un-biddable or cannot proceed because refunds revert (blocked by the push refund call).
Reentrancy-based theft or state corruption resulting in lost funds or misdirected NFT ownership.
Use a pull-based refund pattern: record pendingReturns[bidder] += previousBid and let bidders call withdraw() to retrieve funds. Avoid refunds inside placeBid.
If you must push funds, update state before external calls and use ReentrancyGuard (nonReentrant) around sensitive functions.
Add unit tests that include malicious bidder contracts that revert on receive and reenter to verify hardening.
BidBeast Marketplace has a Medium-severity reentrancy vulnerability in its "buy-now" feature that allows an attacker to disrupt the platform by blocking sales or inflating gas fees for legitimate users.
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.