When a user burns their profile via burnProfile(), like mappings in LikeRegistry are never cleared. A user who burns and remints carries forward stale likes, triggering unintended matches.
burnProfile() deletes profileToToken and _profiles but has no way to clear the likes mapping in LikeRegistry:
After reminting, likes[oldAddress][otherUser] is still true. When otherUser likes the reminted profile, the mutual check finds the stale like and triggers a match:
The match is based on a like from the user's previous identity. The user never explicitly liked anyone with their new profile.
Likelihood:
Any user who burns and remints their profile retains all previous likes. Profile burn/remint is a normal user action (changing profile details), not an attack. The stale likes trigger matches the moment someone new likes them.
Impact:
Matches form without genuine mutual consent. ETH from the new liker is pooled with ETH from a like the other user made under a different identity. The stale like count lets someone accumulate likes across multiple profile iterations, gaming the matching system.
The test shows Alice liking Bob, then burning and reminting her profile. After the remint, likes[alice][bob] is still true from the old profile. When Bob then likes Alice, the stale mutual like triggers a match even though Alice never liked anyone with her new profile.
Track likes by tokenId rather than address. When a profile is burned, the old tokenId becomes invalid, so all associated likes are automatically invalidated. New profiles get new tokenIds, starting with a clean like slate.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.