Reino: Security Features

Segurança de software não é o mesmo que software de segurança. Aqui, estamos interessados em tópicos como autenticação, controle de acesso, confidencialidade, criptografia e gestão de privilégios.

Authorization Bypass: tx.origin

Abstract
Uma função usa a variável global tx.origin para fins de autorização.
Explanation
A variável global tx.origin contém o endereço da conta de onde a transação se origina.

Se um contrato inteligente, S1, recebe uma transação de uma conta, A1, e então S1 chama outro contrato inteligente, S2, e dentro de S2, tx.origin contém o endereço da conta, A1, usada para chamar S1. Se a intenção de tx.origin for verificar a autorização de A1, essa autorização será ignorada.

Agora, se um invasor puder enganar um usuário para que envie uma transação em um contrato malicioso, ele invocará o contrato vulnerável onde o usuário está autorizado via tx.origin, então tx.origin manterá o endereço da conta do usuário que iniciou a transação e a autorização será ignorada.

Exemplo 1: O código a seguir exige que o proprietário do contrato (previamente definido no construtor) seja o mesmo que tx.origin antes de transferir fundos para um endereço fornecido.

Se um invasor conseguir enganar o proprietário do contrato para que envie uma transação para um contrato malicioso que chama imediatamente a função sendTo no contrato vulnerável, então a condição na instrução require será verdadeira e os fundos serão transferidos para qualquer endereço especificado pelo contrato do invasor ao chamar sendTo.


function sendTo(address receiver, uint amount) public {
require(tx.origin == owner);
receiver.transfer(amount);
}
References
[1] Enterprise Ethereum Alliance No tx.origin
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 4
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 4
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 3
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 477
[7] Standards Mapping - Smart Contract Weakness Classification SWC-115
desc.structural.solidity.swc115