Open code423n4 opened 2 years ago
This is working as designed. Contributors to a crowdfund essentially enter an agreement to pay up to a maximum price of their combined contributions for an NFT.
@merklejerk But in this case it is not "up to a maximum price" but rather always the maximum price using the poc
@merklejerk But in this case it is not "up to a maximum price" but rather always the maximum price using the poc
Hmm. I reread the PoC and now I'm converting this to confirmed. The real issue here is not so much that the party is paying maximum price, but that the party did not ever bid on the item but also paid maximum price. :facepalm:
Still disagree with severity since this is unlikely to happen with a legitimate collection. It should be med at most.
Agree with Medium risk here. This could be a violation of party user expectations since auctions generally target the min possible bid - a form of leaking value.
Lines of code
https://github.com/PartyDAO/party-contracts-c4/blob/main/contracts/crowdfund/AuctionCrowdfund.sol#L236
Vulnerability details
Impact
Consider a scenario where few users contributed in auction but noone has placed any bid due to reason like NFT price crash etc. So there was 0 bid, nft owner could seize the crowdfund users fund until they pay a ransom amount as shown below.
Proof of Concept
Before calling finalize the lastBid was 0 since no one has bid on this auction but lets see what happens on calling finalize
Since NFT owner has transferred NFT to this contract so below statement holds true and lastBid_ is also 0 since no one has bided
Recommended Mitigation Steps
Remove the line lastBid_ = totalContributions; and let it be the last bid amount which crowdfund users actually bided with.