10.7.1 Permit2 恶意签名攻击原理

什么是 Permit2 ?

在之前,使用 UniSwap 进行交易,每个交易对你都需要对代币额度进行重新授权。比如你试图使用USDC 购买 WBTC 和 UNI ,WBTC/USDC 和 UNI/USDC 是两个不同的合约,你需要进行两次 Approve 操作,这增加了管理难度和用户的 GAS成本。

于是 UniSwap 提出了一个统一管理代币额度的想法,也就是部署一个 Permit2 合约,专门用来接受用户的授权,然后它只做一件事情,检验交易是否包含了“被代币拥有者签名的明文许可”,有的话就允许扣款。

在 2023 年 Permit2 上线之后,你想要购买 WBTC 和 UNI 的交易,在第一次时仍然需要发送一笔 Approve 交易,只不过这次是向 Permit2 合约授权一个额度,Permit2 本身是诚实可信的,用户出于对 UniSwap 的信任也往往会授权一个较大额度,这没什么问题。然后你就可以签名一段明文文本,允许 WBTC/USDC 和 UNI/USDC 两个交易对的地址扣除你账户里的一定 USDC 进行交易,这两笔签名都不需要上链,大大节省了客户的交易成本。

Untitled

但美好的愿望也存在漏洞,UniSwap 不只希望 Permit2 成为一个个 Swap 交易对的前置环节,它这种链下签名管理额度的更好方式能成为整个智能合约的基建,所以开放了所有人都能使用。那么黑客就可能为自己的恶意合约也套上 Permit2 ,然后通过钓鱼网站诱导用户签下一份“我允许你把我的代币全转走”的“合同”,轻易地掏空用户的某种代币。

10.7.2 Permit2 恶意签名攻击的具体特征及防范

Permit2 的授权合同不是高风险的 Eth_Sign,更像 Opensea 的 Seaport 合约,是一段明文的文本。

它包含了一下这些信息:

<aside> 💡 owner: 某代币的拥有者地址 spender: 被授权的使用者的地址 value: 数量 nonce: nonce编号 deadline:有效期

</aside>

Untitled

引用 菠菜菠菜:签名就被盗?用过Uniswap的请警惕!揭秘Permit2签名钓鱼

<aside> 👉 1、所幸这种攻击,签名的内容也是有特定格式并明文出现的,用户在签名该文本时,应当留意签名文本的内容,是否可疑。 2、注意网站与 MetaMask 弹出的关联方是否合理。

</aside>

10.7.3 Permit 相关的小知识