The DeliveryPlace::settleAskTaker
function contains a critical issue where the authority of the stock is incorrectly verified. Specifically, the function checks whether the caller is offerInfo.authority
when it should be verifying against stockInfo.authority
. This can lead to unauthorized users executing sensitive operations, which could compromise the integrity of the marketplace. The natspec of function says:
but the function give authority to offerInfo.authority
.
An attacker could potentially exploit this mistake to act as the stock authority, thereby gaining unauthorized control over the settlement process.The function's intended purpose is to ensure that only the correct authority can settle ask orders. The current implementation fails to enforce this, undermining the function's core purpose.
Manual Review
Correct the authority check like below:
Valid high severity, when taker offers are created pointing to a `offer`, the relevant `stockInfoMap` offers are created with the owner of the offer aka `authority`, set as the creater of the offer, as seen [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L245). Because of the wrong check within settleAskTaker, it will permanently DoS the final settlement functionality for taker offers for the maker that listed the original offer, essentially bricking the whole functionality of the market i.e. maker will always get refunded the original collateral, and takers will never be able to transact the original points put up by the maker. This occurs regardless of market mode.
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.