Detect when msg.sender
is not used as from
in transferFrom
.
ReseedBean::mintAndSync(BeanstalkERC20,address,uint256,uint256)
(contracts/beanstalk/init/reseed/L2/ReseedBean.sol#213-224) uses arbitrary from
in transferFrom: IERC20(nonBeanToken).safeTransferFrom(OWNER,address(well),tokenAmount)
(contracts/beanstalk/init/reseed/L2/ReseedBean.sol#221)
LibTransfer::transferToken(IERC20,address,address,uint256,LibTransfer.From,LibTransfer.To)
(contracts/beanstalk/migration/L1Libraries/LibTransfer.sol#32-48) uses arbitrary from
in transferFrom: token.safeTransferFrom(sender,recipient,amount)
(contracts/beanstalk/migration/L1Libraries/LibTransfer.sol#42)
LibTransfer::receiveToken(IERC20,uint256,address,LibTransfer.From)
(contracts/beanstalk/migration/L1Libraries/LibTransfer.sol#50-69) uses arbitrary from in transferFrom: token.safeTransferFrom(sender,address(this),amount - receivedAmount)
(contracts/beanstalk/migration/L1Libraries/LibTransfer.sol#67)
LibFertilizer::addUnderlying(uint256,uint256,uint256)
(contracts/libraries/LibFertilizer.sol#85-143) uses arbitrary from
in transferFrom: IERC20(barnRaiseToken).transferFrom(LibTractor._user(),address(this),uint256(tokenAmountIn))
(contracts/libraries/LibFertilizer.sol#116-120)
LibTransfer::transferToken(IERC20,address,address,uint256,LibTransfer.From,LibTransfer.To)
(contracts/libraries/Token/LibTransfer.sol#29-45) uses arbitrary from
in transferFrom: token.safeTransferFrom(sender,recipient,amount)
(contracts/libraries/Token/LibTransfer.sol#39)
LibTransfer::receiveToken(IERC20,uint256,address,LibTransfer.From)
(contracts/libraries/Token/LibTransfer.sol#47-66) uses arbitrary from
in transferFrom: token.safeTransferFrom(sender,address(this),amount - receivedAmount)
(contracts/libraries/Token/LibTransfer.sol#64)
UnripeFacet::addMigratedUnderlying(address,uint256)
(contracts/beanstalk/barn/UnripeFacet.sol#284-295) uses arbitrary from
in transferFrom: IERC20(s.sys.silo.unripeSettings[unripeToken].underlyingToken).safeTransferFrom(LibTractor._user(),address(this),amount)
(contracts/beanstalk/barn/UnripeFacet.sol#289-293)
In each scenario, the attacker can call the function and specify the user's address as from
in transferFrom
allowing the attacker to transfer the user's funds to himself.
Funds can be stolen if the attacker calls the function and specifies the user's address
Slither
Use msg.sender
as from
in transferFrom
.
For example:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.