scope: src/SoulboundProfileNFT.sol
The blockProfile
function does not prevent a blocked address from minting a new profile NFT after being blocked. Blocked users can re-mint a profile NFT, bypassing the intended restriction.
Affected Functions:
blockProfile()
: Burns the NFT and deletes profile data but does not record the blocked status.
mintProfile()
(assumed): Likely lacks a check for blocklisted addresses.
Root Cause:
Burning the NFT and deleting profileToToken
removes the user’s profile data but does not store their blocked status.
When the blocked user attempts to mint again, the contract cannot distinguish them from a new user, allowing unrestricted re-minting.
Loss of Accountability: Blocked users can re-enter the system, undermining the purpose of blocking.
System Abuse: Malicious actors can repeatedly create new profiles after being blocked.
Manual code review (no specific tools required).
1.Add a Blocklist Mapping:
mapping(address => bool) public isBlocklisted;
2.Update blockProfile()
:
3.Modify the Mint Function:
Add a check in the profile minting function:
Likelihood: Low, any blocked users. Impact: High, not really blocked.
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.