Tadle

Tadle
DeFiFoundry
27,750 USDC
View results
Submission Details
Severity: medium
Valid

[M-1] Protocol doesnot support Fee-on-Transfer and Rebasing tokens

Relevant Links

https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/TokenManager.sol#L93-L99
https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/TokenManager.sol#L233-L262

Summary

As the contest README states:

Compatibilities:
Blockchains:
- Ethereum/Any EVM
Tokens:
- ETH
- WETH
@> - ERC20 (any token that follows the ERC20 standard)

So all tokens following ERC20 standard should be compatible and the token needs to be whitelisted by the protocol. However, FoT tokens and Rebasing tokens aren't compatible.

Vulnerability Details

TokenManager::_transfer function checks the before and after balances of both _from and _to addresses, and reverts if the exact _amount isn't transferred.

function _transfer(
address _token,
address _from,
address _to,
uint256 _amount,
address _capitalPoolAddr
) internal {
@> uint256 fromBalanceBef = IERC20(_token).balanceOf(_from);
@> uint256 toBalanceBef = IERC20(_token).balanceOf(_to);
if (
_from == _capitalPoolAddr &&
IERC20(_token).allowance(_from, address(this)) == 0x0
) {
ICapitalPool(_capitalPoolAddr).approve(address(this));
}
_safe_transfer_from(_token, _from, _to, _amount);
@> uint256 fromBalanceAft = IERC20(_token).balanceOf(_from);
@> uint256 toBalanceAft = IERC20(_token).balanceOf(_to);
@> if (fromBalanceAft != fromBalanceBef - _amount) {
revert TransferFailed();
}
@> if (toBalanceAft != toBalanceBef + _amount) {
revert TransferFailed();
}
}

This doesn't allow some tokens to work like FoT and Rebasing tokens which will cause the transaction to revert.

Impact

Likelyhood: Low/Medium - Requires FoT or Rebasing tokens to be whitelisted, however an exhaustive whitelist isn't provided in the contest README.

Impact: High - It simply won't work.

Overall severity is medium.

Tools Used

Manual Review

Past Submission

Recommendations

Clearly state which tokens will be whitelisted, or add support for FoT and Rebasing tokens.

Updates

Lead Judging Commences

0xnevi Lead Judge over 1 year ago
Submission Judgement Published
Validated
Assigned finding tags:

finding-TokenManager-FOT-Rebasing

Valid medium, there are disruptions to the ability to take market actions. The following functions will be disrupted without the possibiliy of reaching settlement, since the respective offers cannot be created/listed regardless of mode when transferring collateral token required to the CapitalPool contract or when refunding token from user to capital pool during relisting. So withdrawal is not an issue - `createOffer()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L96-L102) - `listOffer()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L355-L362) - `relistOffer()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L515-L521) - `createTaker()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L831-L836) I believe medium severity is appropriate although the likelihood is high and impact is medium (only some level of disruption i.e. FOT tokens not supported and no funds at risk)

Support

FAQs

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

Give us feedback!