Anyone can change owner of the contract and then withdraw all funds from the contract.
Function MysteryBox::changeOwner does not have any access control in place. Therefore anyone can call the function and change the contract owner. After that the attacker can call function MysteryBox::withdrawFunds and withdraw all funds from the contract.
Anyone can withdraw all funds from the contract.
Manual review
Add permissions check to the function MysteryBox::changeOwner as show below:
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.