AccessControl is used and the deployer is granted DEFAULT_ADMIN_ROLE but never renounces or transfers it to a timelock/multisig. That single EOA can grant itself every role at any time — an unbounded centralization and single-point-of-compromise risk.
// deployer keeps DEFAULT_ADMIN_ROLE // if the deployer key leaks: grantRole(MINTER_ROLE, attacker) // -> attacker mints unlimited tokens.
_grantRole(DEFAULT_ADMIN_ROLE, timelock);
_revokeRole(DEFAULT_ADMIN_ROLE, msg.sender); // deployer steps down
Largest recorded losses in the same failure class — related, not the same bug:
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0119 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.