September 2, 2026
|
Exploit Postmortem

Moonwell's $8.7M Loss and How Olympix Would Have Approached It

On August 26, 2026, Moonwell's lending market on Base lost about $8.7M. The attacker didn't break the protocol's access controls or steal a key. They inflated the price of MAMO, a relatively illiquid token accepted as collateral, then borrowed real cbBTC against the inflated value and walked away with the difference. Because MAMO was thinly traded, moving its price was cheap, and because the market valued MAMO collateral from a source that price move could reach, the borrowing power the market granted was based on a number that was true for a moment and false by design. The proceeds were consolidated at an attacker-controlled address and routed onward through Tornado Cash. Everything the contract did, it did as written. The market extended credit against a value it had no reason to trust and every reason to check.

Background

A lending market runs on one number: what the collateral is worth. Every borrowing limit and every liquidation threshold is computed from it. If that number can be moved by the same person doing the borrowing, the collateral requirement stops being a constraint and becomes a lever.

This is why the source of the price matters more than the price itself. A manipulation-resistant feed, a time-weighted average, or a design that caps how much borrowing power an illiquid asset can unlock all serve the same purpose: they make the value the market believes expensive or impossible for a borrower to move in the moment they borrow. The defense isn't a better guess at the price. It's making the price something the borrower can't author.

Illiquidity is the multiplier. On a deep market, moving a price meaningfully costs more than the attack could return, so the economics don't close. On a thin one, a small amount of capital moves the price a long way, and a collateral factor that would be reasonable for a liquid asset becomes a gift on an illiquid one. MAMO was thin enough that the price could be moved far, cheaply, inside the window of a single borrowing action.

Root Cause

Moonwell's market valued MAMO collateral from a manipulable on-chain price source, with no manipulation-resistant guard sufficient for an asset that thin, and no cap tying MAMO's borrowing power to its real liquidity. The attacker inflated MAMO's price, the market read the inflated value as the honest worth of the collateral, and it extended cbBTC credit against it. When the price returned to reality, the loan was left backed by collateral worth a fraction of what was borrowed, and the shortfall is the protocol's loss.

The flash-loan capital and the price manipulation were the method, not the defect. The defect is that the market trusted a value an attacker could move, for an asset whose thinness made moving it cheap. A market that valued the same collateral from a manipulation-resistant source, or that capped how much an illiquid asset could borrow against, would have seen no meaningful change from the attacker's activity and extended credit against the real value.

Attack Flow

  1. The attacker acquired a position in MAMO, a relatively illiquid token accepted as collateral on Moonwell's Base market.
  2. Using a relatively small amount of capital against MAMO's thin liquidity, they moved MAMO's price sharply upward on the source the market used to value it.
  3. With their MAMO collateral now valued far above its real worth, they borrowed real cbBTC against the inflated borrowing power the market granted.
  4. They extracted the borrowed cbBTC, leaving the market holding MAMO collateral worth a fraction of the debt, and consolidated the proceeds at an attacker-controlled address, later routing them through Tornado Cash.

Impact

Moonwell was left with roughly $8.7M in bad debt, real cbBTC borrowed against MAMO collateral that never held that value. Bad debt in a lending market is a loss carried by the protocol and its lenders, not by the borrower, and it does not resolve on its own. The market was left insolvent by the gap between what was borrowed and what the collateral is actually worth, and the borrowed asset was gone before the price correction made the shortfall visible.

The Problem With Audit-Only Security

This exploit is a clean illustration of why a code review, on its own, is not a security model, because there is no broken line to find. The price read is correct. It returns a real number from a real source. The borrowing calculation is correct. It applies the collateral factor exactly as written. Read function by function, nothing is wrong.

The vulnerability only appears when you ask a question a line-by-line review isn't structured to answer: can the person on the other side of this loan move the value this market trusts, how much would it cost them, and does the asset's liquidity make that cost worth paying. That's an adversarial, economic question about the interaction between a price source and the market that consumes it, not a question about any single function. A time-boxed manual review, working through a market that accepts many collateral assets, is far more likely to confirm that each price read and each borrow calculation is individually sound than to prove, for every asset, that no affordable price move unlocks more credit than it costs.

Scope makes it harder still, and this is the part the industry keeps mislocating. The price source, examined on its own, works. The lending logic, examined on its own, works. The MAMO market, added as one more supported asset, looks like the others. The exploitable condition lives in the seam: a thin asset, a price source that thinness makes cheap to move, and a collateral factor that assumes the value is honest. Reviewing each piece in isolation, which is what a scoped audit does, is the method least likely to surface a danger that only exists in how the pieces meet. This isn't a story about anyone skipping an audit. It's that the dangerous behavior emerges between independently sound parts, and no single scoped review is asked to test the interaction.

How Olympix Would Have Approached It

Manipulable price sourcing on collateral is one of the most well-established detectable vulnerability classes in DeFi, and it's one Olympix is built to reason about. The property that broke here can be stated precisely: collateral must be valued from a source a borrower can't move within the window they borrow, and an illiquid asset must not unlock borrowing power its real liquidity can't support. Those are invariants, and Olympix works by inferring invariants like them from the code and the material around it, then testing them by execution rather than inspection.

