引言:以太坊的“理想国”与现实阴影

以太坊作为区块链2.0的标杆,通过智能合约实现了“可编程货币”与“去中心化应用”(DApps)的愿景,其核心设计之一是“账户抽象”,包括外部账户(EOA,由用户私钥控制)和合约账户(由代码控制),理想化的代码逻辑与复杂现实之间的鸿沟,在2017年因Parity钱包的两次重大漏洞事件,给以太坊生态敲响了安全警钟。“Parity漏洞”不仅造成了数亿美元的损失,更暴露了智能合约开发中关于“所有权权限”与“代码即法律”的深刻矛盾。

Parity漏洞:从“多重签名钱包”到“合约冻结”

Parity是以太坊生态中主流的轻钱包和基础设施提供商,其推出的“多重签名钱包”(Multi-Sig Wallet)允许用户通过多个私钥共同控制资金,提升了安全性,2017年7月和11月,Parity钱包两次因智能合约漏洞引发灾难,而后者的影响尤为深远。

第一次漏洞(2017年7月):意外“锁定”31000个以太坊

2017年7月,Parity发布了一个标准化的多重签名钱包模板合约(合约地址:0xDbFeF1c3E3B8A3A3A5a6F8a5a5a5a5a5a5a5a5a5a5),该合约允许用户快速部署自己的多重签名钱包,一名用户在部署后误调用了合约中的initWallet()函数,并传入了自己的地址作为“所有者”,由于该函数存在逻辑缺陷,导致该用户地址成为合约的唯一“所有者”,而原模板合约的预设所有者(包括Parity团队)权限被覆盖。

更严重的是,该用户随后误操作,将自己的地址从所有者列表中移除,导致整个模板合约失去控制权,合约中的资金(约31,000个以太坊,价值约3000万美元)被永久锁定,无法转移,以太坊社区通过硬分叉(“DAO事件”后首次)强制解锁资金,但此次事件已暴露出模板合约的“权限管理漏洞”。

第二次漏洞(2017年11月):彻底“冻结”价值2亿美元的以太坊

第一次漏洞后,Parity发布了修复版本,并推出一个新的“钱包库”(Wallet Library)合约(合约地址:0x86E65a2d2b5b3b8Bd9A336b3c5a3c3c3c3c3c3c3),用于升级多重签名钱包的逻辑,11月,一名攻击者(或误操作者)通过调用initWallet()函数,将自己的地址设为“库合约”的所有者,随后移除了原所有者地址。

随机配图