Severity depends on reachable impact and deployment context. Listed tools are review aids; their applicability depends on language, version and configuration.
An access control vulnerability lets an unauthorized caller reach an operation that changes protocol state or moves value. Typical targets include minting, upgrades, role administration, emergency controls, and withdrawals. Severity depends on what the reachable function can do, not on whether it has an owner-themed name or modifier.
Missing modifiers are the simplest case, but many failures are contextual. A function may check the wrong role, expose an internal helper through another entry point, trust a caller-controlled forwarder, or leave an initializer callable. Role administration can also defeat otherwise-correct guards: whoever controls a role's admin may grant the role to a new account.
Authentication with tx.origin is unsafe because an intermediate malicious contract can preserve the victim's transaction origin while changing the immediate caller. The Solidity security guidance says never to use tx.origin for authorization. Use msg.sender or a deliberately implemented meta-transaction context, and review that trust boundary separately.
An attacker needs a path from an externally reachable call to a sensitive effect without the intended authorization. That path may cross contracts, callbacks, proxies, or multicalls. A public function without a modifier is not automatically vulnerable if it only changes the caller's own state; a guarded function is not automatically safe if its modifier reads corruptible state.
Review both current permissions and permission transitions. Constructors, initializers, grantRole, ownership transfer, upgrade authorization, and emergency recovery functions define who can acquire power later.
Build a matrix of every public or external state-changing function, its sensitive effects, allowed callers, and the source of that authority. Trace modifiers and internal calls rather than matching names. For proxies, inspect both the implementation and the admin or upgrade path.
Tests should cover authorized and unauthorized EOAs, contracts, forwarded calls, revoked roles, zero addresses, repeated initialization, and calls made through every public wrapper. Invariants can assert that supply, ownership, implementation slots, and treasury balances change only after an authorized action. Fuzz role changes and call sequences, not just individual functions.
Use small, explicit roles and separate operational powers from role administration. OpenZeppelin documents the tradeoffs among Ownable, AccessControl, AccessManager, and delayed execution in its access-control guide. A multisig reduces single-key exposure; a timelock adds review time. Neither repairs an incorrectly scoped role or a malicious quorum.
Initialize ownership and roles atomically, protect upgrade authorization, and provide a tested recovery procedure. Renouncing ownership is appropriate only when the system truly needs no privileged maintenance.
Repository analysis can flag unguarded paths, suspicious caller checks, and role topology. It cannot prove the security of private keys, off-chain signers, deployed role assignments, or every integration without the relevant code and chain state. Treat findings as review leads and confirm them with tests and deployment evidence.
Is every owner-only function a vulnerability?
No. It is a trust boundary. Risk depends on the function's power, custody of the owner, delays, caps, and whether users can verify pending changes.
Is a standard modifier enough?
No. The modifier must protect every route to the effect, and its underlying owner or role administration must also be correct.
Firepan
Run a free scan — results in minutes, no credit card required.
Run Free Scan →Review cross-chain message authentication, replay protection, finality, accounting, and operational trust boundaries.
Understand untrusted delegatecall targets, proxy upgrade boundaries, storage hazards, and practical review and test guidance.
Understand how atomic liquidity amplifies oracle, accounting, governance, and callback defects, with review and test guidance.
Understand governance capture, flash-loan voting, unsafe proposal execution, and the review and testing needed for on-chain governance systems.
Understand unsafe price-feed consumption, stale and low-liquidity data, oracle trust assumptions, and practical review and mitigation techniques.