Applied to Moonwell's market, the analysis follows the value used for collateral pricing back to its source and tests whether that source is movable within a single borrowing action, and whether the borrowing power an asset unlocks is bounded by its liquidity. A price read live from a manipulable source, on an asset thin enough to move cheaply, with no cap tying credit to real depth, is exactly the shape that reasoning is meant to surface. It puts the vulnerable pricing path, and the specific asset that makes it exploitable, in front of a reviewer with the failure pattern named, before the market goes live.

Being precise about what that claim means matters, because precision is what makes it worth trusting. Olympix has not run against Moonwell's deployed contracts, and this is not a statement that it did, or that it would have generated the exploit automatically. It's the narrower, defensible claim: pre-deployment analysis of this market would have flagged the manipulable collateral price and the uncapped illiquid asset as the dangerous surface, and pointed a reviewer at the exact function and the exact asset, rather than leaving the interaction to be discovered by an attacker. That's a meaningful difference from a blind review of a market that individually passes every line, and it's a smaller claim than catching it single-handedly. Both are true, and a post-mortem that only made the larger claim wouldn't be worth trusting on the smaller one.

This isn't an argument against audits. A skilled reviewer familiar with oracle manipulation may well ask where MAMO's price comes from and whether its liquidity supports its collateral factor. It's an argument that an audit alone isn't a security model, because whether that question gets asked, for every asset, every time the market adds one, can't depend on which reviewer looked and how much time they had. Continuous, code-level analysis that tests the manipulability of a price and the boundedness of an illiquid asset's borrowing power, and surfaces the exact surface before deployment, is what makes the catch reliable rather than lucky.

Takeaway

Every guarantee a lending market makes rests on the price it trusts, so a price an attacker can move isn't a pricing problem, it's a solvency problem, and on a thin asset it's a cheap one to trigger. Moonwell valued an illiquid token from a source that token's thinness made affordable to move, granted borrowing power against the inflated value, and $8.7M of real cbBTC left against collateral that was never worth it. The flash loan and the price move were the method. The vulnerability was the trusted, manipulable value on an uncapped illiquid asset, and that's a testable property, not a hidden one, something analysis can follow to its source and flag before a market opens. Testing what a market is allowed to trust, and how much an illiquid asset is allowed to unlock, before it goes live, is the difference between a lending market that holds and one that ends up holding the loss. You can see Olympix trace your collateral price sources and flag the ones a borrower could move, against your own contracts, in a technical walkthrough.

On-Chain References

Protocol:          Moonwell (lending market)
Chain:             Base
Date:              August 26, 2026
Loss:              ~$8.7M (cbBTC borrowed against manipulated MAMO collateral)
Attacker (tagged): Moonwell Exploiter 2, 0xD71dD9B6e634412713c47fe7aE02c628e338C384
                  (funded via Tornado Cash; ~$8.7M multichain aggregated, routed to Tornado)
Collateral token:  MAMO (relatively illiquid)
Borrowed asset:    cbBTC
Root cause:        MAMO collateral valued from a manipulable on-chain price source, no
                  manipulation-resistant guard sufficient for the asset's thinness and no cap
                  tying its borrowing power to real liquidity; attacker inflated MAMO's price
                  and borrowed cbBTC against the inflated collateral
Note:              victim market/oracle contract addresses to be resolved for a full trace

Manipulable collateral pricing on an illiquid asset is a class Olympix is built to flag before deployment. If you run a lending market, or any contract whose safety depends on a price it doesn't control, see the analysis run against your own contracts, and see exactly which asset and which function it puts in front of a reviewer. Book a technical walkthrough.

What’s a Rich Text element?

The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.

A rich text element can be used with static or dynamic content. For static content, just drop it into any page and begin editing. For dynamic content, add a rich text field to any collection and then connect a rich text element to that field in the settings panel. Voila!

Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.

  1. Follow-up: Conduct a follow-up review to ensure that the remediation steps were effective and that the smart contract is now secure.
  2. Follow-up: Conduct a follow-up review to ensure that the remediation steps were effective and that the smart contract is now secure.

In Brief

  • Remitano suffered a $2.7M loss due to a private key compromise.
  • GAMBL’s recommendation system was exploited.
  • DAppSocial lost $530K due to a logic vulnerability.
  • Rocketswap’s private keys were inadvertently deployed on the server.

Hacks

Hacks Analysis

Huobi  |  Amount Lost: $8M

On September 24th, the Huobi Global exploit on the Ethereum Mainnet resulted in a $8 million loss due to the compromise of private keys. The attacker executed the attack in a single transaction by sending 4,999 ETH to a malicious contract. The attacker then created a second malicious contract and transferred 1,001 ETH to this new contract. Huobi has since confirmed that they have identified the attacker and has extended an offer of a 5% white hat bounty reward if the funds are returned to the exchange.

Exploit Contract: 0x2abc22eb9a09ebbe7b41737ccde147f586efeb6a

More from Olympix:

No items found.

Ready to Shift Security Assurance In-House? Talk to Our Security Experts Today.