The emergencyRevoke function transfers unreleased tokens to the contract itself (address(this)). However, there is no function to recover these tokens, causing them to become permanently locked in the contract.
When emergencyRevoke is called, the remaining unvested tokens of a revoked beneficiary are transferred to the contract:
Problem: The contract lacks a mechanism to withdraw or reallocate these tokens.
As a result, tokens are permanently stuck in the contract, making them unrecoverable unless an external upgrade or admin intervention is performed.
Locked Funds: Any tokens revoked through emergencyRevoke become permanently inaccessible.
Manual Code Review
Add a function to allow the admin to recover stuck tokens.
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.