freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

零时科技 || Unilend 攻击事件分析
2025-01-14 11:41:36
所属地 陕西省

背景介绍

2025年1月12日,我们监测到一笔 Ethereum 链上的异常交易:

https://etherscan.io/tx/0x44037ffc0993327176975e08789b71c1058318f48ddeff25890a577d6555b6ba

经分析,我们发现是一次针对 Unilend的攻击事件,事件共造成约 197k USD 的损失。


攻击及事件分析

首先,攻击者通过 Morpho Blue 利用 flashloan 借了 60,000,000 USDC,

1736825926_6785dc4635079780fb91a.png!small?1736825926613


随后,攻击者又通过 Morpho Blue 利用 flashloan 借了 5.75 wstETH 。

1736825939_6785dc5304fddeddb8d44.png!small?1736825939575


接着,又利用 unwrap 将贷来的 5.75 wstETH 兑换为了 6.85 stETH ,

1736825948_6785dc5c182cfc9898f34.png!small?1736825948691


然后,攻击者利用 lend 向 UniPool 中存入了 60,000,000 USDC 和 6.85 stETH 。

1736825959_6785dc67e40340ac42476.png!small?1736825960454


由于,攻击者已经存入足量的抵押物,所以接下来,攻击者利用 borrow 从 UniPool 中成功借走了 60.67 stETH 。1736825969_6785dc711e90e71b60f89.png!small?1736825970052


然后,攻击者又利用 redeemUnderlying 分别从 UniPool 中兑换了 60,000,000 USDC , 5.75wstETH 。至此,攻击完成。

1736825977_6785dc79d2679dfaba780.png!small?1736825978252


漏洞就出现在 redeemUnderlying 中,理论上来讲,攻击者存入的抵押物已经在 borrow 时占用了一部分,所以在 redeemUnderlying 存入时的金额时应该失败,但是攻击者却成功执行了。那么,我们看一下 redeemUnderlying 的具体实现。

1736825987_6785dc8352dca31c42a7d.png!small?1736825988764

从代码逻辑中,我们可以看到当 amount<0 时,兑换的是 token0 ,当 amount>0 时,兑换的是 token1 。兑换逻辑为。先计算出可以兑换的数量 tok_amount ,销毁对应的 LP Position ,检查 health factor ,转给用户完成兑换。

具体的漏洞出现在 checkHealthFactorLtv0 和 checkHealthFactorLtv1 中, check healthfactor 的算法为 抵押物数量 x 抵押物价格 / (借出价格 x 借出数量) > 1 ,但由于计算用户collateral amount 和 borrow amount 时测低配,导致此时同样也可以通过 health factor 的检查(理论上不能通过)。我们可以看到计算 collateral amount 和 borrow amount 的代码如下:

1736825999_6785dc8febaa311267e84.png!small?1736826000941

当用户有 collateral 时,合约会计算此次 redeem 后,抵押物的价值是否还是比已经借出的价值大。但是,在计算 redeem 后抵押物的价值时, tokenBalance0 并没有减去本次 redeem 需要减去的数量,又因为在 _burnLPposition 时 share 已经减去本次 redeem 后减少的 share 。所以导致_lendBalance0 也就是抵押物的数量要高于攻击者实际拥有的抵押物的数量。

攻击者最后再还清从 Morpho Blue 通过 flashloan 获取的 60,000,000 USDC , 5.75 wstETH 后,获利 60.67 stETH ,价值 197k USD 。

总结

本次漏洞的成因是 Unilend 在进行 redeem 时,在计算抵押物的数量时没有减去 redeem 应该转出的数量,导致错误的计算后抵押物的数量要高于攻击者实际拥有的抵押物的数量,本不应该成功的兑换成功完成。最终导致攻击者掏空了项目方的 stETH 代币。建议项目方在设计经济模型和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。


# 黑客攻击 # 攻击事件 # web3安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录