Core Contracts

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

Incorrect Token Recovery in Emergency Revoke

Summary

emergencyRevoke attempts to transfer unreleased tokens to the contract itself via raacToken.transfer(address(this), ...), which is a no-op and leaves tokens stranded.

Impact

Revoked tokens remain in the contract indefinitely, unusable by anyone, effectively burning them.

Vulnerability Details

The transfer call mistakenly uses address(this) as the destination, failing to recover tokens.

-> creating scenarios demonstrating the impact

  • unreleasedAmount = 10,000 tokens.

  • After emergencyRevoke, the 10,000 tokens stay in the contract with no withdrawal mechanism, permanently lost.

Recommendations

Transfer tokens to a designated recovery address (e.g., treasury):

address public recoveryAddress; // Set via constructor
function emergencyRevoke(...) external ... {
...
raacToken.transfer(recoveryAddress, unreleasedAmount);
}
Updates

Lead Judging Commences

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