stake.link

stake.link
DeFiHardhatBridge
27,500 USDC
View results
Submission Details
Severity: high
Valid

tokenApprovals not deleted.

Summary

tokenApprovals not deleted.

Vulnerability Details

when user uses handleOutgoingRESDL to transfer token from Chain A to Chain B the tokenApprovals is not deleted.
if user A approves token 1 to user B then ccipController calls PrimarySDL handleOutgoingRESDL tokenApprovals is not deleted.
so now if token 1 transfered from Chain B to Chain A the user B still has approval to transfer token even in case the owner changed.

Impact

Tools Used

Recommendations

delete toeknApprovals.

function handleOutgoingRESDL(
address _sender,
uint256 _lockId,
address _sdlReceiver
)
external
onlyCCIPController
onlyLockOwner(_lockId, _sender)
updateRewards(_sender)
updateRewards(ccipController)
returns (Lock memory)
{
Lock memory lock = locks[_lockId];
delete locks[_lockId].amount;
delete lockOwners[_lockId];
balances[_sender] -= 1;
+ if (tokenApprovals[_lockId] != address(0)) delete tokenApprovals[_lockId];
uint256 totalAmount = lock.amount + lock.boostAmount;
effectiveBalances[_sender] -= totalAmount;
effectiveBalances[ccipController] += totalAmount;
sdlToken.safeTransfer(_sdlReceiver, lock.amount);
emit OutgoingRESDL(_sender, _lockId);
return lock;
}
Updates

Lead Judging Commences

0kage Lead Judge almost 2 years ago
Submission Judgement Published
Validated
Assigned finding tags:

stale-approval

Support

FAQs

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