Direct theft of any user funds, whether at-rest or in-motion, other than unclaimed yield
Description
Brief/Intro
The ThunderExchange contract supports depositing nfts of erc115 type, which was also confirmed by the team on discord. It's possible to place an order of just 1 amount of a certain NFT, update it to an amount of the balance of the ThunderExchange of the given erc1155 NFT and then cancel it, stealing all the nfts of the corresponding collection and sub id of the ThunderExchange.
Vulnerability Details
ThunderExchange::place_order(), allows specifying a sell order of any amount.
ThunderExchange::update_order(), when the side is Sell, does not perform any validation. All validation of the order is performed in StrategyFixedPriceSale::_validate_updated_order(), which does not check the amount. Thus, it's possible to modify the amount of the sell order without sending more erc1155 NFTs to the ThunderExchange.
The full flow, given in the POC is:
Place a sell order of an erc1155 nft with an amount of 1.
Update the sell order to an amount equal to the balance of the given nft in the ThunderExchange.
Cancel the order and receive all the corresponding nft balance.
Impact Details
All erc1155 nft given by the specified collection and token id are stolen from the ThunderExchange.