北京时间2022年7月23日,CertiK安全团队监测到去中心化音乐平台Audius遭到黑客攻击,损失了价值600万美元的AUDIO代币。攻击者通过调用initialize()函数重新初始化修改了Audius治理合约的配置,然后提出并执行了一个恶意提案(ID 85),导致Audius合约将1850万AUDIO(价值600万美元)代币转移给攻击者。
大约价值600万美元的AUDIO代币被攻击者交易为约700ETH(约110万美元)。
攻击步骤
① 攻击者调用Audius治理合约中的initialize()函数来修改配置,如“投票期”、“执行延迟”、“监护人地址”。该函数受到“initializer”修改器的保护,不应该被多次调用。
https://etherscan.io/tx/0x3bbb15f9852c389e8d77399fe88b49b042d0f22aad4a33c979fbabc60a34b24f
https://etherscan.io/tx/0xfefd829e246002a8fd061eede7501bccb6e244a9aacea0ebceaecef5d877a984
https://dashboard.tenderly.co/tx/mainnet/0xfefd829e246002a8fd061eede7501bccb6e244a9aacea0ebceaecef5d877a984/debugger?trace=0.0.0.1.0.0
② 攻击者提交了恶意提案(ID 85),该提案是要求Audius治理合约向攻击者转移1850万AUDIO代币。https://etherscan.io/tx/0xfefd829e246002a8fd061eede7501bccb6e244a9aacea0ebceaecef5d877a984.
③ 攻击者对恶意提案进行投票。https://etherscan.io/tx/0x3c09c6306b67737227edc24c663462d870e7c2bf39e9ab66877a980c900dd5d5
④ 攻击者执行了恶意提案,获得了1850万AUDIO代币。https://etherscan.io/tx/0x4227bca8ed4b8915c7eec0e14ad3748a88c4371d4176e716e8007249b9980dc9
⑤ 攻击者售出1850万AUDIO代币,获取了约700 ETH。https://etherscan.io/tx/0x82fc23992c7433fffad0e28a1b8d11211dc4377de83e88088d79f24f4a3f28b3
漏洞分析
CertiK安全团队在调查中,试图找出攻击者是如何多次调用initialize()的。
分析后发现事件的根本原因是代理合约和逻辑合约之间存在存储冲突——逻辑合约使用了代理合约的内存。
为了解决这个问题,Audius做出了相应调整:
① 修改了逻辑合约的存储结构:
② 限制了可以调用initialize()函数的权限:
资金去向
攻击者合约: https://etherscan.io/address/0xbdbb5945f252bc3466a319cdcc3ee8056bf2e569
约700 ETH被转移到攻击者地址当中:https://etherscan.io/address/0xa0c7bd318d69424603cbf91e9969870f21b8ab4c
写在最后
在CertiK编撰的《2022年第二季度Web3.0安全现状报告》中,显示了2022年第二季度Web3.0十大攻击事件的罪魁祸首正是漏洞恶意利用,其攻击事件相比其它小分类来说,数量较少,但往往具备更大的破坏性(CertiK官方微信公众号底部对话框留言【报告2】即可获取PDF下载链接)。
本次攻击事件本可通过审计发现「代码未遵循最佳实践」这一风险因素。除了审计之外,CertiK安全团队建议新增的代码也需要在上线前及时进行相应测试。