The _transfer() function allows any token holder to mint unlimited tokens by transferring to themselves.
When from == to, both storage slots resolve to the same location. The balance is read twice before any write, then written twice - with the second write (addition) overwriting the first (subtraction).
Likelihood:
Any address with a non-zero balance can exploit this immediately
No special permissions or setup required
Impact:
Attacker can mint unlimited tokens, destroying the token economy
Total supply tracking becomes meaningless
All existing holders suffer complete value dilution
transfer related exploit that can make huge impact to protocol.
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.