BriVault

First Flight #52
Beginner FriendlySolidity
100 EXP
View results
Submission Details
Impact: high
Likelihood: medium
Invalid

Centralized Ownership Creates a Single Point of Failure

Root + Impact

Description

  • Normal behavior:
    The BriTechToken contract designates a single owner (set at deployment) who has exclusive minting rights and full control over the token’s supply.

Issue:
Because the contract uses Ownable, all administrative control is centralized in one externally owned account (EOA).
If this owner is compromised, loses their private key, or acts maliciously, the token’s supply and credibility are entirely at risk.

// Root cause in the codebase with @> marks to highlight the relevant section
@> contract BriTechToken is ERC20, Ownable {
@> constructor() ERC20("BriTechLabs", "BTT") Ownable(msg.sender) {}
@> function mint() public onlyOwner { _mint(owner(), 10_000_000 * 1e18); }
@> }

Risk

Likelihood:

  • This issue occurs whenever the single owner’s private key is compromised or the owner intentionally abuses their privileges.

It also occurs if the project intends to decentralize over time but fails to migrate control away from the original deployer.


Impact:

  • A single malicious or compromised owner can mint infinite tokens, freeze supply, or drain liquidity pools tied to this token.

The project’s entire token economy collapses, and trust from exchanges or users can be permanently lost.

Proof of Concept

Explanation:
If the owner’s private key is compromised, an attacker can exploit unrestricted minting, collapsing the token’s economy instantly.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract OwnerCompromiseSimulation {
function simulateCompromisedOwner(address token) external {
// Attacker gains access to owner’s private key
BriTechToken(token).mint();
// Infinite tokens minted to attacker's control
}
}

Recommended Mitigation

Use a multi-signature wallet or governance contract for minting privileges.

Explanation:
Replacing onlyOwner with onlyMultisig (e.g., Gnosis Safe) or a DAO-controlled governance contract reduces single-point-of-failure risk and aligns with decentralization best practices.

- remove this code
+ add this code
- function mint() public onlyOwner {
- _mint(owner(), 10_000_000 * 1e18);
- }
+ function mint(address to, uint256 amount) external onlyMultisig {
+ require(totalSupply() + amount <= MAX_SUPPLY, "Max supply exceeded");
+ _mint(to, amount);
+ }
Updates

Appeal created

bube Lead Judge 19 days ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!