Core Contracts

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

Tokens Get Locked in RAACReleaseOrchestrator During Emergency Revoke

Summary :

The emergencyRevoke function in RAACReleaseOrchestrator transfers unvested tokens back to the contract itself (address(this)) without any mechanism to redistribute or manage these tokens.

Vulnerability Details :

the issue can appear here :

function emergencyRevoke(address beneficiary) external onlyRole(EMERGENCY_ROLE) {
VestingSchedule storage schedule = vestingSchedules[beneficiary];
uint256 unreleasedAmount = schedule.totalAmount - schedule.releasedAmount;
@> delete vestingSchedules[beneficiary];
if (unreleasedAmount > 0) {
@> raacToken.transfer(address(this), unreleasedAmount); // Tokens already in contract get transferred to itself
emit EmergencyWithdraw(beneficiary, unreleasedAmount);
}
}

so When emergencyRevoke is called:

delete vestingSchedules[beneficiary];
raacToken.transfer(address(this), unreleasedAmount);

The schedule is deleted but the categoryUsed amount remains unchanged.therefore For new vesting schedules:

function createVestingSchedule(...) {
uint256 newCategoryTotal = categoryUsed[category] + amount;
if (newCategoryTotal > categoryAllocations[category]) revert CategoryAllocationExceeded();
categoryUsed[category] = newCategoryTotal;
}


The categoryUsed tracking means:

  • Previous allocations still count against the category limit

  • New schedules must fit within remaining allocation

  • Revoked tokens can't be reused because their allocation remains counted

Impact :

tokens transferred to address(this) by emergencyRevoke are truly locked.

Tools Used :

Manuel review.

Updates

Lead Judging Commences

inallhonesty Lead Judge 7 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 7 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.

Give us feedback!