Tx Origin
What it detects
This detector scans for contracts that reference tx.origin
when checking permissions or determining behavior. Because tx.origin
represents the original external account in a call chain, it is unreliable for authenticating the immediate caller.
Typical symptoms
require(tx.origin == owner)
or similar statements- Contract addresses derived using
tx.origin
Solidity snippet (v0.8.25)
pragma solidity ^0.8.25;
contract OriginCheck {
address public owner;
function access() external {
// Unsafe authorization
require(tx.origin == owner, "forbidden");
}
}
Why it matters on EVM
Using tx.origin
exposes contracts to phishing attacks where a user is tricked into initiating a transaction that indirectly invokes the vulnerable contract.