Skip to main content

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.