The marketplace performs multiple external calls to untrusted addresses, such as:
Sending ETH refunds via _payout.
Transferring NFTs to bidders via BBERC721.transferFrom.
Paying seller proceeds in _executeSale.
Currently, these external calls are not protected by any reentrancy guard (e.g., nonReentrant modifier). This leaves the contract vulnerable to reentrancy, where a malicious bidder or seller contract could re-enter the marketplace functions and manipulate state (e.g., repeatedly settle auctions, drain fees, or disrupt auction state).
Likelihood:
Occurs whenever _payout or _executeSale is triggered (e.g., during placeBid, settleAuction, takeHighestBid).
A malicious bidder or seller can deploy contracts with reentrant fallback functions.
Impact:
Auction state can be corrupted (e.g., double settlement).
Fees or ETH balances can be manipulated, leading to fund loss.
NFT ownership may become inconsistent with recorded listings.
This contract re-enters during refund or payout and attempts to settle the auction multiple times.
Add a reentrancy guard (e.g., OpenZeppelin’s ReentrancyGuard) to all state-changing functions that involve external calls:
And protect functions with nonReentrant:
This ensures no reentrant calls can manipulate auction or payout state.
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.