The _mint, _burn, and _transfer functions use raw EVM arithmetic opcodes (add, sub) within inline assembly without explicit overflow/underflow checks.
The counterexample for testFuzzSupplyConsistency shows the fuzzer injecting a value near type(uint256).max . When _mint executes sstore(supplySlot, add(supply, value)), the addition results in a wrapped (overflowed) value, which triggers an implicit revert (panic: arithmetic underflow or overflow (0x11)) inserted by the Solidity 0.8.x compiler.
A malicious user or unintended input can cause unrecoverable transaction failure (DoS) or, in certain contexts, silent state corruption if the EVM wraps the value before the compiler check executes. This breaks the core invariant that the total supply and individual balances are always positive and within uint256 limits.
The revert occurs in ERC20Internals::_mint assembly:
Vulnerability: Arithmetic Overflow/Underflow.
Proof: Failed test testFuzzSupplyConsistency with counterexample involving the maximum uint256 value, resulting in panic: arithmetic underflow or overflow (0x11).
: Denial of Service (DoS) on all core state-changing functions ($\text{mint, burn, transfer}$) if large values are used, or silent state corruption if the operation involves multiple assembly steps.
Implement manual safe arithmetic checks in assembly before every add or sub operation.
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.