Core Contracts

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

Self-Delegation in boost controller

Summary

The current implementation allows users to delegate their boost to themselves (to == msg.sender). This creates a potential vector for boost manipulation as users could artificially inflate their apparent boost power through self-referential delegation.

Affected code

function delegateBoost(
address to,
uint256 amount,
uint256 duration
) external override nonReentrant {
// Existing validation checks
if (to == address(0)) revert InvalidPool();
// Missing check for self-delegation
}

Vulnerability Details

  1. A user calls delegateBoost() with their own address as to parameter

  2. Contract stores delegation in userBoosts[msg.sender][msg.sender]

  3. System treats this as valid delegation:

  • delegation.amount increases user's apparent boost

  • No cooldown/limit on self-delegation renewals

  • Delegation expiry can be repeatedly extended

Result of delegation

UserBalance = 1000
SelfDelegate(1000) → ApparentBalance = 1000 + 1000 = 2000

Impact

This allows the attacker to double-count their voting power.
Users could bypass delegation limits by creating circular references

  • Distortion of boost calculations

  • Possible inflation of voting power metrics

  • Undermining of delegation incentive structure

Malicious Flow

  1. User with 1000 veRaac balance

  2. calls delegateBoost(self, 1000,365days)

  3. System now accounts for:

  • Base balance: 1000

  • Delegated balance: 1000

  • Total perceived: 2000 (2x inflation)

Where :

  • UserVP = Actual voting power (1000)

  • DelegatedVP = Self-delegated (1000)

  • TotalVP = 1000 (real) + 1000 (fake) = 2000

Recommendations

function delegateBoost(
address to,
uint256 amount,
uint256 duration
) external override nonReentrant {
if (paused()) revert EmergencyPaused();
if (to == address(0)) revert InvalidPool();
// Prevent self-delegation
if (to == msg.sender) revert InvalidDelegatee();
if (amount == 0) revert InvalidBoostAmount();
// ... existing code ...
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

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

Give us feedback!