免责声明:金色财经所有资讯仅代表作者个人观点,不构成任何投资理财建议。请确保访问网址为(jinse.cn) 举报

    Hundred 与 Agave 闪电贷攻击事件分析

    1.前言

    北京时间 3 月 15 日晚,知道创宇区块链安全实验室 监测到 Gnosis 链上的借贷类协议 Hundred Finance 与 Agave 均遭遇了闪电贷袭击,包括 AAVE 的分支 Agave 和 Compound 的分支 Hundred Finance 。协议损失超 1100 万美元。目前 项目方已暂停其数百个市场。

    知道创宇区块链安全实验室 第一时间跟踪本次事件并分析。

    v2-1944aa12b2dc7e48026a2e304d68f9cb_720w.jpgv2-de9d66c8c516e1d5564ef88809bad001_720w.jpg

    2.分析

    2.1 攻击者相关信息

    Hundred Finance被攻击 tx:

    0x534b84f657883ddc1b66a314e8b392feb35024afdec61dfe8e7c510cfac1a098

    攻击合约:0xdbf225e3d626ec31f502d435b0f72d82b08e1bdd

    攻击地址: 0xd041ad9aae5cf96b21c3ffcb303a0cb80779e358

    攻击后跨链匿名化:https://etherscan.io/txs?a=0xd041ad9aae5cf96b21c3ffcb303a0cb80779e358

    Agave被攻击tx:

    0xa262141abcf7c127b88b4042aee8bf601f4f3372c9471dbd75cb54e76524f18e

    攻击合约:0xF98169301B06e906AF7f9b719204AA10D1F160d6

    攻击地址: 0x0a16a85be44627c10cee75db06b169c7bc76de2c

    攻击后跨链匿名化:https://etherscan.io/txs?a=0x0a16a85be44627c10cee75db06b169c7bc76de2c

    2.2 攻击流程

    由于 Hundred Finance 与 Agave 攻击流程与手法类似,因此我们使用 Hundred Finance 进行分析。

    Hundred Finance 攻击调用流程

    1、攻击者利用合约在三个池子中利用闪电贷借出 WXDAIUSDC

    v2-9bb28b077b973b461e4378377fafe760_720w.jpg

    2、在 WETH 池子质押借出的部分 USDC

    v2-5a399c956584e2dbad2a811b3ecffca1_720w.jpg

    3、利用重入利用一笔质押,超额借出池子中资金

    v2-c6078ad97f87f8ffdb891df4f3d2e1b9_720w.jpg

    4、重复质押-重入借出步骤,将其他两个池子资产超额借出

    v2-fd8dd5181bf8bdfb07a477a2cb1c17dc_720w.jpg

    5、归还闪电贷

    v2-15d840e2a7dbf8cce4c10cdb5f8f7768_720w.jpg

    6、获利转移

    v2-46f0e6ae8c8e6bffcea4e54759224203_720w.jpg

    2.3 漏洞细节

    导致本次问题的根本原因是由于在 Gnosis 链上的官方桥接代币 xDAI 合约中实现了一个对于 to 地址的回调( callAfterTransfer 函数)

    合约实现地址:

    https://blockscout.com/xdai/mainnet/address/0xf8D1677c8a0c961938bf2f9aDc3F3CFDA759A9d9/contracts

    v2-80d43834b0d23c8536781b52401625b6_720w.jpg

    该回调将直接导致重入漏洞的产生,同时由于在 Hundred Finance 团队 fork 的 Compound 版本中没有严格遵循检查-生效-交互(防止重入的另一种方式),进而导致了总借贷量更新晚于重入实现。最终攻击者得以超额借贷。

    v2-4810adc8fc14eae2acfeeb7171e88ad0_720w.jpg

    类似的,对于 Agave 项目方,攻击者利用 liquidateCall 函数内部调用会调用 xDAI 的 callAfterTransfer 方法进行回调,最终导致攻击者能再次进行借贷。

    v2-71191cfe67889dcd516e95c82b726e00_720w.jpg

    在 Hundred Finance 攻击中攻击者重入的调用路径如下:

    v2-c8f519e3ba29fc8819f1b329ac76632e_720w.jpg

    在 Agave 攻击中攻击者回调路径(调用 liquidateCall 时内部调用时回调)如下:

    v2-ead88ed5fc34b9da884d275721756aa4_720w.jpg

    3.总结

    此次遭受攻击的两个借贷项目由于错误的引入了存在重入的 token,同时项目方的 fork 的代码没有采用检查-生效-交互模式导致了问题的发生。

    我们强调:对于一个优秀的项目的引用必须建立在足够的理解和严谨的开发上,尤其是存在差异化的部分,切忌顾此失彼最终因为一个小的差错导致项目全部的损失。

    近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。

    jinse.cn 7
    好文章,需要你的鼓励
    jinse.cn 7
    好文章,需要你的鼓励
    参与评论
    0/140
    提交评论
    文章作者: / 责任编辑:

    声明:本文系金色财经原创稿件,版权属金色财经所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:金色财经",违者将依法追究责任。

    提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。

    金色财经 > 知道创宇区块链安全实验室 > Hundred 与 Agave 闪电贷攻击事件分析
    • 寻求报道
    • 金色财经中国版App下载
      金色财经APP
      iOS & Android
    • 加入社群
      Telegram
    • 意见反馈
    • 返回顶部
    • 返回底部