本文分析了2025年2月zkLend平台遭受攻击事件的细节,攻击者利用闪电贷机制操纵了市场累积值并通过舍入错误进行了资产盗窃,导致近1000万美元的损失。文中提供了详尽的攻击步骤、根本原因以及改进建议,以加强区块链平台的安全性。
作者 | Doublenine, Lisa
编辑 | Liz
根据 SlowMist 安全团队的情报,2025 年 2 月 12 日,Starknet 上领先的借贷平台 zkLend 受到攻击,造成近 1000 万美元的资产损失。SlowMist 安全团队分析了此事件并分享了如下结果:
https://x.com/SlowMist_Team/status/1889659563517026772
此次漏洞的根本原因在于利用闪电贷中的独特机制操纵和放大空市场中的累加器值。此外,市场合约在进行除法运算时使用了 SafeMath 库,直接对数值进行除法。这使得攻击者能够利用放大的累加器,造成收益的向下取整漏洞。
deposit
函数,将 1 wei 的 wstETH
代币存入合约。可以观察到 wstETH
代币市场处于空状态,其中市场合约持有的 wstETH
数量以及铸造的 zwstETH
数量在此存款之前均为零。这使得攻击者能够以最低的成本操控后续步骤。
在这一阶段,wstETH
市场的 lending_accumulator
值为 1e27
。
交易哈希: https://voyager.online/tx/0x039b6587b9d545cfde7c0f6646085ab0c39cc34e15c665613c30f148b569687
flash_loan
函数,借入 1 wei 的 wstETH
,并偿还 1000 wei 的 wstETH
。闪电贷之后,wstETH
市场的 lending_accumulator
值增加至 8.51e29
,比之前的值放大了 851 倍。
交易哈希: https://voyager.online/tx/0x039b6587b9d545cfde7c0f6646085ab0c39cc34e15c665613c30f148b569687c
那么,是什么导致 lending_accumulator
值如此显著放大?让我们深入查看市场合约中的 flash_loan
函数:
用户偿还闪电贷后,会调用名为 settle_extra_reserve_balance
的函数。
这个函数主要将合约的额外资金分配给存款人。分配的方法涉及根据合约的额外资金计算新的 lending_accumulator
,并更新相应资产代币的市场数据。简化计算公式如下:
(reserve_balance + totaldebt - amount_to_treasury) * 1e27 / ztoken_supply
由于市场之前处于空状态:
reserve_balance
等于闪电贷的偿还金额(1000 wei),total_debt
为 0,amount_to_treasury
计算为 149 wei,zwstETH
供应等于 1 wei(在先前存款操作期间铸造)。更新后的 lending_accumulator
最后计算值为 8.51e29
。
从历史交易记录来看,攻击者执行了多次相同的闪电贷操作,通过每次偿还增加的代币快速放大了 wstETH
市场的 lending_accumulator
值。
最终,lending_accumulator
被放大到极大的值 4.069e45
。
交易哈希: https://voyager.online/tx/0x0160a5841b3e99679691294d1f18904c557b28f7d5fe61577e75c8931f34a16f
wstETH
市场存款时,攻击者开始正式攻击。首先,攻击者调用 deposit
函数,大约存入 4.069 wstETH
到合约中。withdraw
函数,提取约 6.1039 wstETH
。wstETH
。攻击者为何只存入 4.069 wstETH,却能够提取 6.103 wstETH?
在执行 deposit
函数后,当用户转移资产代币 wstETH
时,系统外部调用 zToken
合约为用户铸造相应数量的 zwstETH
代币。
用户实际获得的 zwstETH
数量是根据转移的资产代币数量和市场的 lending_accumulator
计算得出的:
让我们跟进计算中使用的 safe_decimal_math
库:
计算实际获得的 zwstETH
数量的公式为:
zToken_amount = amount * 1e27 / lending_accumulator
其中 amount
为 4069297906051644021
,而被攻击者操控的 lending_accumulator
为 4069297906051644020000000000000000000000000000
。最终计算得到的 zwstETH
数量为 1。
当用户调用 withdraw
函数提取 6.103 wstETH
时,系统会调用 zToken
合约的 burn
函数,燃烧之前获得的 zwstETH
。
在 zToken
合约的 burn
函数中,计算要燃烧的实际 zwstETH
数量的方法与铸造时相同:
此时传入的 amount
为 6103946859077466029
。然而,由于 safe_math
库中的 div
函数执行除法时会进行截断,因此结果的小数部分被抛弃。此外,由于 lending_accumulator
之前被攻击者放大,因此最终计算得到的 zwstETH
燃烧金额由于向下取整也等于 1。这与存款时初始获得的 zwstETH
数量完全匹配。
6103946859077466029 * 1e27 / 4069297906051644020000000000000000000000000000 = 1
因此,提现期间燃烧 zwstETH
代币的逻辑成功通过,这也是攻击者可以只存入 4.069 wstETH
而提取 6.103 wstETH
的原因。
在正常市场条件下,lending_accumulator
的值应具有 1e27
的精度。进行除法时,分子要比分母大几个数量级,因此结果不受影响。
根据链上追踪工具 MistTrack,攻击者从 zkLend 窃取了约 950 万美元。他们随后将被盗代币转换为 ETH,并利用 LayerSwap、Orbiter Bridge、Rhino.fi 和 StarkGate ETH Bridge 等跨链桥将资金转移到各个网络。大部分资金都已通过以下以太坊地址转移:
其中,地址 0x645c77833833A6654F7EdaA977eBEaBc680a9109
的交易历史非常显著,首次记录的交易可以追溯到 2024 年 6 月 22 日。
该地址在以太坊、BSC 和 Base 网络上与 Binance 有互动,表明它可能是与 Binance 账户接口相嵌套的第三方交易平台。此外,它还在以太坊网络上记录了与 ChangeNOW 和 Hitbtc 的互动。
进一步分析攻击者在 Starknet上的相关地址: 0x04d7191dc8eac499bac710dd368706e3ce76c9945da52535de770d06ce7d3b26
显示出在攻击前与以下 L1 地址的强关联:
根据 MistTrack 的扩展分析,地址 0x93920786e0fda8496248c4447e2e082da69b6c40
和 0x34e5dc779cb705200e951239b6a89aaf5c7dbfc1
与 2023 年 7 月 25 日的 EraLend 攻击者地址有关。此外,根据 SlowMist InMist Lab 的情报,0x93920786e0fda8496248c4447e2e082da69b6c40
被攻击者用于接收 EraLend 攻击中被盗的资金。
当时,EraLend 遭受了约 276 万美元的损失。攻击者同样使用多个桥将盗取的资金分散到不同链和钱包中。
总之,zkLend 和 EraLend 的攻击是由同一攻击者实施的。
此次攻击的核心在于攻击者利用闪电贷过程中的独特机制,操控和放大空市场中的累加器值。这使他们能够利用向下取整的错误在提取时获得超过预期的资产。
SlowMist 安全团队建议项目团队设计一个稳健且安全的闪电贷逻辑模型,考虑影响存款收据代币计算的情况。此外,应在数学运算中实施安全的取整机制,以防止精度丢失。对于涉及存款和取款的核心业务逻辑,应加强审计和安全测试,以避免类似事件的发生。
SlowMist 是一家成立于 2018 年 1 月的区块链安全公司。该公司由一支在网络安全领域拥有十多年经验的团队创办,旨在成为全球力量。我们的目标是尽可能地为所有人提供安全的区块链生态系统。我们现在是一家知名的国际区块链安全公司,曾参与多个知名项目的工作,如 HashKey Exchange, OSL, MEEX, BGE, BTCBOX, Bitget, BHEX.SG, OKX, Binance, HTX, Amber Group, Crypto.com 等。
SlowMist 提供各种服务,包括但不限于安全审计、威胁信息、防御部署、安全顾问和其他安全相关服务。我们还提供 AML(反洗钱)软件、MistEye(安全监控)、SlowMist Hacked(加密网络攻击档案)、FireWall.x(智能合约防火墙)和其他 SaaS 产品。我们与诸如 Akamai、BitDefender、RC²、TianJi Partners、IPIP 等国内外公司建立了合作关系。我们在加密货币犯罪调查方面的广泛工作已被国际组织和政府机构引用,包括联合国安全理事会和联合国毒品和犯罪办公室。
通过为各个项目提供量身定制的综合安全解决方案,我们能够识别风险并防止其发生。我们的团队发现并公布了几处高风险区块链安全漏洞。通过这样做,我们能提高人们的警惕性,并提升区块链生态系统的安全标准。
- 原文链接: slowmist.medium.com/in-d...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!