An attacker can store the signature used in the RankedChoice::rankCandidatesBySig function and reuse it to call RankedChoice::rankCandidatesBySig in different elections, effectively overwriting the voter's vote.
If the voter doesn’t cast a vote in a future election, the attacker can vote on their behalf using the candidates from previous elections (where the voter signed the voting message).
If the voter does vote, the attacker can modify their candidate list.
The hashed message should also include s_voteNumber so the signature cannot be reused in different elections:
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.