創宇區塊鏈|Creat future 慘遭隨意轉移幣 幕後黑手究竟是誰?

發表於 2022-04-13 11:36 作者: 區塊鏈情報速遞pro

前 言

CF 代幣合約被發現存在漏洞,它允許任何人轉移他人的 CF 余額。到目前爲止,損失約爲 190 萬美元,而 pancakeswap上CF/USDT 交易對已經受到影響。

知道創宇區塊鏈安全實驗室 第一時間對本次事件深入跟蹤並進行分析。

事件詳情

受影響的合約地址:https://bscscan.com/address/0x8B7218CF6Ac641382D7C723dE8aA173e98a80196#code

問題函數出在第 563 行:

function _transfer(address from, address to,uint256 amount) public {

require(from != address(0), "ERC20: transfer from the zero address");

  require(amount > 0, "Transfer amount must be greater than zero");

if(useWhiteListSwith){

require(msgSenderWhiteList[msg.sender] && fromWhiteList[from]  && toWhiteList[to], "Transfer not allowed");

}

uint256 fee = 0;

...

uint acceptAmount = amount - fee;

_tOwned[from] = _tOwned[from].sub(amount);

_tOwned[to] = _tOwned[to].add(acceptAmount);

emit Transfer(from, to, acceptAmount);

}

_transfer() 函數是直接轉移代幣 transfer() 和 授權轉移代幣 transferFrom() 的具體實現,但該函數的修飾器是public,因此任何人都可以不通過 transfer() 或 transferFrom() 函數直接調用它。而當變量 useWhiteListSwith 設置爲 False 時,該函數不會檢查調用地址和傳輸地址是否合規,直接將代幣轉移到指定地址。

在區塊高度爲 16841993 時,管理員就把 useWhiteListSwith 設置爲 False:

此時开始有攻擊者利用 _transfer() 函數直接轉移代幣:

總結

經過完整分析,知道創宇區塊鏈安全實驗室 明確了該次事件的源頭由函數本身權限出現問題,而管理員同時操作不慎關閉了白名單檢測,兩方結合導致攻擊者可以實現轉移任意錢包代幣的操作。

在核心函數上我們一直建議使用最小權限原則,像這次的 _transfer() 函數本不該用 public 修飾器,使得 transferFrom() 函數檢查授權額度的功能形同虛設;而合約管理者也不該隨意修改關鍵變量值,導致攻擊者可以繞過白名單檢查的最後一道防线。

合約不僅僅是代碼層面的安全,不光需要白盒代碼審計,更需要合約管理員共同合理維護。

標題:創宇區塊鏈|Creat future 慘遭隨意轉移幣 幕後黑手究竟是誰?

地址:https://www.coinsdeep.com/article/2256.html

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

你可能還喜歡
熱門資訊