链下签名也能钓走你的 Token?—— Permit 签名分析
By:Lisa
背景
5 月 11 日,推特用户 "pineapple.eth" 发推表示自己因误点钓鱼网站(syncswap[.]network)致钱包被盗,损失超 100 美元。
(https://twitter.com/0xBigPineapple/status/1656420711919960065)
虽然损失数额不算大,但这里面藏着巨大的安全风险,受害者往往会因为 “看不见” 这 “不起眼” 的签名风险损失巨大资产。这也是我们写这篇文章的原因。
根据受害者的描述,被盗交易如下:
(https://etherscan.io/tx/0xc65093b52fcf395f23fb7195a6fd5758b9a3eb1ccd0e3572754690d3a2a2c27c)
(https://etherscan.io/tx/0xf4a288d6a5400d0fcfd06f052804ae7d40c05f623401bc003c162d67a08a22cb)
从这两笔交易来看,合约调用者(0x00002…d0000)通过调用 TransferFrom 函数,将受害者地址(0xA4089…82C3)上的 34.87 USDC 转移到(0x8256…D6B8),将 81.36 USDC 转移到(0x5A69…1C17)。如果光看 transferFrom 函数,不难发现这个函数的作用是:允许第三方发起一笔交易,将相关数字资产从所有者账户转移到接收者账户。
接着分析合约调用者地址(0x00002…d0000),发现多了一笔 permit 操作,而这在受害者的交易记录中是没有的。那 permit 有什么作用呢?
(https://etherscan.io/tx/0x7c06a33bd6bb913fb64e56e8a1381e1957d85cae78ca3305bdfa9561fc7bc611)
Permit 是什么?
据官方介绍,permit 在 EIP-2612 被引入到 ERC20 的协议中,用户不用事先授权,就能通过附加一个授权签名(permit)与应用合约交互。具体来说,我们都知道在 ERC20 币种的交易中,A 可以调用 approve 函数来对 B 进行授权,即将 A 指定的代币授权给另一个账户操作,并且必须是这个账户的 owner 才可以调用 approve 函数。而 permit 函数的作用是,A 提前在链下对授权对象进行签名,得到的签名告知给 B,B 就可以拿着这个签名去调用 permit 来实现 A 的授权操作(获得 allowance 使用 transferFrom 来进行转账),A 在不发送交易的情况下就能对指定代币进行转账,并且无论是不是这个账户的 owner 都可以执行 permit 进行授权操作。另外,Uniswap 已发布了新的 Token 授权标准 Permit2。
- 星际资讯
免责声明:投资有风险,入市须谨慎。本资讯不作为投资建议。