The DeliveryPlace
contract contains the function settleAskTaker()
which is responsible for settling Ask takers. This function checks if the caller is authorized to settle the Ask taker by comparing the caller's address with the authority
field of the offer.
However, this check should be performed against the authority
field of the stock instead of the offer.
Therefore, the taker won't be able to settle during the AskSettling
period, and once the period is done, even the admin (owner) won't be able to settle it if _settledPoints > 0
, thus the points will be lost.
Takers are unable to settle Ask takers during the AskSettling
period leading to loss of funds.
Add this PoC to test/PreMarkets.t.sol
Add import {Errors} from "src/utils/Errors.sol";
at the top of the file
Run forge test --mt test_PoC_settleAskTaker -vvvv
To resolve this issue, update the authorization check in settleAskTaker()
to compare the caller's address with the authority
field of the stock instead of the offer.
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.