辟謠!關于網傳的ERC20 approve函數重大安全漏洞,大家不必過度慌張!區塊鏈
通過跟項目方和交易所的溝通發現,并不是所有的鑄幣函數都是高危漏洞,有的合約使用該函數是因為代幣發起方項目必不可少的功能需求。當然,也不排除有的項目方會利用該函數惡意增發的可能。
近期,有人發現并報道了ERC20標準的approve方法存在巨大安全漏洞,并聲稱該漏洞會導致所有使用該標準發布的代幣存在被向量攻擊的風險。
該團隊經過市場統計發現,目前已上交易所的數字貨幣中至少有超過60%的幣種,在智能合約中使用了存在該漏洞的代碼。
該漏洞作為以太坊標準導致的重大安全隱患,已經被該團隊命名為“jaeden”,并且已經提交到cve平臺。
有人發布ERC20存在巨大安全漏洞
緊接著,慢霧科技、Hashgard等團隊對此給予明確的回復:均認為是虛驚一場。
慢霧的回復(發布于知識星球-慢霧區,作者:余弦)
Hashgard團隊的官網回復
成都鏈安科技一直都非常重視智能合約安全問題,鑒于行業對該“重大漏洞”的分歧,為了使廣大智能合約開發者,以及區塊鏈從業者能夠更多的了解該問題,我們也專門針對此問題進行了深入分析和探討,并且給出我們的解決辦法,便于大家寫出更安全的智能合約。
到底什么是「jaeden漏洞」?
首先,我們來看看approve函數是如何使用的:
從代碼中我們可以看到:以太坊ERC20代幣標準,可以用approve函數來授權第三方賬戶使用指定額度的代幣。然后,第三方賬戶便可以通過使用transferfrom函數來使用授權給自己賬戶的代幣。
那么,approve函數為什么就可能會造成一定安全隱患呢?因為在區塊鏈交易過程中,對于間隔時間很短的交易,用戶廣播消息gas的數量不同,會直接影響交易打包到區塊的先后順序,gas多的消息會被優先執行。區塊鏈交易過程圖如下:
舉個簡單的例子:用戶A使用approve授權給用戶B使用100代幣額度,后來用戶A要改變授權額度為50代幣。在更改授權之前,用戶A查詢用戶B是否使用了授權額度的代幣,如果查詢到B并沒有使用之前的額度,則通過approve函數重新授權給用戶B新的50代幣的額度。
以上過程僅為用戶A的操作,于此同時,用戶B同樣可以進行相關操作:
用戶A查詢用戶B授權的使用情況,確定用戶B沒有使用授權代幣后,用戶A發出更改授權額度交易,但在更改交易成功之前,用戶B可利用區塊鏈打包消息的機制,發起一個gas數量很大的從用戶A轉賬100代幣的交易。
由于用戶B發出的交易gas數量大于用戶A更改授權額度交易的gas數量,因此礦機先執行用戶B的交易,于是用戶B將搶先在用戶A更改授權額度交易生效之前轉走了用戶A上次授權的100代幣。從而,等到礦機執行了修改50額度的交易后,用戶B又可以使用新授權的50代幣。
所以,用戶A、B上述授權和轉賬的操作過程將可能產生兩種結果:
用戶A成功的實現了授權額度的更新,用戶B只能使用用戶A授權的50代幣;
用戶B得到兩次次授權,可以使用150代幣。
因此,用戶在使用approve重新授權過程中可能導致兩種不同的執行結果,存在造成多次授權的可能性。
如何規避「jaeden漏洞」?
那么,既然存在多次授權的隱患,那么有沒有規避的辦法呢?
答案是:有的,我們針對此問題,給出下面兩種規避的方法。
第一,在更改授權之前,可先通過approve函數設置授權代幣數量為0。等到授權為0操作成功后,并查詢被授權的用戶沒有使用過原授權代幣,再通過approve函數重新設置授權代幣數量,就可以避免多次授權。
第二,建議代幣智能合約開發使用increaseApproval和decreaseApproval函數,進行授權更改操作。該功能直接在授權代幣數目上面做增減操作,以避免上述問題。
不算漏洞的漏洞
經過上文的分析,我們認為,將此問題歸結為安全的“重大漏洞”有點夸大,其本質是區塊鏈交易過程的排隊機制會造成插隊現象,從而引起了操作結果的不唯一性。
在用戶本身不做多次授權更改的情況下,是不會造成相關問題的。另外,即使用戶需要做多次授權,也有技術方法規避該類情況的發生。
此外,我們對于最近有人報道的關于鑄幣函數Mint的高危漏洞問題,也進行了分析,我們認為mint函數不一定導致惡意增發。我們對以太坊市值Top 500的代幣合約進行了審計,發現有107個合約使用的mint函數,可使代幣發起方實現代幣的無限增發。
我們將此情況與交易所進行了及時反饋,通過跟項目方和交易所的溝通發現,并不是所有的鑄幣函數都是高危漏洞,有的合約使用該函數是因為代幣發起方項目必不可少的功能需求。當然,也不排除有的項目方會利用該函數惡意增發的可能。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。