曲速區提醒:部分合約存在不一致性檢查漏洞區塊鏈
曲速區表示:部分合約中的transferFrom中存在不一致性檢查漏洞(checkeffectinconsistency)。
一、前言
近日,據曲速區消息:部分合約中的transferFrom中存在不一致性檢查漏洞(check effect inconsistency)。
什么是ERC20代幣?
簡單的說,任何 ERC20 代幣都能立即兼容以太坊錢包(幾乎所有支持以太幣的錢包,包括Jaxx、MEW、imToken等,也支持erc-20的代幣),這就意味著,在很多情況下,這些代幣都是可以立即進行交易的。
ERC20 讓以太坊區塊鏈上的其他智能合約和去中心化應用之間無縫交互。因此ERC20協議是目前數字貨幣交易體系中較為主流的一種協議體系。但是該協議也存在不完善的地方。
ERC20規定了代幣名稱、代號、發行量、轉賬等一系列常用的代碼規范,只要按照這個規范來設計的代幣智能合約,就能在絕大多數以太坊錢包上使用。
ERC20標準使用起來也非常方便,幾十行代碼即可實現完整功能的代幣。所以熟練的程序員用15分鐘建立一個ERC20代幣并不是困難的事。
但是,發幣容易,守幣難。經常被發現有漏洞,導致損失慘重。
4月22日,有黑客利用以太坊 ERC20 智能合約中 BatchOverFlow 漏洞中數據溢出的漏洞攻擊了美鏈 BEC 的智能合約,從中盜取產出57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,0 億個BEC ,并大規模的向市場上拋售。
4月25日,代幣SMT發現與被爆出的BEC代幣類似的安全漏洞,可以利用溢出攻擊獲得大量代幣。
這些數字多到數不清…
然而出問題的遠遠不止這些。漏洞事件集中爆發,不同的項目存在相同的漏洞,這也讓業內一直存在的“代碼互抄”現象,再次成為網絡上關注區塊鏈技術的投資者們討論的話題。
回顧上次LightCoin合約非一致性檢查漏洞。
簡述一下LightCoin:
LIGHT (光鏈) 是世界上第一個雙層區塊鏈(父鏈與子鏈)。其中,LIGHT 父鏈與傳統的公鏈類似,有且僅有一個,保證記錄完整、透明、不可被篡改或銷毀。LIGHT子鏈可以是多個且相互獨立存在,基于PoM validation方式,結合In-Memory數據庫緩存,有效提高緩存環節吞吐量,QPS可達10萬以上,實現性能大幅提高。LIGHT突破性地解決了當今數字貨幣在交易時處理速度嚴重滯后的問題,實現瞬時完成實時交易。
漏洞詳情:
合約類型:ERC20;
漏洞函數:transferFrom。
漏洞類型:非一致性檢查;
漏洞危害:可導致繞過授權額度檢查,轉出超出授權額度代幣至任意以太坊賬戶。
代碼分析:
可以看出代碼55行在檢查授權轉賬額度是沒有問題的,但是在58行減掉已轉出的授權額度時,錯誤的寫成了allowed[_from][_to] -= _value。該行代碼導致在授權轉賬完成后,限額依然不變,在下一次操作授權轉賬時,依然可以繼續按照原本限額轉出代幣。該漏洞屬于一個邏輯漏洞,由于校驗的條件和操作的條件不一致,導致后續繞過校驗。
該漏洞邏輯如圖所示:
經過對此漏洞類型進行了深入的分析,發現了不僅存在 `allowed[_from][msg.sender]` 這一語句的檢查不一致,還存在 `balances[msg.sender]` 語句的檢查不一致漏洞。
二、漏洞原理
1、allowed不一致性檢查漏洞
如上面代碼所示:
這一條的條件檢測與
這一語句的操作不相符,導致設置轉賬額度權限后,攻擊者能夠持續轉賬,直到轉完所有余額。
2、balances 不一致性檢查漏洞
如上圖的代碼所示,上面一句的條件檢測與下面一句的語句操作不相符,攻擊者能夠通過溢出,讓`_from`賬戶余額獲得極大的token 數量。
同時,有一些合約中使用了 safeMath 安全方法進行計算 `balances[_from] = balances[_from].sub(_value);`,所以暫時沒有溢出問題,但是條件檢查部分是冗余的。
修復方案如下:
1.使用safeMath方法進行計算;
2.使用`balances[_from] >= _value`作為條件判斷而非`balances[msg.sender]`
3.檢查`allowed[_from][msg.sender]`并對`allowed[_from][msg.sender]`進行操作不要與`allowed[_from][_to]`混用。
最后,曲速未來安全區表示:ERC20 發行的代幣安全性是無法保障的,
所以,對于廣大用戶來說,除了自身加強自我安全意識意外,也要有一雙火眼金睛,來分辨出哪些數字貨幣是安全的,值得投資的,哪些是有風險的。只有這樣,才能讓自己的資產受到最小的損失。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。