歡迎光臨
每天分享高質量文章

一行代碼蒸發了6,447,277,680人民幣!

程式員頭條(ID:CoderTop) 報道

4 月 22 日,OKEx 發佈公告,暫停 BEC 交易和提現。

而在此公告之前的一個多小時,一篇名為“一行代碼蒸發了 6,447,277,680 人民幣!”的文章已經在幣圈和鏈圈流傳,文中分析了漏洞產生的原因。

據分析,BEC 智慧合約(https://etherscan.io/address/0xc5d105e63711398af9bbff092d4b6769c82f793d)中的 batchTransfer 批量轉賬函式存在漏洞,攻擊者可傳入很大的 value 數值,使 cnt * value 後超過 unit256 的最大值使其上限溢位導致 amount 變為 0。

你傳幾個地址給我(receivers),然後再傳給我你要給每個人多少代幣(value),發送的總金額 = 發送的人數*發送的金額,所以這會要求你當前的餘額大於發送的總金額。

當其設置的值超過了取值範圍時,就會出現“上限溢位”漏洞,黑客利用這個漏洞就可無限生成新的代幣。

就一個簡單的上限溢位漏洞,導致 BEC 代幣的市值接近歸 0。但事實上開發者也考慮到上限溢位問題了,如下:

除了 amount 的計算外, 其他的給用戶轉錢都用了 safeMath 的方法(sub,add),safeMath 是為了計算安全而寫的一個 library。

那麼,為啥就偏偏這一句沒有用 safeMath 的方法呢。這就只能問寫代碼的人了。還好,目前 BEC 已暫停交易,但究竟生成了多少代幣,還未公佈。


●編號594,輸入編號直達本文

●輸入m獲取文章目錄

赞(0)

分享創造快樂