_burn uses inline assembly and subtracts value from accountBalance and supply without validating that balance >= value and supply >= value (no underflow guards)uint256.max → attacker can inflate personal balance and break totalSupply, enabling minting/dumping of tokens.The internal _burn function updates total supply and account balance using raw sub in assembly, without checking that the current values are sufficient:
When value > accountBalance, the subtraction underflows and writes a very large number (close to type(uint256).max) into the balance slot instead of reverting. This breaks accounting invariants and effectively lets the caller “create” tokens.
Likelihood:
This will occur every time someone calls burn() with an amount greater than their balance
No special conditions needed - just call the function
Impact:
Infinite Minting: Attacker can create unlimited tokens from nothing, causing their balance to underflow to type(uint256).max.
Broken Economics: The totalSupply will also underflow, rendering global token metrics incorrect.
Protocol Collapse: The attacker can dump these generated tokens into liquidity pools, draining all value from the protocol.
Run:
Output:
missing checks for overflow and underflow.
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.