Core Contracts

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

User can loss his funds if token transfer is unsuccesful to recipient.

Summary

Code snippet of Treasury.sol::withdraw.

function withdraw(
address token,
uint256 amount,
address recipient
) external override nonReentrant onlyRole(MANAGER_ROLE) {
if (token == address(0)) revert InvalidAddress();
if (recipient == address(0)) revert InvalidRecipient();
if (_balances[token] < amount) revert InsufficientBalance();
_balances[token] -= amount;
_totalValue -= amount;
@ -> IERC20(token).transfer(recipient, amount);
emit Withdrawn(token, amount, recipient);
}

transfer() function will not revert, even if tranfer is unsuccesful.

Vulnerability Details

  1. User hits withdraw function.

  2. transfer of funds to recipeint is unsucessful, due to some reason, but no revert.

  3. _balances[token] -= amount; changed. but it shouldn't.

Impact

Internal accounting and actual balance discrepancy.

Tools Used

Manual

Recommendations

Use openzepplin safeTransfer instead.

Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Known issue
inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Invalidated
Reason: Known issue

Support

FAQs

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

Give us feedback!