CG-001CriticalSupportedStrongly supported
81%
Potential oracle takeover leading to over-borrowing
An unprotected price-source setter lets any caller point SpotPriceOracle at a pool they control. LendingVault then values collateral at the attacker-chosen price and lends against it.
Deploy a malicious pool
IPool.getReserves() · contracts/IPool.sol:L5
- What happens
- Attacker deploys a contract whose getReserves() returns an arbitrary reserveDebt / reserveCollateral ratio.
- Why it is included
- getPrice() trusts whichever IPool implementation is configured; the interface places no constraints on returned values.
- Assumptions
- Arbitrary contract deployment is unrestricted on the target chain.
- Step confidence
- 72%
Supporting evidence
contracts/IPool.sol
line 5// SPDX-License-Identifier: MITpragma solidity ^0.8.20; interface IPool { function getReserves() external view returns (uint112 reserveCollateral, uint112 reserveDebt);} How to break the chain
Impact
An attacker could borrow up to the vault’s entire debt-token balance against a nominal ETH deposit, leaving the protocol with unrecoverable bad debt.
Assets at risk
- LendingVault debt-token balance
Preconditions
- Attacker can deploy a contract implementing IPool.getReserves().
- Attacker holds a small amount of ETH to deposit as collateral.
- LendingVault holds debt-token liquidity.
Why this confidence
Chain confidence 81%, derived from validation checks rather than model certainty.
- Source code located for every step
- Referenced contracts and functions exist
- Call graph links LendingVault → SpotPriceOraclecollateralValue → getPrice
- State dependency confirmed`pool` written by setPool, read by getPrice
- Static detector flags the core issueOnly missing-zero-check fired on setPool; no detector reports the missing access control directly.
- Runtime exploit confirmedNo transaction simulation was performed.
Assumptions & limitations
- Debt token is a standard ERC-20 held by LendingVault.
- Runtime exploitability has not been confirmed.
- The debt-token and pool implementations are outside the repository.