code-423n4 / 2021-06-tracer-findings

1 stars 0 forks source link

SafetyWithdraw ERC20 return values not checked #98

Closed code423n4 closed 3 years ago

code423n4 commented 3 years ago

Handle

cmichel

Vulnerability details

The ERC20.transfer() and ERC20.transferFrom() functions return a boolean value indicating success. This parameter should be checked for success. The SafetyWithdraw.withdrawERC20Token function does not check the return value:

function withdrawERC20Token(
    address tokenAddress,
    address to,
    uint256 amount
) external override onlyOwner {
    IERC20(tokenAddress).transfer(to, amount);
}

Impact

Some tokens do not revert if the transfer failed but return false instead. Tokens that don't actually perform the transfer and return false are still counted as a correct transfer.

Recommended Mitigation Steps

We recommend using OpenZeppelin’s SafeERC20 versions with the safeTransfer and safeTransferFrom functions that handle the return value check as well as non-standard-compliant tokens.

raymogg commented 3 years ago

Duplicate of #115

cemozerr commented 3 years ago

Marking this as it seems to be duplicate of #96, from the same user.