-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Malicious bidder can cause a DOS in claimAuction
by rejecting ETH transfer
#1695
Labels
3 (High Risk)
Assets can be stolen/lost/compromised directly
bug
Something isn't working
duplicate-1785
unsatisfactory
does not satisfy C4 submission criteria; not eligible for awards
Comments
c4-submissions
added
3 (High Risk)
Assets can be stolen/lost/compromised directly
bug
Something isn't working
labels
Nov 13, 2023
141345 marked the issue as duplicate of #1632 |
141345 marked the issue as duplicate of #843 |
141345 marked the issue as duplicate of #486 |
alex-ppg marked the issue as not a duplicate |
alex-ppg marked the issue as duplicate of #2006 |
alex-ppg marked the issue as unsatisfactory: |
c4-judge
added
the
unsatisfactory
does not satisfy C4 submission criteria; not eligible for awards
label
Dec 5, 2023
alex-ppg marked the issue as unsatisfactory: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
3 (High Risk)
Assets can be stolen/lost/compromised directly
bug
Something isn't working
duplicate-1785
unsatisfactory
does not satisfy C4 submission criteria; not eligible for awards
Lines of code
https://github.com/code-423n4/2023-10-nextgen/blob/main/smart-contracts/AuctionDemo.sol#L104-L120
Vulnerability details
Impact
The
claimAuction
function, responsible for claiming the won NFT, attempts to refund all previous bidders' ETH bid amounts. This design introduces a potential Denial-of-Service (DOS) risk. If a previous bidder, acting maliciously, rejects the ETH transfer (by always reverting in the receive function), the entire claiming process fails. This leaves the auction winner and the admin unable to claim the NFT, and it also prevents other bidders from retrieving their funds. AsclaimAuction
is the sole method for refunding bids after an auction concludes, the entire process becomes blocked.Proof of Concept
The issue occurs in
claimAuction
function below :The function iterates through all auction bids, transferring the NFT to the highest bidder and attempting to refund previous bidders. If a malicious bidder uses a contract to participate in the auction with a receive function that does always revert on ETH transfer, the
claimAuction
function will consistently revert, causing a DOS scenario.The DOS vulnerability prevents the auction winner and admin from claiming the NFT and block previous bidders from retrieving their bid funds. As cancelBid and cancelAllBids are disabled after an auction ends (because of the check
block.timestamp <= minter.getAuctionEndTime(_tokenid)
), andclaimAuction
is the sole refund mechanism, all previous bidders' funds become inaccessible and will be be stuck in the contract.Tools Used
Manual review
Recommended Mitigation Steps
To avoid these issue i recommend to use the
claimAuction
function only for claiming the NFT for the highest bidder and allowing all other bidders to withdraw their bids using either cancelBid or cancelAllBids.Assessed type
DoS
The text was updated successfully, but these errors were encountered: