SmartVaultManagerV5::_afterTokenTransfer call smartVaultIndex.transferTokenId(_from, _to, _tokenId), that will make transfer exceed block gas limit if _from has too many tokens.
smartVaultIndex.transferTokenId gas cost grow lineary with each token in _from. When a token is transferred _afterTokenTransfer is called.
An attacker can mint ~ 30_000_000 / 5000 = 6000 tokens, transfer to a victim to lock the transfer function. Or a user may create many vaults themself.
Locked transfer functionality
You can put it in tests folder, run npx hardhat test test/fileName.js and check the console output
Manual review
Consider limiting the number of tokens a user can have.
Consider using a different smartVaultIndex implementation that does not increase gas consumption lineary
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.