2022年Solana黑客事件详解:虫洞

  • Ackee
  • 发布于 2023-01-31 12:51
  • 阅读 14

Wormhole 是一个跨链消息传递协议,允许在支持的链之间转移 tokenized assets。2022年2月,Wormhole 遭受攻击,攻击者通过绕过签名过程,在 Solana 上铸造了 12 万个 wrapped ETH token,价值约 3.38 亿美元。根本原因是签名验证中缺少所有权检查,攻击者能够伪造账户余额,并在另一个区块链上铸造token。

Wormholehttps://wormhole.com/)是一种消息传递协议,支持在支持的链之间传输代币化资产。 换句话说,它允许从以太坊发送 ETH,并在 Solana 上接收封装的 Wormhole ETH (wETH)。 благодаря этому разработчики также могут создавать 跨链 dApp

其基本工作原理是,每个受支持的都有一个 Wormhole 合约,用于发出或处理 Wormhole 消息。 该系统依赖于所谓的“守护者”,这是一个分布式节点集合,负责监控交易状态,并在达成共识后签署 Wormhole 合约发出的消息。 当用户将 ETH 发送到 Solana 时,系统会将代币 锁定到源链(以太坊)上的合约中,当守护者节点批准该操作后,他们会签署消息,并调用目标链上的另一个合约来发行并行的“封装”代币

发生了什么

2022 年 2 月,一名攻击者绕过 签名 流程,在未在以太坊上锁定等值代币的情况下,在 Solana 上铸造了 12 万个封装的 ETH 代币,从而窃取了价值约 3.38 亿美元(在漏洞利用发生时)的资产。 尽管 Wormhole 团队向黑客发送了一条消息,提供了 白帽协议,但没有得到回应。 黑客使用了 93,750 个铸造的封装 ETH,将其兑换回以太坊上等值的 ETH 代币,从而耗尽以太坊流动性池 中的资金。 剩余的代币被出售换成 SOL 和 USDC,如黑客的钱包所示。 Wormhole 的投资者 Jump Crypto 补充了所有 12 万 ETH,实际上 拯救了 Wormhole

漏洞利用详情

Wormhole 项目是开源的公共存储库 任何人都可以访问。 有趣的是,黑客攻击发生在修复了一个关键错误https://github.com/certusone/wormhole/commit/7edbbd3677ee6ca681be8722a607bc576a3912c8#diff-0d27d8889edd071b86d3f3299276882d97613ad6ab3b0b6412ae4ebf3ccd6370R92-R103)并提交到公共存储库后几个小时,并且在部署该程序的新版本之前

该错误的根本原因是一个已弃用的函数

load_instruction_at

在 Wormhole 签名验证期间被使用。 构建自定义指令以“执行”签名验证的方法是发送一个由(至少)两个指令组成的交易,并检查是否已发送本机程序指令。 如 secp256k1_instruction.rs 文档中所述,有必要:

  • 使用以下命令加载 secp256k1 指令数据
load_instruction_at_checked or get_instruction_relative;
  • 检查
secp256k1

程序 ID 是否等于

secp256k1_program::ID

这样就无法使用恶意程序伪造签名验证

  • 检查 公钥和消息 是否是每个程序的要求的预期值。

不幸的是,Wormhole 的签名验证实现未使用建议的

load_instruction_at_checked

函数,而是使用已弃用的版本

load_instruction_at.

此函数不检查要反序列化的数据的来源实际上是否来自 sysvar 帐户,而不是伪造帐户。 这样,攻击者就能够:

  • 使用以下指令数据在不同的交易中提前创建一个帐户 2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRd
secp256k1
  • 调用
verify_certificate

他在其中用第一步中创建的恶意帐户替换了 sysvar::instructions 帐户。

签名验证通常需要一个交易中的两个指令:

secp256k1 and verify_certificate.

但是,攻击者设法仅调用单个

verify_certificates

指令并伪造指令输入数据,因此

verify_certificates

没有识别到它不是与

secp256k1

指令一起调用的,因此通过了验证。 你可以自己检查该交易验证完成后,就可以调用通常的指令

post_vaa

获得所谓的“验证者操作批准”,随后完成 complete_wrapped 指令以铸造 120,000 ETH。

简单来说,Wormhole 黑客攻击一方面非常复杂,但归根结底,根本原因缺少对一个帐户的所有权 检查,这使得黑客可以伪造他在一个区块链上的帐户中有资金。 并且由于缺乏检查,他设法在另一个区块链上铸造了资金。

参考

  • 原文链接: ackee.xyz/blog/2022-sola...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Ackee
Ackee
Cybersecurity experts | We audit Ethereum and Solana | Creators of @WakeFramework , Solidity (Wake) & @TridentSolana | Educational partner of Solana Foundation