When the owner decides to remove a strategy or update strategies the internal StakingPool::_updateStrategyRewards() is called to distribute rewards/fees based on changes in balance since last distribution. However a malicious user can DoS the process.
Looking at the _updateStrategyRewards():
We can see that ERC677's transferAndCallFrom() is called to handle token transfers, which also triggers the callback function onTokenTransfer() if the recipient is a smart contract:
However if a maliciously constructed smart contract implements the onTokenTransfer() to revert when it's triggered the whole distribution will be undone, hence the update or removal of strategy will also be prevented DoS-ing the protocol owner. Here is the mentioned code:
A malicious user can DoS the protocol owner, which stops the essential workflow of the project, because he will not be able to update or remove a strategy when it's underperforming for example.
Manual Review
I would suggest to implement pull-over-push mechanism or wrap the callback function in a try/catch block to handle such situations
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.