免责声明:金色财经所有资讯仅代表作者个人观点,不构成任何投资理财建议。 举报

    “一两拨千金”—— Crosswise 攻击事件分析

    前言

    2022 年 1 月 18 日,知道创宇区块链安全实验室 监测到 BSC 上 Crosswise 遭遇攻击,此次攻击导致协议损失 87.9 万美元。

    攻击者仅用 1 个 CRSS token 便获取 Crosswise MasterChef 池中价值 87.9 万美元的 692K 个 CRSS。实验室将对本次事件深入跟踪并进行分析。

    攻击核心

    此次攻击的核心在于,Crosswise 中的 MasterChef 合约 Owner 地址设置即 transferOwnership 函数能够被攻击者绕过,使得攻击者能够成为新的 Owner 并对 MasterChef 池子进行攻击利用。

    我们将本次攻击过程分为两个阶段进行分析:获取 Owner 权限攻击和 MasterChef 池攻击。

    获取 Owner 权限攻击

    1.由于在 MasterChef 合约中 setTrustedForwarder 函数为公开可见性且未作权限设置,攻击者先将自己的地址设置为 TrustedForwarde 地址。

    qssPs783AKOeoEko5S2vm8jfNGlKy9Q0nsgUDe40.png

    2.Crosswisefi 项目方对 MasterChef 的 _msgSender() 函数并未采取 openzepplin 的标准写法且存在漏洞,导致攻击者能够通过构造恶意的 calldata 实现绕过 onlyOwner 限制完成合约 Owner 的获取。、

    NQz4jXuMI9QAozlprxEpcol9U5GNp8fRkrRgbw2f.png

    下图为攻击者绕过 onlyOwner 权限构造的恶意 payload:

    YPjtDKIZUc04ZNuwiFLe9ak5UYHSxQoquJB4PtzK.png

    MasterChef 池攻击

    1.攻击者在 CrosswiseRouter 中用 0.01 个 WBNB 兑换出 3.71 个 CRSS

    2.攻击者调用 deposit 将 1 个 CRSS 质押到 Crosswise MasterChef

    3.由于上一阶段攻击者已经获取到 MasterChef 的 Owner 权限,此时攻击者调用 set 函数对 MasterChef 的 pid 为 0 的池子重新部署了一个未开源的策略合约

    图片

    4.攻击者调用 MasterChef 的 withdraw 函数从池子中获取 692K 的 CRSS

    图片

    5.最后攻击者把 692K 的 CRSS 通过 CrosswiseRouter 合约 swap 兑换出 547 个 BNB完成攻击,获利超 87.9 万美元。

    策略合约

    猜想

    由于攻击者部署的策略合约并未开源,我们只能反向推导猜想策略合约的主要逻辑:

    1.根据下图第 18 行代码可以推断出合约中 lockedAmount 应该是一个极大值才能支撑攻击者 692k 的代币转出;又根据第 7-11 行可以推导出攻击者部署的 strategy 合约的 LockeTotal() 函数返回值极大、sharesTotal() 返回值极小。

    图片

    2.在上图代码 23 行当 _amount>0 时,会先计算出 user的shareRemoved,然后在执行 user.amount = user.amount.sub(shareRemoved);

    此时若 shareRemoved 大于 user.amount 则代码执行不会通过,可以推导出 26 行的 shareRemoved 值很小,又 shareRemoved 是调用攻击者部署 strategy 合约中 withdraw 获取,所以此时的 strategy 合约中 withdraw 的返回值会很小,小于之前质押的 1 个 CRSS 数量;

    再结合链上数据可推导攻击者部署 strategy 合约中的 withdraw 调用返回值为 0。

    图片

    反编译

    为了证实我们的猜想是否正确,我们将攻击者部署的策略合约进行反编译。

    图片

    反编译后我们可以发现存在一个极大值和一个较小值的常量,即对应猜想 1 中 LockeTotal 和 sharesTotal 值,猜想1正确。

    对于猜想 2,经过反编译后我们可以看到策略合约的 withdraw 最后的返回值为 0,猜想 2 正确。

    总结

    这次攻击产生的主要原因是项目方使用错误的方法去获取 msgSender,导致合约的 Owner 权限更改能被绕过。

    知道创宇区块链安全实验室 在此提醒,任何有关合约权限问题的操作都需要慎重考虑,合约审计、风控措施、应急计划等都有必要切实落实。

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

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

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

    金色财经 > 知道创宇区块链安全实验室 > “一两拨千金”—— Crosswise 攻击事件分析
    • 寻求报道
    • 金色财经中国版App下载
      金色财经APP
      iOS & Android
    • 加入社群
      Telegram
    • 意见反馈
    • 返回顶部
    • 返回底部