7月10日晚, 安比(SECBIT)實驗室創建并維護的智能合約風險列表倉庫中接收到問題合約提交請求(漏洞報告者 xhyumiracle 來自長亭科技)。Lightcoin Token合約(合約地址:0xd97579Cea3fE2473682a4C42648134BB982433B9)的授權轉賬方法存在漏洞,授權賬戶可無限轉出被授權賬戶的金額,并且,授權賬戶可以利用這個漏洞給任意賬戶授權。
Lightcoin 合約的 transferFrom()
函數,即授權轉賬函數,在執行完轉賬后本該修改授權金額,減去已轉出部分金額。但這一步驟中把這授權賬戶地址寫錯了,也就是將allowed[_from][msg.sender] -= _value;
誤寫成了 allowed[_from][_to] -= _value;
,進而引發了漏洞。
注:_from
地址為被授權地址,實際轉出 Token 的地址;_to
地址為轉賬接收地址;msg.sender
為當前操作賬戶地址,也就是,授權賬戶地址。
安比(SECBIT)實驗室小伙伴迅速分析了該漏洞指出,這個漏洞引發的后果有兩方面:
據悉,Lightcoin 項目方已獲知該漏洞并已完成合約升級工作,提醒廣大持幣用戶不必恐慌,做好升級工作即可。
目前問題合約已作廢:0xd97579Cea3fE2473682a4C42648134BB982433B9
升級后新合約地址為:0x1295b55fA04FBAc6d9e7c351Ecb3486e88129027

根據安比(SECBIT)實驗室風險監控平臺顯示,存在相同漏洞的合約共 9份,強烈建議各個項目方和交易所及時做好自查工作。下圖為該問題的合約地址(出于對項目方的保護,合約地址已部分馬賽克)。
該漏洞目前已被收錄至智能合約風險列表,該列表由安比(SECBIT)實驗室發起共建并持續維護的 Token 合約問題列表,至今已收錄了28類合約漏洞及風險,問題合約數量超過4000份,我們將不間斷更新問題 Token 合約信息,同時也歡迎更多的小伙伴能夠參與進來,共同維護這份問題合約列表。
https://github.com/sec-bit/awesome-buggy-erc20-tokens
安比(SECBIT)實驗室再次呼吁,項目方發行 Token 一定要慎之又慎,遵守智能合約安全開發規范,引入安全審計流程,必要的時候采用形式化驗證 手段,確保萬無一失。
智能合約形式化驗證示例:https://github.com/sec-bit/tokenlibs-with-proofs
致謝:特別感謝長亭科技小伙伴 xhyumiracle 的及時報告。
參考文獻
[1] 智能合約風險列表(awesome-buggy-erc20-tokens) https://github.com/sec-bit/awesome-buggy-erc20-tokens
[2] 安?(SECBIT)實驗室攜?路印(Loopring)共同發布智能合約風險列表 https://mp.weixin.qq.com/s/XbXlrmt0fi9IgxicmdAF0w
[3] Lightcoin (Light) https://etherscan.io/token/0xd97579Cea3fE2473682a4C42648134BB982433B9
[4] 構造形式化證明,解決智能合約安全問題——你的合約亟待證明 https://mp.weixin.qq.com/s/Dk8FAODv2SeFXmDgGaQduw
[5] tokenlibs-with-proofs https://github.com/sec-bit/tokenlibs-with-proofs