ZeroLend One — disclosed vulnerability reports and payouts

Every publicly disclosed and closed bug bounty report we hold for ZeroLend One, with our own summary of each finding and a link to the original disclosure.

Reports indexed
24
Total paid
$0
Critical
0
Largest payout
$0

This page collects the 24 closed, publicly disclosed ZeroLend One reports indexed on CoinBuggie. Nothing here is active or unpatched — every entry was published by the programme or the researcher after remediation.

The findings concentrate in Logic error, Access control, Front-running / MEV, Oracle manipulation, across EVM-Solidity. Reading a single protocol end to end is the fastest way to see which assumptions its codebase repeatedly gets wrong, which is usually a better predictor of where the next finding lives than the category alone.

Use the vulnerability class links below to compare these findings against the same bug class in other protocols.

What reviewers look for

  • Logic error findings disclosed against ZeroLend One
  • Access control findings disclosed against ZeroLend One
  • Front-running / MEV findings disclosed against ZeroLend One
  • Oracle manipulation findings disclosed against ZeroLend One

Curated highlights

The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.

mediumLogic errorEVM-Solidity$0

ZeroLend One: Using the same heartbeat for multiple price feeds, causing DOS

ZeroLend One's price-fetch path hardcodes a single 30-minute heartbeat in PoolGetters::getAssetPrice and applies it uniformly to every asset on every chain, even though Chainlink feeds use chain- and pair-specific heartbeat intervals such as ~24 hours for USDT/USD on Linea. This causes the protocol's staleness guard to fire spuriously during normal feed inactivity, reverting ordinary operations like collateral withdraws and producing sustained denial of service on affected chains; conversely the loose threshold on fast-updating chains risks accepting stale prices. The proposed fix is to bind each oracle to its own configurable heartbeat parameter so freshness is checked against the actual feed schedule.

ZeroLend OnesherlockSep 10, 2024Open
mediumAccess controlEVM-Solidity$0

ZeroLend One: CuratedVaults are prone to inflation attacks due to not utilising virtual shares

ZeroLend One's CuratedVault ERC-4626 wrapper sets VIRTUAL_SHARES and VIRTUAL_ASSETS to zero in SharesMathLib, diverging from the Morpho-blue code it derives from, leaving vaults vulnerable to the classic first-depositor inflation attack. An attacker can front-run the first deposit in a fresh vault position, inflate the share price with a donation plus a 1e18+1 own deposit that mints a single share, and thereby cause a subsequent legitimate depositor's contribution to round down to zero shares. The attacker ends up controlling the only outstanding share and can redeem it for nearly all vault assets including the victim's funds. Sherlock upheld the finding as Medium severity with duplicates after rejecting an invalid-claim escalation, even while noting the attacker also suffers some loss.

ZeroLend OnesherlockSep 10, 2024Open
highLogic errorEVM-Solidity$0

ZeroLend One: A Reserve Borrow Rate can be significantly decreased after liquidation

ZeroLend One is an Aave-forked lending protocol. During a liquidation, the reserve's cached nextDebtShares value is overwritten with the number of debt shares burned rather than the total shares remaining after the burn. Because that incorrect value feeds the interest-rate strategy, the reserve's borrow rate collapses proportionally to how little debt the liquidator covered, allowing a malicious borrower to drive an unhealthy position into a much cheaper borrowing state and repay at an artificially reduced rate.

ZeroLend OnesherlockSep 10, 2024Open
highLogic errorEVM-Solidity$0

ZeroLend One: An attacker can hijack the `CuratedVault`'s matured yield

ZeroLend One's CuratedVault computed totalAssets by reading each underlying pool's position balance through a view function that never advances the pool's liquidityIndex. Because accrued yield was not booked before pricing shares, depositors got shares minted against the stale pre-accrual asset figure. An attacker could flash-loan a large deposit, receive underpriced shares, redeem immediately, and capture a pro-rata share of matured yield at existing suppliers' expense. The Sherlock judge accepted an escalation and upheld this as High with duplicates; the fix forces the pool reserve to update at the start of totalAssets().

ZeroLend OnesherlockSep 10, 2024Open
mediumLogic errorEVM-Solidity$0

ZeroLend One: Inconsistent Application of Reserve Factor Changes Leads to Protocol Insolvency Risk

ZeroLend One, an Aave-fork lending protocol, lets the pool factory owner change a global `reserveFactor` that applies across every pool at once. When this parameter changes, the reserve accounting routine applies the new factor to treasury share minting while the liquidity index update still reflects the prior cached rate, so the treasury accrues a share of interest that was never actually earned by the pool. The mismatch means increasing the factor over-mints treasury shares (leaving insufficient assets for user withdrawals and eventually breaking withdrawals), while decreasing it under-mints shares that permanently lock funds in the contract. The finding includes a concrete PoC test and was upheld as Medium with duplicates after the escrow/rules escalation was rejected by the judging team.

ZeroLend OnesherlockSep 10, 2024Open
highLogic errorEVM-Solidity$0

ZeroLend One: Full Liquidation Won't Sweep the Whole Debts With Leaving Some, And Will Wrongly Set Borrowing as False

ZeroLend One's liquidation path confuses debt shares with debt assets. The liquidate() debtToCover parameter is documented as assets, but _calculateDebt() returns raw debtShares and userCollateralBalance is fed in as supplyShares without any index-based conversion, so the entire flow treats share counts as asset amounts. A liquidator attempting full liquidation therefore repays fewer debt units than intended and, because the equality check compare userDebt against actualDebtToLiquidate fires on the share values, the protocol wrongly flips the debt asset's borrowing flag to false. The PoC demonstrates ~9.07e18 debtShares remaining after a purported full liquidation while isBorrowing becomes false, corrupting total debt, LTV and health factor calculations across the pool.

ZeroLend OnesherlockSep 10, 2024Open

All reports in this group

Vulnerability classes disclosed here

Related protocol pages