本次攻擊可能是地址私鑰被盜,或者是其他原因,導致攻擊者直接調用函數進行任意鑄幣,再次對權限過大問題敲響了警鐘。

原文標題:《鑄幣疑雲 —— Paid Network 被盜細節分析》
撰文 : 慢霧安全團隊

Paid Network 1.6 億美元鑄幣疑雲,慢霧拆解攻擊細節

據消息,以太坊 DApp 項目 Paid Network 遭受攻擊。攻擊者通過合約漏洞鑄造近 1.6 億美元的 PAID 代幣,並獲利 2000 ETH(約 300 萬美元)。慢霧安全團隊在第一時間跟進並分析,現在將細節分析給大家參考。

攻擊細節分析

Paid Network 1.6 億美元鑄幣疑雲,慢霧拆解攻擊細節

以上是整個攻擊過程的調用流程細節。

可以看到整個攻擊過程非常的簡單,攻擊者通過調用代理合約中函數簽名爲 (0x40c10f19) 的這個函數,然後就結束了整個攻擊流程。由於這個函數簽名未知,我們需要查閱這個函數簽名對應的函數是什麼。

Paid Network 1.6 億美元鑄幣疑雲,慢霧拆解攻擊細節

通過查閱這個函數簽名,我們發現這個簽名對應的正是 mint 函數。也就是說,攻擊者直接調用了 mint 函數後就結束了攻擊過程。那麼到這裏,我們似乎可以得出一個 mint 函數未鑑權導致任意鑄幣的漏洞了。通過 Etherscan 的代幣轉移過程分析,似乎也能佐證這個猜想。

Paid Network 1.6 億美元鑄幣疑雲,慢霧拆解攻擊細節

但是,事實真是如此嗎?

爲了驗證未鑑權任意鑄幣的這個想法,我們需要分析合約的具體邏輯。由於 Paid Network 使用的是合約可升級模型,所以我們要分析具體的邏輯合約 (0xb8...9c7)。但是在 Etherscan 上查詢的時候,我們竟然發現該邏輯合約沒有開源。

Paid Network 1.6 億美元鑄幣疑雲,慢霧拆解攻擊細節

這個時候,爲了一探究竟,我們只能使用反編譯對合約的邏輯進行解碼了。通過 Etherscan 自帶的反編譯工具,可以直接對未開源合約進行反編譯。在反編譯後,我們卻發現了一個驚人的事實:

Paid Network 1.6 億美元鑄幣疑雲,慢霧拆解攻擊細節

通過反編譯,我們不難發現,合約的 mint 函數是存在鑑權的,而這個地址,正是攻擊者地址 (0x187...65be)。那麼爲什麼一個存在鑑權的函數會被盜呢?由於合約爲開源,無法查看更具體的邏輯,只能基於現有的情況分析。我們分析可能是地址 (0x187...65be) 私鑰被盜,或者是其他原因,導致攻擊者直接調用 mint 函數進行任意鑄幣。

總結

本次攻擊過程雖然簡單,但是經過細節分析後卻有了驚人的發現。同時這次的攻擊也再次對權限過大問題敲響了警鐘。如果這次的 mint 函數給到的鑑權是一個多簽名地址或是使用其他方法分散權限,那麼此次攻擊就不會發生。

參考鏈接:

攻擊交易:

https://etherscan.io/tx/0x4bb10927ea7afc2336033574b74ebd6f73ef35ac0db1bb96229627c9d77555a0