Using on-chain data which is public to everyone is not logical when trying to have RNG.
In selectWinner function for both calculating the winnerIndex and rarity, code uses predictable values which are msg.sender, block.timestamp and block.difficulty. Because these values can be predictable, there will not be pure randomness.
The values we want random will become predictable and could be used by malicious users.
Manual reading.
Instead of using on-chain data, use oracles like VRF from Chainlink.
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.