欢迎回到Sherlock的漏洞聚焦,我们在这里突出在Sherlock审计中发现的一个重要漏洞。 本周,我们讨论的是存款欺骗。 这个漏洞是由@0xalpharush和@bernd_eth在@zetablockchain跨链比赛中发现的。🧵
这是@bernd_eth对漏洞的总结: 1. ZetaChain的观察者监控外部链上的交易(例如,以太坊、索拉纳),并将其添加到集中式入站跟踪器中,以将其处理为存款和取款,假设交易成功。 2. 与EVM集成不同,索拉纳的实现跳过了交易成功检查,允许恶意观察者添加失败的存款,铸造无支持的ZRC20 SOL,并抽走桥接资金。 3. 尽管观察者被ZetaChain明确列入白名单,但确保没有单一方能够危害链或 siphon 资产至关重要。
通常,观察者不会处理失败的交易,但这条代码路径未能执行与其EVM对应部分相同的验证。虽然这需要一个“特权”角色,但每个验证者都是观察者,而BFT共识应该是拜占庭容错的,即容忍<1/3的恶意方。因此,一个恶意观察者不应该能够伪造存款,并诱使诚实的验证者通过缺乏验证的入站跟踪器投票铸造ZRC20 Sol,以应对失败的交易,这个入站跟踪器缺乏其Solana实现的验证。
此漏洞的根本原因: ProcessInboundEvents 函数并不要求交易必须成功,与 EVM 入站观察者在这里正确处理的方式不同。由于指令被解码为成功,恶意观察者可以伪造整个 ZRC20-SOL 余额的存款,然后提取锁定在桥接的 Solana 侧的 SOL,从而窃取桥中的所有 lamports。此攻击还可以用于提取 SPL 代币或执行任意存款和调用。例如,在存款指令中从网关的 PDA 中移除可写属性会导致交易失败(请参见 POC 中的锚约束错误),但一旦通过 MsgAddInboundTracker 添加到入站跟踪器中,它仍然可以被处理。
内部前提条件: 一个恶意或疏忽的观察者通过 MsgAddInboundTracker 向入站跟踪器添加一个失败的 Solana 交易,该交易包含网关指令,导致所有验证者处理并投票铸造 Zetachain 上的 ZRC20 Sol。 CCTX 收到足够的投票,未担保的 ZRC20 Sol 在 Zetachain 上被铸造。
外部前提条件: 任何一方向网关发送失败的交易,并附带存款指令(或存款和调用)。 Zetachain上的ZRC20 Sol的接收方提取它,并在Solana上接收lamports。
攻击路径: 1) 任何一方向网关发送带有存款指令(或存款和调用)的失败交易。 2) 一个恶意或疏忽的观察者使用 MsgAddInboundTracker 将包含网关指令的失败 Solana 交易添加到入站跟踪器,导致所有验证者处理并投票铸造 Zetachain 上的 ZRC20 Sol。 3) ProcessInboundTrackers 任务导致伪造的 CCTX 收到足够的投票,从而在 Zetachain 上铸造未支持的 ZRC20 Sol。 4) Zetachain 上的 ZRC20 Sol 的接收者提取它并在 Solana 上收到 lamports。
这有什么影响? 所有存入Solana桥的lamports和SPL代币都可能被盗,因为存款可以伪造为任何金额(尽管Gateway程序导致交易回滚,但仍会处理这些存款)。
缓解措施: 在 Solana Observer 的入站跟踪器处理过程中,在对交易进行投票之前,检查交易是否成功。
我们很自豪能够通过这一发现帮助确保 @zetablockchain 的安全。 当绝对需要安全时,Sherlock 是正确的选择。
查看原文
7,847
17
本页面内容由第三方提供。除非另有说明,欧易不是所引用文章的作者,也不对此类材料主张任何版权。该内容仅供参考,并不代表欧易观点,不作为任何形式的认可,也不应被视为投资建议或购买或出售数字资产的招揽。在使用生成式人工智能提供摘要或其他信息的情况下,此类人工智能生成的内容可能不准确或不一致。请阅读链接文章,了解更多详情和信息。欧易不对第三方网站上的内容负责。包含稳定币、NFTs 等在内的数字资产涉及较高程度的风险,其价值可能会产生较大波动。请根据自身财务状况,仔细考虑交易或持有数字资产是否适合您。