After the event starts any user with the required health tokens can join event to become a producer to create MartenitsaTokens and list them but with No restrain on MartenitsaMarketplace::collectReward and MartenitsaMarketplace::makePresent functions during this time any malicious user can make unlimited number of his alternate address joint the event to become producer and list unlimited MartenitsaTokens, steal unlimited healthtokens and MartenitsaTokens all with 1 health token
With just 1 health token a Malicious user can potentially make multiple aliases who can steal unlimited healthtokens and MartenistaTokens and list unlimited MatartenitsaTokens.
Steps in which a Malicious user can exploit the issue:
Malicious user initially buys 3 martenitsas using MartenitsaMarketplace::buyMartenitsa function
He then user MartenitsaMarketplace::collectReward to claim 1 healthtoken
When the event starts he calls MartenitsaEvent::joinEvent to join the event and become a producer
Now he creates multiple aliases (wallets or smartcontracts).
he can now create unlimited martenitsas using MartenitsaToken::createMartenitsa.
since MartenitsaMarketplace::collectReward and MartenitsaMarketplace::makePresent are unrestrained during the event he can makePresent the collected martenitsas to his aliases and make them call MartenitsaMarketplace::collectReward
Now all these aliases can join the event since they all have 1 health token to become producers
Now they can list unlimited martenisas
The issue can be mitigated by restraining the MartenitsaMarketplace::collectReward and MartenitsaMarketplace::makePresent functions during the event which can be accomplished by using OpenzeppelinsPausable contract module
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.