Normal behavior: Players can stake their rapper NFTs along with a CRED token and earn rewards over time. When a player decides to unstake, the contract should return the NFT and any earned rewards.
Issue: The unstake
function requires the module_owner signer to mint the earned CRED and transfer the NFT back. This centralizes control over staking rewards and NFT recovery. If the module_owner is unavailable, malicious, or compromised, players cannot retrieve their NFT or rewards, creating a single point of failure.
Likelihood:
A player can stake and later attempt to unstake. If the module_owner signer is unavailable or refuses to participate, unstake cannot be completed.
Any compromise of the module_owner account immediately impacts all stakers, because it controls minting and NFT transfers.
Impact:
Players’ staked NFTs and earned CRED tokens can become permanently inaccessible.
Centralized control introduces a single point of failure, making the staking system dependent on one entity for correct operation.
Example mitigation strategies:
Pre-mint CRED rewards into a staking pool that can be released by the staker.
Use a Friend
module with delegated authority or escrow so NFT transfer back to the staker does not require module_owner.
Reduce trust in a single account to avoid centralization.
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.