defirisk.co
rubric v1.7.0

Oracle-manipulation-proof borrow cap

A economic risk factor in the v1.7.0 rubric. Measured per protocol on a s cadence.

Methodology how we score #

**What this measures** This factor evaluates whether the protocol enforces a per-asset borrow cap that is calibrated to the manipulation-resistance of the oracle for that asset. Specifically, it checks whether the maximum single-transaction borrow amount is less than or equal to the oracle source pool depth multiplied by a manipulation-resistance multiplier (typically set at ten to twenty times). Sources include on-chain reads of borrow caps and DEX subgraph data for oracle source pool liquidity. This factor applies to lending protocols only.

**Why it matters** Oracle manipulation attacks are profitable only when the borrowable value exceeds the cost of manipulation. Mango Markets ($115M, 2022) is the most extreme example in the dataset: the attacker used $5M in USDC to pump the MNGO token price thirty times higher, then borrowed against the inflated unrealized profit as collateral, draining all borrow liquidity across the protocol. An oracle-manipulation-proof borrow cap would have limited the attacker's maximum extractable value to a fraction of the oracle pool depth, making the attack economically non-viable. Without per-asset borrow caps, lending protocols with thin oracle liquidity are exposed to unbounded loss from oracle manipulation.

**Green / Yellow / Red** Green: all assets have borrow caps set at or below the oracle pool depth times ten, with caps enforced on-chain and updated when oracle pool depth changes materially. Yellow: borrow caps exist but are set above the oracle pool depth times ten for one or more assets, or caps are not updated when oracle pool depth changes. Red: no per-asset borrow caps, or borrow caps are set at protocol-wide maximums unrelated to oracle pool depth.

**Common gray cases** For assets with deep, multi-venue liquidity (e.g., ETH, USDC), the manipulation-resistance threshold is effectively unlimited and this factor scores green by default. The critical scoring cases are governance tokens and long-tail assets used as collateral.

**Notable historical examples** - **Mango Markets** ($115M, 2022): No oracle-manipulation-proof borrow cap; attacker borrowed all available liquidity against a self-inflated MNGO position.

Measurement what to look for #

Determine whether the per-asset borrow cap is ≤ (oracle pool depth × manipulation-resistance multiplier).

Data & output #

Data source
On-chain borrow cap per asset via RPC + oracle pool depth from DEX subgraph (see F055)
Output format
Green / Yellow / Red
Evidence artifact
Borrow cap USD + oracle pool depth USD + derived manipulation-cost estimate
Confidence signal
green = borrow cap <10% of oracle pool depth (manipulation cost >> profit); yellow = 10–50% of pool depth; red = >50% of pool depth (profitable to manipulate oracle to max out borrow); gray = protocol does not use DEX-TWAP oracle (N/A)

Scored protocols 80 carry this factor #

Protocol RD-F-073
Aave v3 ethereum green Across Protocol ethereum gray Aerodrome Finance base not_applicable Axelar Network ethereum not_applicable Babylon Protocol bitcoin not_applicable Balancer (v2 + v3) ethereum gray Beefy Finance ethereum not_applicable BENQI avalanche green BlackRock USD Institutional Digital Liquidity Fund (BUIDL) ethereum not_applicable Cap (cUSD / stcUSD) ethereum not_applicable Centrifuge ethereum gray Chainlink CCIP ethereum not_applicable Circle USYC binance not_applicable Compound V3 (Comet) ethereum yellow Concrete ethereum not_applicable Convex Finance ethereum not_applicable crvUSD (Curve Stablecoin) ethereum yellow Curve Finance ethereum not_applicable deBridge ethereum gray Dolomite ethereum yellow dYdX v4 (dYdX Chain) dydx not_applicable EigenLayer ethereum not_applicable Ethena ethereum not_applicable ether.fi ethereum not_applicable Euler V2 ethereum yellow Falcon Finance ethereum not_applicable Fluid ethereum red Frax Finance ethereum yellow GMX v2 (GMX Synthetics) arbitrum not_applicable Hyperlane ethereum not_applicable Hyperliquid arbitrum gray Jito solana not_applicable Jupiter solana not_applicable Jupiter Perpetual Exchange solana not_applicable JustLend DAO tron red Kamino Lend solana yellow Kinetiq hyperliquid not_applicable Lido ethereum not_applicable Liquid Collective (LsETH) ethereum not_applicable Liquity V1 + V2 (LUSD / BOLD) ethereum yellow Lista DAO bsc yellow Lombard Finance ethereum gray M^0 ethereum not_applicable Maple Finance ethereum not_applicable Marinade Finance solana not_applicable Meteora solana not_applicable mETH Protocol ethereum not_applicable Midas ethereum not_applicable Morpho V1 (Morpho Blue + MetaMorpho) ethereum yellow Multipli ethereum not_applicable Ondo Finance ethereum gray OpenEden ethereum not_applicable Orca solana not_applicable PancakeSwap bsc not_applicable Pendle Finance ethereum not_applicable Polymarket polygon not_applicable QuickSwap polygon not_applicable Raydium solana not_applicable Rocket Pool ethereum not_applicable Sanctum solana not_applicable Save (formerly Solend) solana yellow Sky Lending (formerly MakerDAO) ethereum green Spark Protocol ethereum green Spiko stellar not_applicable Stake DAO ethereum not_applicable StakeWise v3 ethereum not_applicable Stargate Finance ethereum gray stHYPE (Valantis Labs) hyperliquid not_applicable SUNSwap (sun.io) tron not_applicable Superstate ethereum not_applicable Sushi (SushiSwap) — v2 + v3 + Trident + BentoBox/Kashi + SushiXSwap ethereum not_applicable Symbiotic ethereum not_applicable Synapse Protocol ethereum not_applicable Uniswap (v2 + v3) ethereum not_applicable USDD (Decentralized USD) tron not_applicable Usual (USD0 / bUSD0 / USUAL) ethereum not_applicable Veda (BoringVault) ethereum not_applicable Venus Protocol bsc yellow Wormhole ethereum not_applicable Yearn Finance ethereum not_applicable

Linked hacks 1 historical incident #

causalMango Markets — Self-funded MNGO spot price pump using two accounts → inflated unrealized collateral → lending pool drain2022-10-11 · $115M · Self-funded MNGO spot price pump using two accounts → inflated unrealized collateral → lending pool drain · Oracle-manipulation-proof borrow cap per asset [via cross-hack: Factor 42: Unrealized PnL Accepted as Borrowing Collateral]
rubric_version v1.7.0 factor RD-F-073 category 4 carried 80 critical no