黑洞吞噬:Vyper漏洞让Curve结结实实翻了一车
近日,超级稳定币协议 Curve 受到重入攻击,造成严重损失。以下是 MetaTrust Labs 对本次攻击事件的安全分析及安全建议。
事件回顾
根据 Curve Finance 的官方推特,在 2023 年 7 月 31 日,一些使用 Vyper 0.2.15 版本编写的稳定池(alETH/msETH/pETH)受到了重入攻击。Curve Finance 表示,该攻击是由于 Vyper 0.2.15 版本存在重入锁故障(malfunctioning reentrancy locks)导致的,而且只影响了使用纯 ETH 的池子。目前,Curve 正在评估损失情况,其他池子是安全的。
据 MetaTrust Labs 的分析,该漏洞是在 2021 年 8 月至 10 月期间引入的,主要由于 Vyper 的 0.2.15/0.2.16/0.3.0 版本编译器引起的。漏洞原因是由于编译器 bug 导致生成的字节码中本该重入保护的方法,重入逻辑不生效导致。
根据链上数据统计,Curve Finance 稳定币池黑客攻击事件已造成 Alchemix 、JPEG’d、 CRV /ETH 池等累计损失 5200 万美元。Curve Finance 的代币 CRV 也遭受重创,日内下跌超过 15% 。
原因分析
Curve Finance 这次被攻击的原因是,Curve 在使用了 Vyper 这个语言写智能合约时,使用了 Vyper 0.2.15 版本,该版本上有一个漏洞是 malfunctioning reentrancy locks(重入锁故障),被攻击者利用发起了重入攻击造成损失。Curve Finance 这次的漏洞是一个 Language Specific 的漏洞。
Language Specific 的漏洞指的是由于某种编程语言或者编译器本身存在缺陷或者不兼容性导致的漏洞。这类漏洞往往难以发现和预防,因为它们不是由于开发者的疏忽或者逻辑错误造成的,而是由于底层技术平台的问题造成的。这类漏洞也往往会影响到多个项目或者合约,因为它们都使用了同样的语言或者编译器。
Vyper 是一种基于 Python 的智能合约编程语言,旨在提供更高的安全性和可读性。Vyper 声称自己是一种「安全优先」的语言,不支持一些可能导致安全隐患的特性,如类、继承、修改器、内联汇编等。然而,Vyper 也并非完美,它仍然存在一些 bug 或者漏洞,可能会影响到合约的安全性。例如,除了本次 Curve Finance 遭遇的重入锁故障之外,Vyper 还曾经出现过数组越界、整数溢出、存储访问错误等问题。
安全措施
对于 Curve Finance 这次的重入攻击事件,目前已经有一些应对措施被采取或者提出。以下是一些可采取的安全应对措施:
-
移出流动性:对于受影响的池子,用户可以选择移出流动性,以避免进一步的损失。Curve Finance 已经在其官网上提供了一个移出流动性的按钮,方便用户操作。
-
升级编译器:对于使用了 Vyper 0.2.15/0.2.16/0.3.0 版本编译器的合约,建议升级到最新的 Vyper 0.3.1 版本,该版本已经修复了重入锁故障的问题。同时,也建议使用其他工具或者方法来验证合约的安全性,如形式化验证、代码审计等。
-
提高警惕:对于使用了 Vyper 或者其他语言编写的合约,建议提高警惕,关注语言或者编译器的更新和漏洞修复情况,及时采取必要的措施来保护自己的资产。同时,也建议在使用新语言或者新技术时,谨慎评估其成熟度和稳定性,避免盲目追求新鲜或者高效。
总结
Curve Finance 的重入攻击事件是一个令人遗憾的安全事故,也是一个引人深思的教训。在去中心化金融(DeFi)领域,安全永远是第一要务,项目方应该不断地提高自己的安全意识和能力,任何一个细节都可能成为攻击者利用的突破口。