The function of PuppyRaffle.withdrawFees() could sends eth to an arbitrary user and could potentially allow an attacker to drain the contract of its funds
The function sends ether to an external address (feeAddress.call{value: feesToWithdraw}("")) and then continues to execute further logic. It also has no access control mechanisms, meaning any address can call this function and withdraw the fees.
This could potentially open up a reentrancy attack if the recipient is a contract that has a fallback function that calls back into the withdrawFees function. Finally, this could potentially allow an attacker to drain the contract of its funds.
Slither, Manual Review
Need to ensure that an arbitrary user cannot withdraw unauthorized funds.
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.