Summary: In the contract SoulboundProfileNFT.sol, the state variable profileToToken[msg.sender] is updated after the function _safeMint() makes an external call. The state variable profileToToken[msg.sender] is updated after calling _safeMint, so the profileToToken[msg.sender] is still 0, allowing the attacker to mint multiple profiles.
Impact: Attacker could mint multiple profiles instead of just one.
Recommended Mitigation: To prevent, please follow Checks, Effects and Interaction pattern (CEI). Update the profileToToken mapping before calling _safeMint as shown below:
```solidity
function mintProfile(string memory name, uint8 age, string memory profileImage) external {
require(profileToToken[msg.sender] == 0, "Profile already exists");
Likelihood: High, anyone can do it. Impact: Low, several profile will be minted, which is not allowed by the protocol, but only the last one will be stored in profileToToken and won't affect `likeUser` or `matchRewards`.
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.