当前位置: 首页 > news >正文

Morpheus 审计报告分享2:ChianLink 数据源有着不同的“心跳”

漏洞信息

漏洞报告

  1. https://code4rena.com/audits/2025-08-morpheus/submissions/S-709

漏洞代码

  1. https://github.com/code-423n4/2025-08-morpheus/blob/a65c254e4c3133c32c05b80bf2bd6ff9eced68e2/contracts/capital-protocol/ChainLinkDataConsumer.sol#L78-L107

漏洞背景

Heartbeat

Heartbeat 是 ChainLink 价格更新的周期,不同的 Data Feeds 会拥有不同的 Heartbeat。

比如 稳定币/USDBTC/ETH 价格的 Heartbeat 约为 24 小时。

image

ETH/USD 价格的 Heartbeat 约为 1 小时。

image

漏洞案例

在 ChainLinkDataConsumer 合约中,通过 getChainLinkDataFeedLatestAnswer() 函数返回 pathId_ 对应的价格。其中 dataFeeds 存储的是价格的计算路径,比如 dataFeeds = [BTC/ETH, ETH/USD] 对应着 BTC/USD 的价格。

在 getChainLinkDataFeedLatestAnswer() 函数中依次读取 dataFeeds 中对应的每个价格,并检查其更新时间间隔是否小于 allowedPriceUpdateDelay。

image

但是由于不同的 Data Feeds 会拥有不同的 Heartbeat,同样以 dataFeeds = [BTC/ETH, ETH/USD] 为例:

  1. 当 allowedPriceUpdateDelay 设为 1 H 时,读取 Heartbeat 为 24 H 的 BTC/ETH 价格将会返回 0 值,无法正常进行计算。
  2. 当 allowedPriceUpdateDelay 设为 24 H 时,由于 ETH/USD 价格的 Heartbeat 为 1 H ,过宽的限制可能会读取到过时的价格,从而计算出错误的最终价格。

修复方案

为每个 Data Feeds 设置对应的 Heartbeat 时间,不要共用同一个阈值时间。

补充材料

ChainLink 的 Data Feeds 之间除了 Heartbeat 有所差异外,价格精度 decimals 也有所不同。

Decimals

不同的 Data Feeds 会有不同的 decimals,基本分为 8 和 18 两类。

比如 ETH/USD 的 decimals 为 8:https://etherscan.io/address/0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419#readContract

image

而 BTC/ETH 的 decimals 为 18:https://etherscan.io/address/0xdeb288F737066589598e9214E782fa5A8eD689e8#readContract

image

http://www.wxhsa.cn/company.asp?id=3451

相关文章:

  • 「嘶吼」第一章:吃饭睡觉打豆豆
  • Clion 基础设置
  • 《Vuejs设计与实现》第 16 章(解析器) 上 - 教程
  • go代码(1)
  • 7种常见的入侵检测系统规避技术解析
  • js的引用
  • P3957 [NOIP 2017 普及组] 跳房子
  • C++中常用的STL容器
  • 我的数据科学探索之旅:从兴趣到公考与学习计划
  • MySQL 核心记录解析:从配置到存储的 “说明书 + 记录仪” 系统
  • JavaScript Array 对象
  • 代码规范
  • mac远程连接windows
  • 子类不依赖泛型,重写父类方法,通过强制类型转换父类方法参数出现的问题。——— 一个例子引发的思考
  • WebStorm代码一键美化
  • 3分钟搞定Vue组件库
  • Golang中设置HTTP请求代理的策略
  • [开源免费] iGTTS(Gemini TTS) 文本转语音(TTS)的命令行工具。
  • 结合Spring和MyBatis实现DAO层操作综述
  • 202205_CHIMA_follow
  • Lua脚本协助Redis分布式锁实现命令的原子性
  • 快读快写 学习笔记
  • Ubuntu 安装 CLion
  • AI编程实战
  • 25/9/13(补)
  • 面向对象编程(OOP)的原则
  • 【龙智Atlassian插件】Confluence周报插件上线AI智能总结,一键生成专业报告 - 实践
  • 数字化(管理)系统的工具化思考
  • 详细介绍:传统神经网络实现-----手写数字识别(MNIST)项目
  • C#语言中使用using关键字