Permit 签名漏洞(EIP-2612)|从离线签名到钓鱼防御完整解读

EIP-2612 Permit 是「ERC20 离线签名授权」——不上链不花 Gas 但效力等同 approve。本文按 6 个维度解读:Permit 工作原理、Permit2 与原版区别、为什么钓鱼者爱用、MetaMask 怎么显示、防御策略。

发布于 2026-05-08 · 约 8 分钟 · Token approval

EIP-2612 Permit 漏洞是什么?直接答:Permit 是「ERC20 离线签名授权」标准——签名包含 owner、spender、value、deadline、v、r、s 七个参数。签名后任何人都能调 permit 函数把这个授权上链——不上链不花 Gas。漏洞核心:用户在不熟悉网站签 Permit 后,钓鱼者拿签名上链,直接调 transferFrom 转走资产。MetaMask 弹窗里 0xd505accf 是 Permit selector——看到立即警觉。

如果你识别完 Permit 钓鱼后想转资产到交易所,可顺路准备 币安官网 的实名账号,并用 币安官方App 看充币地址。下载入口在 下载页

Permit 工作原理

A:Permit 把传统 approve 拆成「链下签名 + 链上调用 permit」两步

步骤 链上 vs 链下
1. 用户对消息签名 链下
2. 把签名 + 消息内容发给对手方 链下(如发给 DEX 后端)
3. 对手方调用 token 合约的 permit() 方法 链上(对手方付 Gas)
4. permit() 验证签名后设置 allowance 链上
5. 对手方立即调 transferFrom 转走资产 链上

A:Permit 设计初衷是「让用户不用付 Gas」——但被钓鱼者利用「不付 Gas 不上链 = 用户感觉只是签了个名」的心理。

Permit 签名结构

字段 含义
owner 你(要授权方)
spender 接收授权方
value 授权额度
deadline 签名过期时间戳
nonce 防重放
v, r, s 签名分量

第 1 步:识别 MetaMask 弹窗里的 Permit

新版 MetaMask 显示「Sign Permit」字样——

显示 含义
Sign Permit EIP-2612 Permit
Sign Typed Data EIP-712 结构化签名(可能是 Permit 也可能不是)
Sign Message 普通消息签名
Approve 链上 approve(要花 Gas)

calldata 4byte selector:

selector 方法
0xd505accf permit
0x36568abe permit2
0x095ea7b3 approve(链上)

第 2 步:Permit 钓鱼的具体场景

场景 套路
假冒 OpenSea 客服 Discord 私信「点这里验证 NFT」
仿冒空投网站 「领取 1000 USDT 空投」
仿冒 DEX 与正版 DEX 域名相似
假 NFT 元数据链接 NFT 卡片里的「点这里」链接

A:所有套路本质都是「让你签个看似无害的名」——而你以为是「登录」「验证」「领取」时实际是 Permit。

第 3 步:Permit2 与原版 Permit 的区别

Uniswap 团队推出的 Permit2:

维度 EIP-2612 Permit Permit2
适用 Token 只有支持 EIP-2612 的(USDC 支持,USDT 不支持) 任意 ERC20
中间合约 直接 ERC20 Permit2 合约
必须先 approve 一次 是(给 Permit2 一次 Unlimited)
后续 swap 离线签 离线签

A:Permit2 用「先 approve Permit2 + 后续每次离线签」组合——一次链上 + 多次链下。风险集中在 Permit2 合约(已审计)。

第 4 步:哪些 Token 支持原版 Permit?

Token EIP-2612 支持
USDC
DAI 是(自定义版本)
USDT 否(USDT 不支持 EIP-2612)
WETH
大多数新 ERC20

A:USDT 钓鱼通常用「approve 链上签名」或「Permit2」——纯 EIP-2612 Permit 偷不走 USDT。

第 5 步:防御策略 5 条

