PYTH CBETH price feed is easily manipulated, resulted in me losing $33000

Thank you for your patience here. We have now reviewed the incident in coordination with Pyth and we are able to share the following:

Incident Overview

On March 2, 2025, between 04:39:35 PM UTC and 04:44:03 PM UTC, three positions were liquidated in the cbETH/WETH market (LLTV: 94.5%) resulting in liquidations totalling approximately 14 ETH. The liquidations occurred in the following transactions:

The issue was not an oracle manipulation problem but rather caused by a timing mismatch in price updates related to how the cbETH/WETH market ingests Pyth data via push updates. The mismatch affected how cbETH and ETH values were reported, creating a short-lived skew in their ratio.

Push vs. Pull Architecture

  • Most Pyth integrations use pull-based pricing, fetching prices from Pythnet on demand
  • The cbETH/WETH market uses two push feeds and an off-chain scheduler, which update periodically the on-chain prices based on time and price deviation thresholds
  • Morpho markets use an oracle interface that can independently read multiple price feeds
  • There is no guarantee in the code or design for this market oracle that feeds update simultaneously to ensure price timestamps
  • The oracle implementation used in this market does not check price timestamps, using the most recent values automatically
  • This asynchrony can create temporary discrepancies in asset ratios

Timeline of Events

  1. Last synchronized price update before incident: 04:36:55 PM UTC
  • ETH/USD: $2,327.50
  • cbETH/USD: $2,538.14
  • Thus cbETH/ETH = 1.091
  • Pyth Benchmarks at this time showed these were accurate: $2,326.22 and $2,538.33
  1. Permissionless ETH/USD update: 04:39:33 PM UTC
  • ETH/USD updated to $2,405.22
  • cbETH/USD remained at previous value ($2,538.33)
  • This created an effective cbETH/ETH ratio of 1.055
  1. Liquidations occurred: 04:39:35 PM UTC to 04:44:03 PM UTC
  • The discrepancy in ratio was sufficient to trigger liquidations given the high 94.5% LLTV
  1. Next synchronized update: 04:44:51 PM UTC
  • ETH/USD: $2,490.76
  • cbETH/USD: $2,718.57
  • Thus cbETH/ETH = 1.091

Key Points

  • The skew triggered automatic liquidations due to the market’s high loan-to-value setting.
  • The issue was confined to a small window and promptly addressed.

Next Steps

  • Improving technical infrastructure with Pyth to ensure more consistent, aligned price updates. This includes evaluating running an independent scheduler that can update on-chain prices at tighter intervals than currently used and working with Pyth to progress on Pulse and other tooling specifically designed to support borrow/lend applications.
  • Expanding monitoring to detect and mitigate any future data delays.

This incident was isolated to the cbETH/WETH market. We are implementing measures to enhance system reliability and limit similar occurrences. We have not identified any systemic risks that require immediate changes to this or other markets relying on similar oracles.