2021年3月5日,PAID Network遭受了由於私鑰管理不善而引起的 "鑄幣 "攻擊。
攻擊者使用代理合約私鑰,將原先經過CertiK審計的PAID合約程式碼掉包,新增了銷燬(burn)和鑄幣(mint)的功能函式。
因為PAID代幣已達上限,攻擊者先銷燬(burn)了6000萬枚PAID代幣,然後再重新鑄造了59,471,745枚PAID,並透過Uniswap出售。
CertiK團隊第一時間和PAIDNetwork團隊溝通調查,確認了原始碼並無漏洞,攻擊事件是由私鑰洩露導致的。目前CertiK團隊仍無法確認私鑰洩露的原因,但已經可以將整個攻擊過程還原。
PAID事件時間線
2021年3月5日,PAID遭受了持續約30分鐘的攻擊。
透過鏈上分析,CertiK團隊總結了攻擊的時間線及操作步驟如下:
第一步:合約所有權被轉移給了攻擊者,此時攻擊者在得到私鑰後就已經完全獲得了代理合約的控制權。
第二步:攻擊者利用代理更新合約,新增了銷燬(burn)和鑄幣(mint)的功能函式。
第三步:攻擊者銷燬(burn)了6000萬枚PAID,留出鑄幣空間。
第四步:攻擊者開始鑄幣,並向Uniswap傾銷PAID代幣以換取以太幣。
最後,本次事件並沒有攻擊智慧合約的程式碼本身,而是透過某種渠道獲得了代理合約的私鑰。
CertiK在審計報告中的PTN-10章節提出了: Ambiguous Functionality (模糊功能)以及其他章節強調了PAID合約中心化的問題。
總結
2021年3月5日,攻擊者獲得PAID代理合約私鑰,替換原有程式碼,新增了銷燬(burn)和鑄幣(mint)的功能函式。
攻擊者之後銷燬了6000萬枚PAID代幣,留出鑄幣空間。
最後,鑄造了59,471,745枚PAID,並透過Uniswap出售了2,401,203枚代幣。
客觀來看,本次攻擊事件中攻擊者並沒有找到任何原合約的漏洞,而是直接獲得了代理合約私鑰。
當合約的可升級性作為專案的預期功能而存在時,它在智慧合約中確實有其存在的價值。
而這種型別的功能要求合約所有者以及部署者在確保程式碼基本安全的同時,同樣必須保證私鑰的安全。