策略 说明
MetaMask 弹窗看 Method 字段 是 Sign Permit 立即警觉
不在不熟悉网站签任何 Typed Data 永远不会损失
主钱包不连任何 DApp 攻击面 = 0
用钱包扩展(Pocket Universe / Stelo / Wallet Guard) 自动预警 Permit 钓鱼
硬件钱包 + 仔细看屏幕 Ledger 屏幕显示完整 Permit 内容

第 6 步:被钓 Permit 后的紧急处置

A:Permit 一旦签了,攻击者有 deadline 时间窗能调用——最快立即撤销 + 转资产

步骤 操作 时间
1 立即转所有可移资产到新钱包 5 分钟
2 在 Approval Checker 撤所有授权 视授权数
3 调用 increaseNonce 让原 Permit 失效(部分 Token 支持) 1 笔 Gas
4 等 deadline 过 视签的 deadline 而定

详见 Token approval 分类的钓鱼授权识别篇。

实战:拒绝 Permit 钓鱼的真实弹窗

例:你点了一个「免费 NFT mint」链接 → MetaMask 弹窗显示——

You are signing
This site is requesting access to your USDC

Method: Permit
Token: USDC
Spender: 0x... (陌生地址)
Value: 999999999999 (Unlimited)
Deadline: 1730000000 (远期)

A:任何一项不是预期的就立刻 Reject——Spender 是陌生地址 + Value 是 Unlimited + Deadline 远期 = 100% 钓鱼

风险提示

Permit 是 EIP-2612 标准,未来会越来越普及——用户必须养成识别习惯。钱包警告功能能防一部分但不全——最终防线是用户自己慢一点签。

如果资产想出金,可借助 币安官网 走 C2C。

实操核对清单

  • [ ] 已了解 Permit 离线签 + 链上调用机制
  • [ ] 已记 0xd505accf selector
  • [ ] MetaMask 弹窗 Method 字段每次看
  • [ ] Spender 是陌生地址立即 Reject
  • [ ] 装钱包安全扩展(Pocket Universe 等)
  • [ ] 硬件钱包屏幕仔细看

一站式回顾

A:EIP-2612 Permit = ERC20 离线签名授权——便利但被钓鱼者爱用。核心 4 个识别:Method=Permit、Spender 看清楚、Value 看是不是 Unlimited、Deadline 看是不是合理。核心 1 个心法:不熟悉网站永远不签 Permit——因为损失等同 approve 链上签名

如果想了解 ERC20 与 ERC721 授权机制差异,下一步建议看 ERC20 vs ERC721 授权机制篇。

常见问题

Permit 不上链不花 Gas,那钓鱼者怎么用?

A:钓鱼者拿到签名后自己付 Gas 上链调 permit + transferFrom——他们花一次 Gas 偷你的钱,划算。

我签了 Permit 但还没被攻击,能撤销吗?

A:部分 Token 可以。调用代币合约的 increaseNonce 或类似方法让旧签名 nonce 失效——新签名变得无效或转走 Permit 涉及的 Token 让 transferFrom 失败

Permit 比 approve 更危险吗?

A:钓鱼场景下更危险——因为「不上链不花 Gas」让用户感觉「只是签个名」实际威力等同

MetaMask 能识别 Permit 警告吗?

A:新版能。集成 Blockaid 等服务的 MetaMask 对已知钓鱼合约的 Permit 会显示红色警告新出现的钓鱼可能滞后

Permit2 比原版 Permit 安全吗?

A:差不多——Permit2 把风险集中在自身合约(已审计),原版 Permit 分散到每个 Token 合约。两者都依赖「用户细看签名」

USDT 不支持 Permit,是不是安全?

A:USDT 不能被 Permit 钓鱼,但能被传统 approve / setApprovalForAll 钓鱼安全程度不见得真的更高

硬件钱包能防 Permit 吗?

A:能防一部分。Ledger / Trezor 屏幕显示完整 Permit 内容——用户能看清楚但仍依赖用户自己审 Spender 是否预期

文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认 EIP-2612 Permit 标准、Permit2 普及与 USDC/USDT 支持状态未变)。