PuppyRaffle::selectWinner function is using deterministic data for generating random number and rarity of NFT, winner can be predictable.
Protocol is using block.timestamp, block.difficulty, msg.sender for generating random number but these can be manipulated by miners, and if that happens winner can be changed according to them also rarity of nft will be predictable.
Potential winner can be looser and vice-versa. Malicious actor can also make favourable for him to mint the rarest nft.
Manual Review
Use a decentralised oracle service like chainlink VRF.
Docs: https://docs.chain.link/vrf
Root cause: bad RNG Impact: manipulate winner
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.