An audit of a standard tx.origin anti-pattern — an authorization flaw that enables phishing.
require(tx.origin == owner) — phishing can bypass it
Using tx.origin for authorization instead of msg.sender:
tx.origin is still the owner (transaction originator), so the check passestx.origin is the transaction's originator, not the caller — any intermediate contract inherits the owner's authority.
High — "tx.origin used for auth — phishing can bypass; use msg.sender." Also flags the voting variant: governance weight computed from tx.origin lets a phished user's votes be cast by an attacker.
The Solidity docs themselves warn against tx.origin for auth. AI catches it wherever it's used — payments, governance, ownership.