H-01 highlighted that during upkeep, the SALT to teamVestingWallet goes via upkeep contract through the call to OZ's VestingWallet::release() function which does not have any access control.
Hence, anyone could call release() directly without the knowledge of upkeep and hence locking the SALT forever.
Mitigation
The SALT is now directly sent to the teamWallet with no intermediary, thus mitigating the issue.
Even if release() is called directly by a user now, the correct amount is sent to the teamWallet with no disruption visible in the next upkeep() call.
Lines of code
Vulnerability details
Summary
H-01 highlighted that during upkeep, the SALT to
teamVestingWallet
goes viaupkeep
contract through the call to OZ'sVestingWallet::release()
function which does not have any access control. Hence, anyone could callrelease()
directly without the knowledge ofupkeep
and hence locking the SALT forever.Mitigation
The SALT is now directly sent to the teamWallet with no intermediary, thus mitigating the issue. Even if
release()
is called directly by a user now, the correct amount is sent to theteamWallet
with no disruption visible in the nextupkeep()
call.Conclusion
LGTM