风险提示:请理性看待区块链,树立正确的货币观念和投资理念,不要盲目跟风投资,本站内容不构成投资建议,请谨慎对待。 免责声明:本站所发布文章仅代表个人观点,与CoinVoice官方立场无关

Solana授权钓⻥事件解析:授权转移还是直接偷⾛?

PANews
2022年03月08日

原文作者:Fairyproof

前两天,Solana区块链上出现了安全预警,有⼀篇⽂章指出⼀个名为

https://officialsolanarares.net/mint/钓⻥⽹站在⽤户批准之后,可以将⽤户的原⽣代币转⾛。在该⽂章中提到了⼀点:

恶意合约在⽤户批准(Approve)后,可以转⾛⽤户的原⽣资产(这⾥是SOL),这点在以太坊上是不可能的,以太坊的授权钓⻥钓不⾛以太坊的原⽣资产(ETH),但可以钓⾛其上的Token。于是这⾥就存在“常识违背”现象,导致⽤户容易掉以轻⼼。

其实该⽂章这⾥的说法是不甚准确的,混淆了批准交易和Solidity中ERC-20代币授权这两个不同的概念。

真实情况是通过Solana的签名扩散机制,恶意合约直接盗取了⽤户的SOL资产,和通常意义上的授权并没有什么关联。

1. 以太坊中的授权

在以太坊中,通常意义上授权是指⽤户调⽤代币合约,向其它地址(合约)授权⼀定处理额度,这样我们在和其它合约交易时,可以⽅便的⽀付ERC-20代币。

在这⾥,授权是必须的,否则第三⽅合约⽆权处理⽤户的代币资产。同时,这种机制也伴⽣了⼤量的授权攻击,只要你授权了恶意合约,恶意合约就可以转⾛你的ERC-20代币。

2. Solana中的授权

在Solana中,代币⼀般为官⽅提供的spl-token合约,它模拟了ERC-20代币的⾏为,因此也存在类似的ERC-20授权概念。同样授权第三⽅合约后第三⽅合约可以处理⽤户的代币(注意不是原⽣币SOL)。这点同以太坊是⼀致的,并没有什么反常识。

3. Approve的涵义

不管在以太坊中还是在Solana中,我们习惯将Approve当作授权(ERC-20协议⾥有approve函数),因此⾃然⽽然的会认为是代币授权。当我们使⽤MetaMask钱包时,如果是代币授权交易会明确提示授权,并且所有交易弹出的是⼀个确认按钮。然⽽在Solana的Phantom钱包⾥,弹出的是⼀个Approve(批准)按钮,让⼈很容易以为是授

权交易。但真实情况是批准⼀次交易⽽并不是进⾏代币授权。所以安全预警中出现的被盗⾏为,是⽤户批准了⼀个未知交易,⽽不是⽤户进⾏了SOL的授权操作,当然也就不能说是授权偷⾛了原⽣币。

4.交易直接转⾛原⽣货币

交易转⾛批准者的原⽣货币,例如SOL和ETH,是⾮常简单的。在以太坊上的Solidity中,只要调⽤⼀个payabletransfe的函数就可以转⾛交易⽤户的ETH;在Solana中,相应的,只要调⽤系统合约的户的SOL资产,这和我们平常讲的代币授权概念是没有任何关系的。

函数也能转移⾛交易⽤不同的是,在Solidity中,ETH转移发⽣在合约调⽤的时候,因此钱包可以提前知道要转移的ETH数量并显示出来,⽽在Solana中,转移是发⽣在合约内部的,因此钱包⽆法提前知晓你会被转⾛多少SOL,当然也会⽆法显示。只要你签名认同了这笔恶意交易,你就相当于签名认同了这次SOL转移,这正是这次Solana上钓⻥盗取的问题所在。

⼀段类似如下的代码就可以在合约内部转移user的SOL。

Solana授权钓⻥事件解析:授权转移还是直接偷⾛?
  

5. Solana中的签名扩散机制

在Solana中,有⼀个签名扩散机制。⽤户调⽤合约A,此时合约A中⽤户是签名批准的。当合约A内部调⽤合约B时,⽤户的签名会随着跨合约调⽤⼀起扩散到合约B。因此,在合约B中,⽤户也是签名批准的。所以这⾥存在⼀个安全⻛险,当签名⼀个恶意合约时,恶意合约就获取了我们这个签名,然⽽它可以拿我们这个签名做任何事情!!!!!!!

在上述的偷盗事件中,⽤户同恶意合约3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v进⾏交易,该合约直接调⽤系统合约转移⽤户的SOL,因为签名随着调⽤⼀起扩散到了系统合约,因此系统合约认为该笔交易也是批准过的,是正常的,所以就转⾛了⽤户的资产。

6. 具体被盗交易

其中⼀笔被盗交易:

https://explorer.solana.com/tx/4j33JSGRS6rD5irzW1cA9wjQAvAgVDAnBTrGRjqtqBBWXspTzU5HpEFwTeCC2uD9hH9eA2Pw5ddHyd5JyG6h6cNq

我们可以看到该交易涉及的输⼊账号:

Solana授权钓⻥事件解析:授权转移还是直接偷⾛?

这其中:

⽤户账号:4XF4wyjein7ZN4RPM6YK2mC2mC6T41cZAoKjJqpP19fR

SOL转移账号:BepccLHDcXqqHi6MfpTDo9Sfc5tmRjmSC1XY48Tb8HuY

恶意合约地址:3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v

从上可以看出,⽤户账号调⽤合约后转移了1.2545 SOL到转移账号。同时我们可以看到并没有涉及到spl-token代币合约,出产没有通常意义上的授权这么回事。

其交易打印出的⽇志为:

从⽇志中也可以判断,恶意合约仅是简单的调⽤了系统合约转⾛了⽤户的SOL,因此⽤户签名批准了对恶意合约的交易,这个签名也扩散到了系统合约,因此判定有效。

7. 结论

在Solana中,不要轻易确认或者批准任何来历不明的交易,因为它可以拿你的签名代表你做任何事情。


声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。

来源:PANews 原创
#Solana

评论0条

PANews

简介:专为区块链技术应用及金融科技创业者及领导者而打造的智库型媒体

专栏

更多>>