salvorio / salvor-contracts

0 stars 0 forks source link

[SLE-04S] Improper Invocations of EIP-20 `transfer` / `transferFrom` #22

Open HKskn opened 3 months ago

HKskn commented 3 months ago

SLE-04S: Improper Invocations of EIP-20 transfer / transferFrom

Type Severity Location
Standard Conformity SalvorLendingERC20.sol:L158, L183, L211

Description:

The linked statements do not properly validate the returned bool values of the EIP-20 standard transfer & transferFrom functions. As the standard dictates, callers must not assume that false is never returned.

Impact:

If the code mandates that the returned bool is true, this will cause incompatibility with tokens such as USDT / Tether as no such bool is returned to be evaluated causing the check to fail at all times. On the other hand, if the token utilized can return a false value under certain conditions but the code does not validate it, the contract itself can be compromised as having received / sent funds that it never did.

Example:

IERC20Upgradeable(_loanOffer.collateralizedAsset).transferFrom(msg.sender, address(this), collateralizedAmount);

Recommendation:

Since not all standardized tokens are EIP-20 compliant (such as Tether / USDT), we advise a safe wrapper library to be utilized instead such as SafeERC20 by OpenZeppelin to opportunistically validate the returned bool only if it exists in each instance.

HKskn commented 3 months ago

Fixed