Reentrancy
if a contract calls attack() function with enough gas, the recipient contract will have the chance to perform its own logic.
Solution:
set Balance before sending ETH to the caller