600万美元损失,去中心化音乐平台Audius攻击事件分析
大约价值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
往期长文回顾