The Five Signature Phishing Patterns of 2026, and How to Spot Each at a Glance
I keep saying one line: wallets drained in 2026 mostly lose money not to leaked private keys, but to signature phishing. Across post-mortems for the past twelve months, off-chain signature phishing accounts for more than half of every wallet loss above five figures.
But “signature phishing” is not one attack. It is a family of attacks. They use different protocol fields, different contract entry points, and different wallet prompts to achieve the same goal — getting you to authorize someone else to move your assets. This post walks through the five most common variants and the visual cues for each.
A shared property first
All signature phishing shares one premise: none of it asks for your private key. What it asks for is a signature made by your private key over some piece of data. Once that signature exists, the attacker has a valid credential to call “transfer,” “sell,” or “bridge” against your assets.
Which means:
- You never see this transaction “initiated” on-chain.
- Your wallet balance just disappears at some later moment.
- You believe you did nothing.
That is why signature phishing is far scarier than transfer phishing.

Pattern 1: setApprovalForAll (NFT class)
setApprovalForAll(operator, true) is the ERC-721 / ERC-1155 switch that lets one address transfer all of your NFTs of that collection. Once it goes to an attacker contract, your entire NFT portfolio on that chain can be swept anytime.
Cues:
- The wallet popup says
setApprovalForAll, with an operator address you do not recognize. - The context is a “free mint,” “airdrop,” or “snapshot claim.”
- The page nudges you to “sign a free thing first,” but that signature is not the mint itself.
I only allow this call on two marketplaces I deeply trust, and even then I read the calldata each time. Anywhere else, I refuse.
Pattern 2: ERC-20 unlimited approve
This is the ERC-20 counterpart of setApprovalForAll: you give a contract approve(spender, type(uint256).max), effectively letting it move all your balance of that token.
Cues:
- The amount field shows an abnormally huge number or
unlimited. - The contract name does not match what you want to do — for example you want to swap 1 USDC and you are asked to approve something that looks like a router but is not the real one.
- The wallet warns of a follow-up transfer, but that was never your intent.
One rule on defense: never sign unlimited approvals. Paying gas for a fixed-amount approve is worth it.
Pattern 3: Permit / EIP-2612 off-chain signatures
This is the most dangerous family of 2026. Permit lets you grant token approvals with a single EIP-712 off-chain signature, no on-chain transaction needed.
Why is it dangerous?
- It leaves no gas footprint — no “approve” record shows on the explorer.
- It bypasses standard wallet warnings — many wallets render EIP-712 typed data poorly.
- It is immediately exploitable — the attacker calls permit followed by transferFrom whenever they choose.
Cues:
- The popup shows
Permit,spender,deadline,valuefields. - The site says you can “just sign something gasless” to continue — this is the key signal.
- The wallet shows “Sign Typed Data” or “EIP-712”.
My rule: any structured signature I cannot read in plain language gets rejected.
Broader context on why signature phishing is so frequent is in the Safe Labs 5,000 drainer addresses post and the January $311M phishing breakdown. Both list Permit as a leading driver.
Pattern 4: Seaport / Permit2 aggregated signatures
OpenSea’s Seaport and Uniswap’s Permit2 bundle multiple approvals into a single signature, intended to improve UX but also providing attackers with a new signature phishing template.
Spoofed versions look completely normal: an aggregator DEX or NFT marketplace asks you to “sign an approval,” the popup shows Seaport/Permit2 keywords, and you sign because it “looks familiar.” But the payload may contain:
- Approvals for USDC, USDT, and WETH all going to an attacker contract.
- Transfer rights for several NFTs handed over at the same time.
Cues:
- The signature touches multiple tokens / multiple contracts at once.
- You only want to do one thing (say, swap one token), but the granted scope is far broader than necessary.
- The signature’s signing origin is not the official domain you are interacting with (hover the spender field to check).
My handling: for any aggregated signature, first confirm spender and token list match the minimum-necessary principle.

Pattern 5: Cross-chain bridge / meta-transaction signatures
This one is newer. The attacker wraps the signature as a “bridge instruction” or a “meta-transaction.” You think you are signing a transfer intent on one chain, but the attacker uses that signature on another chain or on a different contract through a relayer.
Cues:
- The popup contains
bridge,relayer,forwarder, orexecuteMetaTransactionkeywords. - The signature references multiple chain IDs or a chainId that looks odd.
- The UI implies action on chain A, but the underlying data points to chain B.
Most users cannot fully parse these in the popup. The safest stance is “official bridges only + small test transfers first” for meta-transactions and bridges.
A cheat-sheet of the five patterns
| Pattern | Frequent fields | One-glance signal |
|---|---|---|
| setApprovalForAll | operator, approved=true | NFT context + unknown operator |
| approve unlimited | spender, value=uint256.max | huge number or “unlimited” |
| Permit / EIP-2612 | spender, deadline, value | “just sign gaslessly to continue” |
| Seaport / Permit2 | multi-token / multi-amount | one signature covering many approvals |
| Bridge / meta-tx | bridge, relayer, chainId | multi-chain or relayer execution |
Keep this table in your notes app. It beats memorizing any long post.
Three small habits that make patterns visible
After all five patterns, the daily practice boils down to three things:
- Always read the calldata on the hardware wallet screen before tapping confirm. Even if you cannot decode it, you can spot “weird amount” or “unfamiliar contract.”
- Turn blind signing off. Any site asking you to enable blind signing is flagged immediately.
- Treat “just sign this for free” as suspicious by default. A gasless signature is still a signature.
Wallet safety is a habits problem, not a tools problem. I have written basic crypto security habits as the entry; this post zooms into the signature layer.
Building the recognition into muscle memory
My personal method: give myself five seconds before any signature. In those five seconds the brain does three things:
- What do I want to do right now?
- Do the popup fields map one-to-one to that intent?
- Are spender and amount at the minimum-necessary scope?
Five seconds will not stop every attack, but it stops most “impulse signs.” The vast majority of drained wallets never gave themselves those five seconds.
Signature attacks will keep evolving, but this self-questioning structure stays stable. Once it is wired into your muscle memory, you have pulled yourself out of a big chunk of the 2026 victim pool.
This article is for education only and is not financial advice. Crypto is volatile and risky — only ever risk what you can afford to lose.