The RAACReleaseOrchestrator::emergencyRevoke() function, designed for emergency revocation of vested tokens, mistakenly transfers the tokens to itself (address(this)) without any mechanism to recover or redistribute these tokens, resulting in a permanent reduction of the token supply.
The issue exists in the emergencyRevoke function:
The contract has predefined token allocations for different categories:
When emergencyRevoke is called, it calculates the unreleased tokens and transfers them to the contract itself. However, the contract lacks any functionality to transfer these tokens out or redistribute them, effectively locking them permanently.
High:
Tokens are permanently locked, reducing the total circulating supply
The intended token distribution percentages are disrupted
Low - Emergency revokes do not happen regularly.
Implement a recovery mechanism for locked 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.