The ERC20 standard requires that burning tokens should fail if the account doesn't have sufficient balance. OpenZeppelin's implementation reverts with ERC20InsufficientBalance error.
Token-0x's _burn function uses assembly sub(accountBalance, value) without checking if accountBalance >= value. In assembly, subtraction of a larger number from a smaller one wraps around (underflows) to a very large number (~2^256).
Likelihood:
Any contract inheriting from ERC20 that exposes _burn can trigger this
The test contract Token.sol exposes burn() as public, making this directly exploitable
Impact:
An attacker with 0 tokens can burn 1 token and receive ~2^256 tokens
Complete destruction of token economics
Unlimited token supply in attacker's hands
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.
The contest is complete and the rewards are being distributed.