There are so administering function require that msg.sender is MysteryBox::owner such as setBoxPrice, addReward,withdrawFunds. However, the function MysteryBox::changeOwner which is used to move to new owner is lack of an access control. Because of it, malicious user can drain all funds.
Proof of Concept
Malicious user calls changeOwner function to change owner to your appreciation.
They calls withdrawFunds function to withdraw all contract balance.
The contract's balance will be drained.
Manual Review
Adding an access control to the changeOwner function.
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.