Moola Market MOO Oracle Manipulation (2022-10-18)
- Name: Moola Market MOO oracle manipulation
- Date: 2022-10-18
- Protocol: Moola Market
- Chain: Celo
- Category: oracle manipulation / protocol-native collateral inflation / TWAP-manipulation / undercollateralized borrow
- Loss: about 9.1M drained, including roughly 8.8M CELO, 765k cEUR, 644k cUSD, and 1.8M MOO; about 93.1% was later returned
- Summary: The attacker used roughly 243,000 CELO of capital to attack Moola’s solvency model from both sides. First, they supplied about 60,000 CELO to Moola in order to borrow roughly 1.8 million MOO, the protocol’s own token, and use that MOO as collateral. Then they spent the remaining CELO aggressively buying MOO on Ubeswap, pushing the thin MOO/CELO market from about
0.02 CELOper MOO to about0.73 CELOand dragging up the MOO TWAP oracle that Moola itself trusted. With the protocol now treating attacker-pumped MOO collateral as if it were durable value, the attacker borrowed out essentially all remaining CELO, cEUR, and cUSD liquidity. This was not justlow liquidity on a small token; it was a self-referential collateral design failure where a protocol let its own thinly traded token become borrow power against the rest of the balance sheet. - Trigger / entry point:
- Moola allowed MOO to be borrowed and then posted back as collateral.
- Moola priced that collateral from a manipulable MOO TWAP sourced from Ubeswap.
- The borrowable assets on Moola — CELO, cEUR, and cUSD — were deeper and more economically useful than the market depth backing MOO itself.
- The attacker did not need a flash loan or a novel contract bug; the protocol exposed a manual leverage loop that let market impact on Ubeswap become protocol-recognized solvency.
- Root cause:
- Moola put its own low-liquidity token too close to the solvency core by letting MOO function as recognized collateral for deep-liquidity assets.
- The protocol relied on a MOO TWAP that could still be dragged sharply upward because the underlying Ubeswap market was too shallow relative to the borrowing power available inside Moola.
- The design was reflexive: CELO borrowed or retained inside the system could be used to buy more MOO, which increased the oracle mark on previously posted MOO collateral, which then unlocked more borrowing capacity.
- The real failure was not merely
oracle choice; it was that Moola let a thin, protocol-adjacent price become money-good collateral against the rest of the protocol’s reserves.
- Exploit path:
- The attacker funded address
0x5dae2c3d5a9f35bfaf36a2e6edd07c477f57789ewith182,087.399 CELOin transaction0x0c686ac4ecb6be587c045ddd07379b094ee6f0f01085743a3ebe62f60465c5ff, then routed capital through additional addresses before the drained funds converged at exploiter address0x95b5579b323ddc6cd290bd4da6e56ba019588efc. - Using roughly
243,000 CELOof working capital according to incident analyses, the attacker supplied about60,000 CELOinto Moola and borrowed about1.8M MOO. - The attacker posted the borrowed MOO back into Moola as collateral, creating a reflexive loop where Moola’s own token now supported borrowing capacity.
- With the remaining roughly
183,000 CELO, the attacker repeatedly bought MOO on the thin Ubeswap MOO/CELO market, pushing the price from about0.02 CELOto about0.73 CELOper MOO. - Because Moola’s oracle path consumed that Ubeswap-based MOO TWAP, the protocol began treating the attacker’s MOO collateral as dramatically more valuable than the market could actually support.
- Against that printed collateral value, the attacker borrowed out the protocol’s remaining liquid assets, draining about
8.8M CELO,765k cEUR,644k cUSD, and1.8M MOOin the process. - Later the same day, after public negotiation with the team, the exploiter address returned most of the funds to Moola governance multisig
0xd7f77169d5e6a32c5044052f9a49eb94697b25ed, including8,126,912.7222798 CELOin transaction0xc3018d2e65bcd7c89d4fa2849017c6169c84c0934ca80c2c8dfd065da90d569d, plus separate MOO, cEUR, and cUSD transfers.
- The attacker funded address
- What the attacker needed to be true:
- MOO liquidity on Ubeswap had to be thin enough that a few hundred thousand CELO could move the TWAP sharply.
- Moola had to let MOO count as collateral for borrowing stronger assets.
- Borrow caps and collateral policy had to be loose enough that manipulated MOO marks could unlock most of the protocol’s reserves.
- The protocol had to trust the same ecosystem-local market the attacker was actively dominating.
- Technical anatomy worth remembering:
- This is a clean
protocol-native token as collateraloracle-manipulation incident, not an LP-wrapper case like Cheese Bank and not a derivatives-PnL case like Mango. - It is also a useful reminder that
TWAPis not a sufficient defense when the underlying market is too thin. Time-averaging a market one actor can dominate still gives you attacker-shaped collateral values. - The exploit was reflexive in two senses: Moola let its own token be used as collateral, and the attacker used capital that originated inside or around the protocol’s own market structure to keep levering the mark higher.
- No exotic bug was required. The exploit path was mostly market structure plus collateral policy: buy the thin token, let the oracle accept the new price, then borrow better assets elsewhere in the same protocol.
- The case is especially worth preserving because it shows how bear-market liquidity decay can turn a protocol-native asset from
acceptable collateral on paperintocheaply printable solvencyin practice.
- This is a clean
- Representative transactions and addresses:
- Funding transaction:
0x0c686ac4ecb6be587c045ddd07379b094ee6f0f01085743a3ebe62f60465c5ff - Primary exploiter address flagged on CeloScan:
0x95b5579b323ddc6cd290bd4da6e56ba019588efc - Initial funded attacker address highlighted in incident analyses:
0x5dae2c3d5a9f35bfaf36a2e6edd07c477f57789e - Return transaction for the bulk CELO repayment:
0xc3018d2e65bcd7c89d4fa2849017c6169c84c0934ca80c2c8dfd065da90d569d - Moola governance multisig that received returned funds:
0xd7f77169d5e6a32c5044052f9a49eb94697b25ed - Manipulated market highlighted in incident reports: Ubeswap MOO/CELO
- Funding transaction:
- Response / mitigation:
- Moola paused protocol activity after the exploit and publicly negotiated the return of funds.
- More than 93% of drained assets were returned, leaving the exploiter with a bug-bounty-like remainder.
- The team proposed removing MOO as a collateral asset, which gets closer to the real lesson than merely swapping in a different oracle adapter.
- The deeper fix is collateral skepticism: protocol-native or thin governance tokens should face severe haircuts, tight caps, or outright exclusion from the solvency core when the protocol cannot guarantee durable external liquidity.
Pattern tags
- oracle-manipulation
- protocol-native-collateral-fragility
- Reflexive borrow-and-repost loop: Moola let borrowed
MOObe posted back as collateral while the same thinMOO/CELOmarket defined how much the rest of the protocol could be borrowed - TWAP over a dominatable local market: Ubeswap’s
MOO/CELOpath was not deep enough to justify the borrow power Moola granted against it - Protocol-native collateral admission plus loose reserve-outflow rights turned a local governance-token price into system-wide solvency authority
Three house-asset solvency promotions this incident collapsed
-
Borrowable and repostable
MOOinventory existed, and Ubeswap could still print a much higherMOO/CELOmark- Moola let the attacker supply about
60,000 CELO, borrow about1.8M MOO, and repost thatMOOas collateral. - The thin Ubeswap
MOO/CELOvenue was still shallow enough that the attacker’s remaining roughly183,000 CELOcould drag the market from about0.02 CELOto about0.73 CELOperMOO.
- Moola let the attacker supply about
-
Moola promoted that local
MOOmark into canonical collateral truth- Moola’s oracle path consumed the Ubeswap-based
MOOTWAP as if it were durable evidence of how much solvency the reposted house token represented. - The dangerous jump was not only
MOO traded higher; it wasMoola now recognizes this attacker-shaped house-token mark as valid borrowing power.
- Moola’s oracle path consumed the Ubeswap-based
-
Deeper reserve markets still honored that truth
- Against the inflated
MOOcollateral value, Moola still let the attacker borrow out stronger inventory includingCELO,cEUR, andcUSD. - The real loss therefore landed not on
MOOholders alone, but on the protocol surfaces willing to release deeper reserves against that local governance-token story.
- Against the inflated
Why the exploit worked
- The exploit only looked like a generic
TWAP manipulationfrom far away. The sharper failure was reflexive collateral policy: Moola let its own thinly traded token act as recognized collateral for deeper reserves, and also let the attacker borrowMOO, repost it, and then use outside or retainedCELOto push the sameMOO/CELOmarket higher. Once those pieces were combined, the oracle did not just report a bad number; it validated a loop the protocol itself had already made possible. - Time averaging did not save Moola because the venue itself was too shallow relative to protocol value. QuillAudits and rekt both preserve the same core shape: with about
243,000 CELOof working capital, the attacker could moveMOOfrom roughly0.02 CELOto roughly0.73 CELO. A TWAP over a market one actor can dominate is still an attacker-authored solvency mark if the protocol will honor it for nearly all reserve assets. - The collateral side and reserve side were badly mismatched.
MOOhad ecosystem-local, shallow support, while the assets borrowable against it —CELO,cEUR, andcUSD— were much stronger and more liquid. Moola therefore treated a fragile house-token quote as if it were good enough to underwrite withdrawals of the protocol’s best inventory. - Recursive structure amplified the attack. The attacker did not only buy spot
MOO; they first suppliedCELO, borrowed about1.8M MOO, and posted thatMOOback as collateral before driving the oracle mark higher. That made the incident a clean protocol-native solvency loop rather than a one-off external-market pump. - The durable lesson is that
fresh pricewas never the real safety property. Even if the TWAP updated exactly as designed, Moola still failed because it granted too much credit to a protocol-adjacent asset whose executable exit depth was nowhere near the value it was allowed to unlock.
Detection and audit pivots
- Separate
house asset with a market pricefromhouse asset safe for solvency. If a protocol-native token mostly trades on one nearby DEX and lacks deep outside demand, ask why it is allowed to unlock the rest of the balance sheet at all. - Model recursive loops explicitly: can users supply blue-chip collateral, borrow the house token, repost it, and then use remaining capital to push the very price that sets their new borrowing power? Moola shows that this question matters more than whether the oracle math compiles.
- Compare executable unwind depth on the house-token market with the maximum reserve outflow the protocol will honor against that token. If hundreds of thousands of
CELOcan move the mark enough to drain millions inCELO,cEUR, andcUSD, the protocol is recognizing far more solvency than the market can support. - Treat
TWAPas a smoothing primitive, not a proof of independence or depth. Reviews should ask who provides the real liquidity, how concentrated that liquidity is, and whether the same capital source can both print the mark and cash it out elsewhere in the protocol. - Audit borrow caps, collateral factors, and collateral-type exclusions as part of oracle defense. If removing
MOOas collateral is the credible post-incident fix, then the pre-incident problem was already collateral admission, not only oracle implementation details.
Failure-prevention checklist
- Do not let protocol-native or foundation-adjacent governance tokens reach full collateral semantics merely because they have a TWAP feed. Require independent external depth, conservative caps, and a clear answer to who would actually buy size if liquidations started.
- Break the reflexive loop explicitly: if users can borrow the house token, they should not also be able to repost that same token as collateral for stronger reserve assets without severe caps, quarantines, or outright exclusion.
- Size collateral factors and market borrow caps from executable unwind depth on the house-token venue, not from nominal market cap, treasury narratives, or optimistic governance assumptions about community support.
- Treat
TWAP over one dominatable venueas weak evidence. A shallow DEX pair should not become system-wide solvency authority just because the manipulation needs several swaps instead of one. - Keep protocol-native collateral in staged activation. New or thin markets should begin with borrow disabled, low supply caps, or low collateral factors and only earn more trust after real outside liquidity survives stress.
- Couple collateral admission and reserve-outflow rights. If a token can cheaply print collateral value, downstream markets for
CELO,cEUR, andcUSDneed separate damage limits so one local market cannot drain the whole protocol. - Add reflexivity-specific circuit breakers: if the house token price moves far faster than external majors or if one account’s collateral growth is mostly explained by recent buying on the token’s primary venue, freeze fresh borrowing against that collateral.
- Prefer derecognition over oracle tinkering when the real problem is house-token fragility. If governance’s credible emergency fix is
remove MOO as collateral, then that option should already exist in the normal risk playbook.
Audit prompts
- Can a user supply blue-chip collateral, borrow the protocol’s own token, repost it, and then use remaining capital to move the venue that prices that reposted collateral?
- What dollar value can the protocol lose if the house-token oracle moves 5x, 10x, or 30x before liquidations or caps react, and how does that compare with actual executable depth on the token’s primary market?
- Does the protocol treat
TWAP availableas equivalent tomarket deep enough for collateral use, or is there a separate test for external demand, concentration, and unwind capacity? - If the protocol-native token were removed as collateral tomorrow, what other risk control would materially worsen? If the answer is
not much, why was it ever allowed to underwrite deep reserve assets? - Which reserve assets can be drained against protocol-native collateral, and are those assets capped or isolated tightly enough that house-token reflexivity cannot threaten the whole balance sheet?
- Is the house-token market actually independent of the protocol, or is the same treasury, community, or local DEX ecosystem effectively underwriting both the quoted price and the protocol that honors it?
- What exact signal would tell operators that a price move is governance-token reflexivity rather than genuine market depth, and what automatic downgrade in borrowing authority follows from that signal?
- During a downturn, when liquidity thins and treasury confidence falls, does collateral policy automatically get more conservative, or does the protocol keep honoring the same paper mark right up until exploiters test it?
Lessons that should already be standard
- Protocol-native collateral is not just another listed asset. It is a reflexive claim on the same ecosystem that is now treating it as money-good solvency.
TWAPcannot rescue a market that nobody can exit at size. Time-averaging shallow community liquidity still produces shallow collateral truth.- Allowing users to borrow the house token and repost it as collateral is an explicit leverage loop, not a neutral product feature.
- The right comparison is not
is there a price feed?butcan this token credibly absorb liquidation flow before deeper reserve assets leave the protocol? - When the emergency fix is
remove the token as collateral, the original mistake was collateral admission, not merely oracle implementation. - House-token collateral should earn trust slowly and lose it quickly. If liquidity, external demand, or market independence deteriorate, borrow power should contract before an attacker proves it was fictitious.
- Balance-sheet asymmetry is the real theft path: shallow local confidence in
MOOwas allowed to pull out much strongerCELO,cEUR, andcUSDreserves.
Why this incident matters
- It is a clean preserved exemplar of direct thin-collateral repricing in a lending market: not LP-wrapper inflation, not vault-share mispricing, and not perp-PnL settlement, but a protocol-native token pumped until it became fake borrowing power.
- It shows the specific danger of reflexive collateral design, where a protocol’s own token and its own nearby liquidity venues define how much of the rest of the protocol can be withdrawn.
- It also helps round out the oracle-manipulation corpus by preserving the
manual TWAP drag on a shallow governance-token marketbranch alongside Harvest’s vault-share path, Cheese Bank’s LP-wrapper path, and Mango’s derivatives-PnL path.
Internal linkages
- Core recurring pattern: oracle-manipulation.
- Tighter subfamily: protocol-native-collateral-fragility.
- Positive-design house-asset companion: house-asset-collateral-quarantine-and-external-liquidity-discipline — useful when the healthier-side question becomes why a protocol-native token should have stayed in a separate collateral lane with external-liquidity skepticism, reserve-outflow caps, and recursive-loop suppression before it could unlock deep reserves.
- Positive-design downstream-solvency companion: collateral-admission-lag-and-borrow-side-quarantine — useful when the sharper follow-up is why protocol-native or otherwise shallow collateral should stay capped, quarantined, or borrow-disabled long before the rest of the reserve book depends on it.
- Compare against house-stablecoin collateral inflation: vesper-lend-beta-rari-fuse-pool-23-vusd-uniswap-v3-max-tick-twap-oracle-manipulation-drain-2021-11-02.
- Compare against LP-wrapper collateral inflation: cheese-bank-cheese-eth-lp-oracle-manipulation-2020-11-06.
- Compare against one-block thin-governance-token repricing: inverse-finance-inv-keep3r-oracle-manipulation-2022-04-02.
- Compare against derivatives-PnL collateral inflation: mango-markets-mngo-oracle-manipulation-2022-10-11.
Control surface
- The leverage sat in MOO collateral admission, oracle venue choice, TWAP construction, borrow-cap policy, and Moola’s willingness to treat its own thin token as creditworthy collateral against the rest of the protocol.
- Moola did not merely have a weak oracle. It had a reflexive solvency model: the protocol let attacker-shaped MOO pricing become withdrawable CELO, cEUR, and cUSD.
Sources
- https://rekt.news/moola-markets-rekt
- https://quillaudits.medium.com/moola-market-9-million-price-manipulation-attack-quillaudits-728485ee5782
- https://www.anchain.ai/blog/moola-market-exploit
- https://chaoslabs.xyz/posts/chaos-labs-uniswap-v3-twap-market-risk
- https://celoscan.io/address/0x95b5579b323ddc6cd290bd4da6e56ba019588efc
- https://celoscan.io/tx/0x0c686ac4ecb6be587c045ddd07379b094ee6f0f01085743a3ebe62f60465c5ff
- https://celoscan.io/tx/0xc3018d2e65bcd7c89d4fa2849017c6169c84c0934ca80c2c8dfd065da90d569d
Last reviewed
- 2026-07-31 UTC