Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: medium
Valid

Redundant and Potentially Failing Self-Transfer in RAACReleaseOrchestrator which allow beneficiary front-running

Summary

RAACReleaseOrchestrator::emergencyRevoke transfer RAAC to itself when revoking a schedule. It's useless and can revert for nothing

Vulnerability Details

function emergencyRevoke(address beneficiary) external onlyRole(EMERGENCY_ROLE) {
VestingSchedule storage schedule = vestingSchedules[beneficiary];
if (!schedule.initialized) revert NoVestingSchedule();
uint256 unreleasedAmount = schedule.totalAmount - schedule.releasedAmount;
delete vestingSchedules[beneficiary];
if (unreleasedAmount > 0) {
raacToken.transfer(address(this), unreleasedAmount); // useless and can revert
emit EmergencyWithdraw(beneficiary, unreleasedAmount);
}
emit VestingScheduleRevoked(beneficiary);
}
  1. Protocol wants to revoke a malicious beneficiary that has pending rewards

  2. RAACReleaseOrchestrator has no raacToken

  3. Protocol sends Raac to orchestrator to be able to emergencyRevoke()

  4. Malicious beneficiary front-run Protocol by calling release() and get part or all of his schedule

Impact

Potential reversion if contract do not have tokens
Front running possible from malicious beneficiary

Tools Used

Recommendations

Remove the self transfer.

Updates

Lead Judging Commences

inallhonesty Lead Judge 6 months ago
Submission Judgement Published
Validated
Assigned finding tags:

RAACReleaseOrchestrator::emergencyRevoke sends revoked tokens to contract address with no withdrawal mechanism, permanently locking funds

inallhonesty Lead Judge 6 months ago
Submission Judgement Published
Validated
Assigned finding tags:

RAACReleaseOrchestrator::emergencyRevoke sends revoked tokens to contract address with no withdrawal mechanism, permanently locking funds

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.