Every lending market, perpetual exchange and tokenised fund that prices collateral onchain depends on a component most due diligence files never open: the oracle. A diligence team reads the smart contract audit, the custody arrangement and the legal opinion, then accepts the number the protocol calls "the price" without asking where it came from, how often it updates, or who can change it. The five incidents below all turn on that gap rather than on a broken contract.
What an oracle actually reports
An oracle does not measure a single, objective market price. It applies a methodology, chosen in advance by a protocol's developers or a third-party provider, to a specific set of venues, over a specific window, then delivers the result under stated conditions. Change any one of those choices and the number changes with it.
The methodology starts with venue selection. Chainlink's data feeds are produced offchain, where a leader node collects signed observations from followers into one report; once a quorum has signed it, a single transaction carries that report onchain and the aggregator contract exposes the median as the answer, with a round ID and block timestamp (Chainlink, off-chain reporting architecture documentation, undated, vendor material). Pyth Network instead takes first-party data from what it describes as more than 120 providers, among them exchanges, banks, trading firms and market makers. Each publisher submits a price and a confidence interval it believes contains the true price with 95% probability, and the network aggregates those into an aggregate price plus a confidence band rather than a single point (Pyth Network, price feeds and best practices documentation, undated, vendor material). API3's dAPIs are also first-party, sourced from API providers through a component called Airnode rather than an intermediary node network (API3 documentation, undated, vendor material). RedStone runs both models: push feeds written to chain for lending markets and vaults, and a pull path in which a signed data payload rides along with the transaction that consumes it (RedStone documentation, undated, vendor material).
None of this reaches the end user. A borrower liquidated overnight is liquidated against a number whose venues, weighting and staleness rules were set by someone else, and in most interfaces that someone is never named.
Push and pull, and who decides when the number changes
A push oracle updates onchain on its own schedule, whether or not anyone is about to use the price. Two conditions govern that schedule: a deviation threshold, triggering an update once the offchain value moves further than a set percentage from the last onchain one, and a heartbeat, forcing an update after a maximum idle period even if the price has not moved. Chainlink's own documentation warns that some heartbeats run to several hours, and tells integrators to read the updatedAt value returned by latestRoundData and pause or switch modes if the answer is not recent enough (Chainlink, data feeds documentation, undated, vendor material). Both settings vary by feed and are set by whoever configures it, not by the protocol consuming it.
A pull oracle does the opposite: nothing is written onchain until a transaction calls for it, at which point the caller attaches a recent signed update and the contract verifies it in the same transaction. That can be fresher than a heartbeat allows, but it moves the freshness question from "how long since the aggregator last updated" to "how old is the payload I am about to accept", and puts that check inside the integrating contract rather than the oracle network. Pyth is explicit about the risk: without a maximum age a caller can pick among several valid recent updates, so its SDK offers a method returning only a price no older than a threshold the integrator sets (Pyth Network, best practices documentation, undated, vendor material).
API3's managed dAPIs sit in between. A purchased plan holds its advertised deviation threshold and heartbeat until the plan expires, and the feed configurations themselves are committed as a Merkle root approved by a four-of-four multisig held by API3 technical team members, so changing one takes all four signatures (API3 documentation, security considerations page, undated, vendor material).
Spot, TWAP and NAV are different instruments, not one number reported three ways
A spot feed reports a current or near-current price, aggregated across venues at a point in time. It is what most lending markets use for collateral valuation, and what makes them vulnerable to a real but temporary move on a thin venue, covered below.
A time-weighted average price, or TWAP, averages over a defined window, commonly minutes rather than seconds, which smooths a single-block spike and is why many automated market makers expose an onchain TWAP as a manipulation-resistant reference. The trade-off is that a TWAP also lags a genuine, fast-moving crash: if the asset really is collapsing, the TWAP reports a price above the live market for as long as the window runs, mispricing collateral in the opposite direction.
A net asset value feed is a different instrument again, carrying no trading-venue price at all. Chainlink markets its NAVLink feeds as carrying the net asset value of tokenised assets, funds or portfolios (Chainlink, SmartData documentation, undated, vendor material). What such a feed transports is a valuation someone else struck, on that party's own schedule, often daily rather than continuously, and the oracle can only be as accurate as that upstream process. Treating a NAV feed and a spot feed as interchangeable answers to "what is this token worth" is a common diligence error.
Who can change a feed's configuration
Every feed has an owner, rarely visible from the protocol's front end. Chainlink's proxy and aggregator contracts carry an owner address that controls configuration changes, and on Ethereum the BTC/USD proxy owner is a multisignature safe, so several parties must approve a modification. Chainlink presents this as collusion resistance; it also means a small set of signers holds real power over what a decentralised price represents (Chainlink, data feeds documentation, undated, vendor material). Where the protocol rather than the provider sets a feed's collateral factor or the bounds within which it is trusted, that configuration usually sits behind the protocol's own governance, meaning a vote and a timelock rather than an emergency multisig, however urgent the fix, as the Moonwell incident below shows.
Five ways feeds fail
Thin-market manipulation: Mango Markets, October 2022
On 11 October 2022, a trader whom the CFTC later sued opened large leveraged positions on Mango Markets' MNGO perpetual market, then bought MNGO on the three exchanges that fed the oracle Mango relied on, pushing the reported price up more than thirteenfold over a thirty-minute span. Because his position was marked against that same oracle price, he drew out more than $110 million in other assets against the inflated collateral (U.S. CFTC, press release 8647-23, 9 January 2023). No smart contract bug was needed: the code did what it was built to do with a price one well-capitalised actor could move, because MNGO traded in thin markets. That is the generic risk in any feed sourced from venues an attacker can move with bounded capital.
A feed frozen during volatility: Venus Protocol, May 2022
When TerraUSD lost its peg in May 2022 and LUNA fell toward zero, the Chainlink LUNA/USD feed used by Venus Protocol on BNB Chain hit a configured minimum price and stopped moving at about $0.107, while LUNA's actual market price fell to roughly a cent, a tenth of that floor. Chainlink said the minimum value circuit breaker had triggered automatically because of unprecedented volatility, a component built to protect against flash crashes and market manipulation. Deposits of 230 million LUNA, carried onchain at the frozen figure and so valued at more than $24 million, supported borrowings of roughly $13.5 million and left Venus with an $11 million shortfall (The Record from Recorded Future News, 13 May 2022). A protection designed to stop a manipulated spike instead reported a real, catastrophic decline as a much smaller one, because the protocol never checked whether the feed had stopped updating. Chainlink's current documentation says the equivalent minAnswer and maxAnswer bounds are no longer used on most feeds and do not stop an application reading the latest answer, putting the burden of setting acceptable price limits on the integrator (Chainlink, data feeds documentation, undated, vendor material).
A depegged asset reported at par: USDC, March 2023
Silicon Valley Bank was closed by regulators on 10 March 2023, and Circle disclosed the same day that $3.3 billion of USDC's reserves, around 8% of the total, sat there. USDC fell below $0.88 on 11 March. Feeds tracking the traded price rather than assuming a hard dollar registered the decline at once, and liquidations followed, including in Aave's efficiency-mode markets, which grant higher borrowing ratios on the assumption that correlated stablecoins hold together. Aave and Benqi both froze stablecoin deposits, though Aave's freeze that day reached only its Avalanche V3 deployment, because the others required an onchain vote (Chaos Labs, USDC depeg summary, 2023). Circle said on 13 March that the $3.3 billion would be fully available once banks opened, after the Treasury Secretary and the prudential regulators announced that depositors at Silicon Valley Bank and Signature Bank would be made whole, and the depeg closed (Circle, press release, 13 March 2023). This is the mirror image of Venus: there a real crash was reported as stability, here a real but temporary depeg was reported accurately and still forced liquidations, because par is an assumption the oracle does not make on the protocol's behalf.
An outage in the delivery path, not the price itself
A feed can also fail because the infrastructure carrying it stops, with nothing happening to the underlying asset. On Layer 2 networks, price feeds are only as current as the sequencer batching transactions down to the underlying chain. When Arbitrum's sequencer went down for close to three hours on 15 December 2023, after a surge of low-value inscription traffic pushed batch data from about 3MB an hour to 80MB and the sequencer stalled against a limit on pending batches, no new data of any kind could post until it recovered (Dedaub, Arbitrum sequencer outage analysis, 2023). Chainlink's mitigation is a separate sequencer uptime feed returning a binary status and a timestamp, with a grace period, one hour in its reference implementation, before a contract trusts prices again; a contract that never reads it treats a stale, pre-outage price as current the moment the sequencer resumes (Chainlink, L2 sequencer feeds documentation, undated, vendor material). Nothing was wrong with the aggregation. The delivery pipe stopped, and few integrations are built to notice.
A governance change to the feed itself: Moonwell, February 2026
Not every failure is an attack or a market event. On 15 February 2026, Moonwell governance proposal MIP-X43 took effect on its Base and Optimism markets and introduced a configuration error in how the cbETH collateral price was derived: the new setup used the raw cbETH/ETH exchange rate alone instead of multiplying it by the separate ETH/USD feed, so cbETH, trading near $2,200, was reported onchain at about $1.12. Liquidators seized 1,096 cbETH for pennies on the dollar, leaving roughly $1.78 million of bad debt, and because correcting the oracle required a further governance vote and timelock, the mispricing outlived its own discovery (The Block, 2026). Whichever mechanism controls a feed's configuration, that mechanism's speed under stress is part of the oracle's risk profile.
At Proof of Talk's Paris 2026 edition, a session on the Hecto Main Stage, "DeFi Under Attack: Securing Onchain Finance and the Machine Economy", brought people from Mysten Labs, Ledger, Edge & Node and CertiK together on this class of exposure, in a discussion moderated by Nikola Stojanow. All five incidents sit inside a tension the Bank for International Settlements has set out: introducing some degree of centralisation into oracles may boost efficiency, but it also adds trusted parties to a system designed to be trustless (Bank for International Settlements, BIS Bulletin No. 76, "The oracle problem and the future of DeFi", 7 September 2023). A protocol's designers make that trade explicitly or by default.
Questions a risk committee should ask before relying on a feed
- Which venues feed this price, how deep is trading on each, and what capital would move the reported number for one update cycle?
- Is this a push feed with a deviation threshold and heartbeat, or a pull feed verified at call time, and what maximum data age will the integrating contract accept?
- Is the asset priced with a spot feed, a TWAP, or a published net asset value, and does the risk model assume the wrong one of the three?
- Does the feed carry a floor, ceiling or circuit breaker, is it actually enforced, and what happens to positions if the true price moves through that bound while the reported number does not?
- Who can change this feed's parameters or source venues, through what process, and how fast can that process act relative to how fast a mispriced feed generates bad debt?
- Does the integration check staleness, round completeness and, on a Layer 2, sequencer liveness, or does it treat the last available number as current?
- Where two correlated feeds should move together, such as a stablecoin and the assets priced against it, is anything monitoring the divergence?
None of this is legal, tax or investment advice; it is a diligence checklist, and the answers differ by protocol, by chain and by feed. For the collateral mechanics an oracle price feeds into, see how DeFi lending vaults source their yield; for the wider attack surface around it, see a DeFi security threat model built for institutions. On the conditions that turn a mispriced feed into a forced sale, see how liquidity and leverage interact under stress.