Below you will find a list of possible attack:
Shop.withdraw function changes state before transfer, also withdraw uses transfer instead of call
Shop.returnExtra uses transfer instead of call
Shop.withdraw function changes state before transfer, also withdraw uses transfer instead of call
Shop.returnExtra uses transfer instead of call
Transaction ordering doesn't matter for this Dapp
Dapp doesn't use timestamps
Dapp uses SafeMath for all math operations
Dapp uses SafeMath for all math operations
If an attacker uses revert it will influence only his transaction
Dapp doesn't do any batch operations
The more money the better :), Dapp doesn't use any balance check logic