Beginner FriendlyGameFi
100 EXP
View results
Submission Details
Impact: medium
Likelihood: high
Invalid

Owner Centralization and Lack of Ownership Transfer Mechanism

Root + Impact

Description

  • Normally, the owner manages the contract, registers users, and manages funds. However, the owner address is fixed and there is no mechanism to transfer or change ownership. This creates a risk where if the owner loses access or acts maliciously, contract management can become locked or uncontrollable.

// Owner checks exist in all functions but no owner change function
assert!(signer::address_of(owner) == state.owner, E_NOT_OWNER); @>

Risk

Likelihood:

  • Reason 1 // Describe WHEN this will occur (avoid using "if" statements)

  • No ability to update owner after project/team changes.

Impact:

  • Risk of owner address being lost or compromised.

  • No ability to update owner after project/team changes.

Proof of Concept

Owner address cannot be changed, so if new admin is needed, operations halt.

Recommended Mitigation

+ // Add a secure "change_owner" entry function
+ public entry fun change_owner(current_owner: &signer, new_owner: address) acquires State {
+ let state = borrow_global_mut<State>(get_resource_address());
+ assert!(signer::address_of(current_owner) == state.owner, E_NOT_OWNER);
+ state.owner = new_owner;
+ }
Updates

Appeal created

bube Lead Judge 11 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.