Normal behavior: cancelParticipation() should only refund value corresponding to shares that are burned.
Issue: The function refunds stakedAsset[msg.sender] regardless of current share balance; an attacker can transfer all shares away, then cancel and get a full refund while burning 0 shares.
Likelihood:
Occurs whenever a depositor transfers shares to another address and then calls cancel.
No restrictions on transfers prior to cancellation.
Impact:
Direct theft: cash refund is paid while the corresponding shares still exist elsewhere.
At event end, those unbacked shares can claim winnings → double drain.
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.