2021年3月5日,PAID Network遭受了由于私钥管理不善而引起的 "铸币 "攻击。
攻击者使用代理合约私钥,将原先经过CertiK审计的PAID合约代码掉包,添加了销毁(burn)和铸币(mint)的功能函数。
因为PAID代币已达上限,攻击者先销毁(burn)了6000万枚PAID代币,然后再重新铸造了59,471,745枚PAID,并通过Uniswap出售。
CertiK团队第一时间和PAIDNetwork团队沟通调查,确认了原代码并无漏洞,攻击事件是由私钥泄露导致的。目前CertiK团队仍无法确认私钥泄露的原因,但已经可以将整个攻击过程还原。
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枚代币。
客观来看,本次攻击事件中攻击者并没有找到任何原合约的漏洞,而是直接获得了代理合约私钥。
当合约的可升级性作为项目的预期功能而存在时,它在智能合约中确实有其存在的价值。
而这种类型的功能要求合约所有者以及部署者在确保代码基本安全的同时,同样必须保证私钥的安全。
CertiK将会在未来更多地强调并关注中心化及私钥保护等相关问题。
复制下方链接至浏览器,查看CertiK于2021年1月24日为PAID Network出具的审计报告:
https://certik.org/projects/paidnetwork