Lodestar Finance plvGLP Donation / Oracle Manipulation Exploit (2022-12-10)
- Name: Lodestar Finance plvGLP donation / oracle manipulation exploit
- Date: 2022-12-10
- Protocol: Lodestar Finance
- Chain: Arbitrum
- Category: donation / share-price manipulation / collateral-price inflation / oracle manipulation / bad-debt extraction
- Loss: about 6.9M, with public statements at the time saying roughly 2.8M GLP remained potentially recoverable inside the manipulated collateral path
- Summary: The Lodestar attacker used about 6M of bad debt.
- Trigger / entry point:
- Lodestar accepted
plvGLPas collateral but did not use a Chainlink-style external price feed for it; the protocol’s own docs explicitly carved outplvGLPas an oracle exception. - The oracle path valued
plvGLPfrom the Plutus vault exchange rate, i.e.totalAssets / totalSupply, multiplied by the underlying GLP price. - Plutus’
donate()behavior was normal vault behavior: assets could increase without new shares being minted. - Lodestar treated that instantly changeable exchange rate as money-good collateral inside a Compound-style lending market.
- Lodestar accepted
- Root cause:
- Lodestar assumed the
plvGLPvault exchange rate was a trustworthy collateral input even though one actor could increase vault assets through donation without minting proportional shares. - The protocol therefore converted a legitimate vault-accounting feature into a manipulable oracle. Plutus’ own statement after the incident emphasized that
donate()was effectively equivalent to transferring underlying assets into a standard vault; the bug was not that Plutus mis-accounted those assets, but that Lodestar treated that instantly changeable vault state as money-good collateral. - Once
lplvGLPcollateral value rose, Lodestar’s borrow controls still honored it at face value. - In practice, the protocol merged two brittle assumptions: that
plvGLPexchange rate could not jump violently inside one block, and that a vault-share price derived from spottotalAssets / totalSupplywas safe to use as lending collateral.
- Lodestar assumed the
- Exploit path:
- The attacker funded contract
0x7596acadf6c93f01b877f5a44b49407fffc53508with a bundle of flash loans totaling about70,096,512.99 USDCplus14,960 WETHequivalent buying power across eight loans. - They deposited roughly
$70Mof value into Lodestar’slUSDCmarket, minting about3,490,966,280.82 lUSDCand using that position as the base collateral for the rest of the loop. - They borrowed the entire underlying
plvGLPbalance from Lodestar’slplvGLPmarket, then immediately redeposited thatplvGLPback into Lodestar to mintlplvGLPreceipt tokens. - By repeating the borrow-then-redeposit loop about 16 times, they concentrated control of roughly
3,051,070,160.01 lplvGLP, i.e. effectively the whole market’s receipt-token supply. - They then called Plutus’
GlpDepositor.donate()path, increasingplvGLPassets without increasingplvGLPsupply. Public postmortems describe the resultingplvGLP : GLPexchange rate moving from about1.07to about1.82. - Lodestar’s oracle read that manipulated exchange rate as a real collateral-price increase. Because the market’s collateral factor was
80%, SourceHat’s reconstruction implies each$1,000ofplvGLPthat previously supported about$800of borrowing now supported about$1,464after the donation-induced reprice. - The attacker transferred the inflated
lplvGLPposition to second contract0xe1ba6511f95d8e6bca786ecbc4472de4c4137bff, isolating the debt on the first address while using the second to drain liquidity from the rest of Lodestar’s markets. - With the inflated collateral marked at face value, the second contract borrowed out the remaining liquid assets across Lodestar, leaving the protocol undercollateralized.
- The attacker then unwound the manipulated
plvGLP, redeemed into underlyingfsGLP, sold out to harder assets, repaid the flash loans, and bridged proceeds away.
- The attacker funded contract
- What the attacker needed to be true:
- Lodestar had to let a large flash-loaned deposit dominate the borrow side of the relevant markets before any rate limit, cap, or collateral quarantine stopped the loop.
- The
plvGLPoracle had to read a live vault exchange rate rather than a delayed or haircut value. - The Plutus vault had to permit asset donations that increased
totalAssetswithout issuing newplvGLPshares. - Lodestar needed to accept the manipulated
lplvGLPvalue quickly enough that the attacker could borrow out stronger assets before governance or operators paused the market. - The protocol needed enough remaining liquid assets in sibling markets for the inflated collateral to monetize into real value.
- Technical anatomy worth remembering:
- This was not a fake oracle report. The oracle honestly reflected a manipulable vault state. The mistake was using that state as lending collateral truth.
- The exploit sits at the boundary between oracle manipulation and donation / share-price manipulation. The donation into Plutus printed the exchange rate; Lodestar’s oracle and Comptroller turned that printed exchange rate into borrowable solvency.
- Plutus’
donate()path was ordinary vault behavior, not the exploit in itself. The sharper lesson is that any integrator who readstotalAssets / totalSupplyas same-block collateral truth is inheriting the vault’s donation semantics whether or not the vault is behaving as designed. - The borrow/redeposit loop mattered because it let the attacker own almost all of the
lplvGLPsupply before paying the cost to inflate the exchange rate. - The two-address structure mattered too: one address kept the debt, while the other used the now-overvalued collateral tokens to extract the healthy assets.
- Lodestar’s own lesson after the hack was blunt:
plvGLPcollateral could not be allowed to undergo instantaneous same-block price change.
- Representative transactions and addresses:
- Main exploit transaction:
0xc523c6307b025ebd9aef155ba792d1ba18d5d83f97c7a846f267d3d9a3004e8c - Attacker EOA highlighted by REKT:
0xc29d94386ff784006ff8461c170d1953cc9e2b5c - Primary attack contract (
Ain SourceHat’s reconstruction):0x7596acadf6c93f01b877f5a44b49407fffc53508 - Secondary drain contract (
Bin SourceHat’s reconstruction):0xe1ba6511f95d8e6bca786ecbc4472de4c4137bff - Lodestar
lUSDCmarket:0x5e3f2abaecb51a182f05b4b7c0f7a5da1942de90 - Lodestar
lplvGLPmarket:0xcc25dac54a1a62061b596fd3baf7d454f34c56ff - Profit-distribution address noted by REKT / CertiK:
0xb50f58d50e30dfdaad01b1c6bcc4ccb0db55db13
- Main exploit transaction:
- Response / mitigation:
- Lodestar paused deposits and set interest rates to zero while assessing the bad debt and trying to negotiate with the attacker.
- Public statements said roughly
2.8M GLPremained potentially recoverable from the manipulated collateral side, though the protocol still faced large realized losses. - Post-incident commentary converged on the same immediate fix: do not let a vault-share oracle used as collateral react instantly to donation-driven exchange-rate changes.
- More generally, the incident reinforced that adding one custom asset to a battle-tested lending fork can create a new system-defining attack surface.
Why this incident matters
- Lodestar is a clean example of a vault donation becoming a lending-oracle exploit without any compromised reporter or stale feed.
- It broadens the donation / share-price-manipulation corpus beyond near-empty ERC-4626 launches like Resupply and rounding-heavy cases like Wise by preserving the
non-empty yield wrapper used as collateral oraclevariant. - It is also a useful bridge case between
oracle manipulationanddonation/share-price manipulation: the attacker did not need the oracle to lie, only to tell the truth about a manipulable exchange-rate input. - The sharper preserved healthy-side boundary is that
wrapper exchange rate is readableshould not have been treated aswrapper can immediately underwrite full borrow power and liquidation authority across deeper sibling reserves. Lodestar needed a stronger downstream distrust boundary thanPlutus math is locally canonical right now.
Three wrapper-and-borrow-authority promotions this incident collapsed
-
Extra GLP-backed value appeared inside the
plvGLPwrapper- Plutus’
GlpDepositor.donate()path increased wrapper assets without minting matching newplvGLPshares. - At this stage the strongest safe claim was only that more underlying value now sat behind the wrapper. That did not yet mean incumbent shares had economically earned that increase, that the move was manipulation-resistant, or that the new exchange rate deserved immediate lending meaning.
- Plutus’
-
Lodestar published that donated wrapper state as canonical collateral truth
GLPOracle/PriceOracleProxyETHturned Plutus’ livetotalAssets / totalSupplyexchange rate into Lodestar’splvGLPprice input.- This was the decisive over-promotion. A wrapper-local accounting state that Plutus could honestly report was treated as if it were already a protocol-safe collateral mark for a Compound-style money market.
-
The rest of Lodestar spent against that published truth
- After the donation-driven reprice, the attacker moved the inflated
lplvGLPposition to a second address and borrowed real assets out of healthier sibling markets. - This was the final and most dangerous promotion:
wrapper exchange rate movedbecameprotocol-wide borrow authority exists right now, even though the new mark was still just attacker-authored wrapper state.
- After the donation-driven reprice, the attacker moved the inflated
Pattern tags:
- Direct donation / share-price manipulation routed through a custom wrapper oracle.
- Market-concentration setup: borrow / redeposit loops let the attacker dominate
lplvGLPbefore paying to move the underlying exchange rate. - Cross-account debt separation: one account kept the debt while a second account used the now-overvalued collateral tokens to drain healthy markets.
- Design companions: vault-share-truth-security-object, collateral-admission-lag-and-borrow-side-quarantine, and wrapper-semantic-price-revocation-and-collateral-derecognition.
Why the exploit worked
- Lodestar carved
plvGLPout into a custom oracle path that treated the live Plutus exchange rate as collateral truth instead of applying a slower or more skeptical solvency mark. - The attacker could dominate the
lplvGLPmarket through recursive borrow-and-redeposit loops, so any later donation-driven reprice applied to almost the entire economically relevant collateral base. - Plutus’
donate()path legitimately increased assets without minting new shares; Lodestar inherited that semantics as if it were a manipulation-resistant oracle input. - Collateral transfers and borrowing remained permissive enough that the attacker could separate the debt-bearing account from the draining account and monetize the inflated mark before pause controls caught up.
Detection and audit pivots
- Inventory every asset that bypasses the default oracle stack and ask whether the exception path ultimately resolves to live
totalAssets / totalSupply,pricePerShare, or another wrapper-local rate. - Simulate what happens if one actor owns nearly all receipt tokens in a listed wrapper market before the exchange rate moves; concentration often matters as much as the donation itself.
- Check whether collateral tokens can be transferred to a fresh account while debt stays behind, especially when that transfer can turn one printed mark into protocol-wide borrowing power.
- Review whether a same-block wrapper-rate jump can expand borrow capacity with no cap, damping, or delayed collateral-recognition window.
- Ask whether the protocol has an asset-local de-recognition path once a listed wrapper proves donation-sensitive in production.
Failure-prevention checklist
- Treat every wrapper-local exchange rate used as collateral as a separate solvency object from the underlying asset’s spot price. A custom oracle path that resolves to
totalAssets / totalSupplyor a vault-specific exchange rate deserves its own collateral policy, not the base asset’s default settings. - Keep donation-sensitive wrappers in isolated mode or under tight debt ceilings until the protocol has a strong answer for direct-donation, low-supply, and market-concentration stress cases.
listed wrappershould not meanmay underwrite the whole rest of the balance sheet. - Add borrow-side quarantine for abnormal wrapper-rate jumps. If a wrapper mark moves far faster than plausible earned yield, the healthier default is haircut, delay, or pause rather than immediate new borrowing power.
- Model recursive market-concentration loops as part of listing risk. If one actor can borrow the wrapper, redeposit it, and end up owning almost the entire receipt-token side before paying to move the exchange rate, the oracle is already too close to attacker control.
- Keep collateral transfer, liquidation, and debt-separation paths coupled to the manipulated-asset risk model. If one address can warehouse the debt while another carries the inflated collateral mark into healthy sibling markets, the protocol should treat that portability itself as part of the exploit surface.
- Maintain an explicit semantic revocation path for wrappers. Once production proves that
canonical wrapper mathandsafe collateral meaningcan diverge under donation, governance and operators need a fast way to de-recognize the asset rather than continue honoring the raw wrapper mark.
Audit prompts
- Which exact function or state read sets the collateral value for this wrapper, and can direct donations or other off-path balance changes move it without minting matching shares?
- If one actor first dominates the wrapper market through borrow-and-redeposit loops, how much real capital is then required to move the wrapper exchange rate enough to break the protocol’s collateral assumptions?
- What concrete control stops a same-block wrapper-rate jump from becoming immediate borrow power across deeper sibling reserves: a cap, a haircut, a delayed mark, isolated mode, or nothing at all?
- Can an attacker separate debt and monetization across addresses after the wrapper mark is printed, leaving one account undercollateralized while another drains healthier assets?
- If the wrapper’s exchange rate doubled but exit liquidity or redemption depth did not, where does the protocol encode that distinction before lending against the wrapper at face value?
- How quickly can governance or operators revoke collateral recognition for one listed wrapper without freezing unrelated markets, and is that path operationally realistic during an active exploit?
Lessons that should already be standard
- An oracle can be perfectly honest and still be catastrophically unsafe. If it reports attacker-printable wrapper state,
the feed told the truthis not a defense. - Wrapper integrations are not ordinary token listings. They are balance-sheet transformations, and the wrapper’s accounting semantics become part of the lending protocol’s own solvency surface.
- Market concentration and oracle design are one attack surface. Letting one actor own almost the whole receipt-token side before they pay to move the exchange rate is already a major pricing failure.
Redeemable at this rate inside the wrapperis not the same claim assafe to fund protocol-wide borrowing at this rate right now. Collateral meaning has to be stricter than local wrapper math.- Donation-sensitive wrappers need a fast downgrade path. Once a wrapper proves that fresh accounting state can outrun realistic exit value, the healthy response is to quarantine or de-recognize it, not to keep trusting the same mark out of consistency.
Internal linkages
- Core recurring pattern: donation-share-price-manipulation — the donation itself was ordinary wrapper accounting; the deeper recurring mistake was letting off-path asset growth become canonical share-price truth.
- Broader oracle/collateral framing: donation-share-price-manipulation — useful when the sharper question is how that printed wrapper mark crossed the next trust boundary and became borrowable collateral.
- Adjacent pattern: oracle-manipulation — the monetization step was classic fake-collateral borrowing, but the price-printing mechanism came from vault-share donation math rather than a thin spot market.
- Positive-design companion: collateral-admission-lag-and-borrow-side-quarantine — Lodestar’s real downstream mistake was not merely reading the wrong number, but letting a fresh donation-sensitive wrapper mark become immediate borrow-side authority across the rest of the protocol.
- Wrapper-semantics companion: wrapper-semantic-price-revocation-and-collateral-derecognition — once a listed wrapper proves that
canonical exchange rateandsafe collateral meaningcan diverge under donation, the healthier response is to tighten or revoke collateral recognition instead of honoring the raw wrapper mark at face value.
Control surface
-
The decisive leverage sat in Lodestar’s custom
plvGLPoracle design, collateral admission for a vault share whose exchange rate could jump via donation, market-level concentration that let one actor dominatelplvGLP, and the Comptroller’s willingness to treat that manipulated collateral mark as borrowable solvency. -
Lodestar did not merely have a
bad oracle. It trusted a vault exchange rate that an attacker could print on demand and then leveraged that printed mark across the rest of the balance sheet. -
The healthier boundary would have been explicit that
wrapper-local rate is readablewas not yet the same claim asthis wrapper may immediately mint debt and support liquidations against deeper sibling reserves. -
Sources:
-
Last reviewed: 2026-08-05 UTC