Two wallets drained 55.2 million KAVA from a lending pool, and the pool erased the debt. The Relay bridge blocked $612,000 of what they made from the sale.
The KAVA that crashed the price came from a lending pool six hours earlier, on another chain. We read that pool block by block, then followed the coins and the money across five chains.
- 55.2M
- 243,000x
- 6 hours
- $2.09M
- 2,190
- $612K
01 · What happenedThe Kava hack, in one morning
On 14 November, the price of KAVA fell by half in two hours. The first 36% went in 35 minutes. Three Korean exchanges froze transfers of the coin the same day.
KAVA is the coin of Kava, a blockchain that has run since 2019. The chain has its own apps, including Kava Lend. People deposit coins into this app to earn interest, and others borrow those coins.
Around midday UTC, the Kava team posted on X that it knew about the sale of KAVA on BNB Chain. It said the event stayed inside its lending app. It also said this was "not an infinite mint", which means nobody had created new coins. More information would follow. Crypto Briefing reported that Upbit, Bithumb and Coinone halted transfers, and that the team paused a bridge.
The team has not yet said how the app failed. Bitquery reads every transfer on BNB Chain and on the other chains the money touched. Kava's own history is public on its nodes. So we went through the day block by block.
Two wallets borrowed 55.2 million KAVA from Kava Lend in 98 minutes, and the app wiped out the debt after every loan. They did it through a pool for BUSD, an old stablecoin that few people on the chain still used. Then they moved most of the coins to BNB Chain and sold them. Below, we show how the pool broke, where the coins went and where the money sits now. One bridge blocked 29% of the proceeds, and that money has not moved.
02 · The poolHow Kava Lend works
Kava Lend is a lending pool. Lenders deposit a coin into a shared pool. Borrowers take coins out, but first they must put up collateral, other coins worth more than the loan. Against BUSD, a borrower can take half the value of the collateral.
Borrowers pay interest, and the pool passes it on to the lenders. It does this with one number per coin, the supply index. When the index rises by 1%, every deposit of that coin is worth 1% more. The pool also keeps a slice of the interest for itself, called reserves.
When a loan grows past its limit, anyone can liquidate it. The pool seizes the borrower's collateral and sells it at auction to cover the debt. It pays the caller a 2% reward and closes the loan.
A coin can also have a cap on total loans. That morning, KAVA loans stood just under their cap.
The trouble started in the BUSD pool. BUSD was Binance's dollar stablecoin, a token meant to hold $1. Paxos, its issuer, stopped minting it in February 2023. The BUSD on this chain had arrived years earlier from Binance's first chain.
By this month, the app's BUSD pool was close to dead. The table shows it just before the attack.
| The BUSD pool in Kava Lend, 04:00 UTC | Figure |
|---|---|
| Owed to lenders | 440,145 BUSD |
| Out on loan | 5,084 BUSD |
| Open loans | 37 |
| Cash in the pool | 0.003 BUSD |
| Reserves on the books | 7,618 BUSD |
| Supply index | 2.76 |
The books did not add up. The pool owed its lenders 440,000 BUSD. Against that, the pool had almost no cash and only a few thousand BUSD out on loan. We have written about dead lending pools like this one before.
03 · The indexHow a dead BUSD pool broke Kava Lend
The supply index grows by a simple sum. The pool takes the interest earned since the last block and divides it by the money supplied. The money supplied is the pool's cash plus its loans, minus its reserves.
In a healthy pool, that sum gives a tiny number. In the BUSD pool, the reserves were larger than the cash and loans combined, so the money supplied came out below zero. The code guards against a figure of exactly zero. It does not guard against a figure close to zero.
Just after 04:00 UTC, one wallet repaid every open BUSD loan in the pool, 37 loans that other people owed. We call this wallet the main wallet. Now the pool had cash and no loans.
Moments later, the main wallet made a deposit, took a loan and made a withdrawal, all in BUSD. It picked the amounts so that the money supplied came to 2 base units. A base unit is the smallest piece of BUSD the chain can count.
Six seconds later, the next block took a sliver of interest and halved it. On paper, every BUSD deposit in the pool was now worth 8,380 times as much.
The index kept climbing with each block. Three minutes after the first move, it stood about 243,000 times as high. The main wallet's deposit of a few thousand BUSD now read 1.26 billion BUSD.
The main wallet then repaid its own loan and withdrew every BUSD in the pool, 7,618 in all. That is what it had paid in, so the setup cost it almost nothing. What it kept was the claim, a deposit that read 1.26 billion BUSD on the pool's books. From then on, it could withdraw any BUSD that anyone put into the pool.
04 · The loop127 loans, and the app erased each one
A second wallet did the borrowing. We call it the helper. The main wallet sent it BUSD, and the helper deposited that BUSD in the pool as collateral. Then the main wallet used its claim to withdraw the same BUSD and sent it around again.
Each pass gave the helper more collateral on paper, while the real BUSD went back to the main wallet. After a few passes, the helper borrowed KAVA worth half of that collateral.
In the next block, the main wallet liquidated the helper. The app went to seize the helper's BUSD and found the pool empty. It put 0, 1 or 2 base units of BUSD up for auction, paid the main wallet its reward and closed the loan. The helper kept the coins and owed nothing.
The cap is why this step mattered. Once the pool erased the helper's loan, the room under the cap opened again, and the helper could borrow again.
The first loan was small, because the cap left little room. So the two wallets repaid loans that other borrowers owed, which freed more room. Six minutes in, each round took about 445,720 KAVA.
The loop ran 127 times in 98 minutes. In nine out of ten rounds, the liquidation came one block after the loan. The helper borrowed 55.2 million coins in all.
Those coins belonged to the people who had lent them. Before the loop, the pool held 55.3 million KAVA. After the loop, it held 519. This matches what the team said. Nobody created new coins. The coins came out of the lending pool.
After the repayments, the two wallets kept 53.9 million KAVA, worth about $3.7 million at that morning's price. One long-time user of the app withdrew 1.4 million coins in deposits in the middle of the loop. Most of the loans the two wallets repaid were that user's.
| The loop, 04:04 to 05:42 UTC | Figure |
|---|---|
| Rounds | 127 |
| Cap on KAVA loans | 448,358 |
| Borrowed by the helper, in KAVA | 55,205,051 |
| BUSD deposits by the helper | 879 |
| BUSD passed round | 7.5 million |
| BUSD up for auction per round | 0 to 2 base units |
| Rewards to the main wallet | 150,253 BUSD |
| Repaid for other borrowers | 1.3 million |
| Kept by the two wallets | 53.9 million |
The two wallets had rehearsed. Between 8 and 10 November, the main wallet ran small BUSD deposits, loans and withdrawals in the app.
05 · The waitSix hours passed before the price moved
Six minutes after the last loan, the helper sent its coins to the main wallet. The price had not moved. For the next four hours, nothing in the market showed that the pool was empty.
A third wallet did the selling, so we call it the seller. It was eight days old. On 6 November, it appeared on Kava, BNB Chain and Ethereum, and sent 16 coins across the bridge as a test.
Before the big sale, the main wallet sent 4.4 million KAVA to deposit addresses of the kind that exchanges and swap services use. A swap service is a site that trades one coin for another without an account. Each transfer carried a memo, the number an exchange uses to credit the right customer.
Two payments came back to the seller on Ethereum that morning. Each came from a hot wallet, one of an exchange's own working wallets. Our labels mark the first wallet as HitBTC's and the second as Bybit's. Each payment came about 20 minutes after the main wallet deposited coins of about the same value.
| KAVA in, dollars out | What the chain shows |
|---|---|
| 06:28 UTC, on Kava | 663,900 KAVA to a deposit address |
| 06:45 UTC, on Ethereum | 44,219 USDT from a HitBTC wallet |
| 09:21 UTC, on Kava | 170,000 KAVA to a deposit address |
| 09:42 UTC, on Ethereum | 11,162 USDC from a Bybit wallet |
Each payout was a little below the market value of the coins. That fits a swap service that takes a fee and settles through those exchanges. Either exchange can see which account asked for the payout.
The rest went to the seller. In the hours after the loop, the main wallet sent it 49.2 million coins, almost all of them minutes before the sale.
06 · The sale48 million KAVA sold in 35 minutes
KAVA also trades on BNB Chain, as a bridged token. A bridge takes a coin on one chain and issues the same amount on another. At 10:04 UTC, 48.2 million coins arrived in the seller's wallet on BNB Chain in a single transfer.
Three minutes later, the selling began. The seller sold most of the coins through MetaMask Swaps, an aggregator. An aggregator splits one trade across many pools on DEXs, exchanges that run on the chain itself. Over the next 35 minutes, the seller sold 48.4 million KAVA in 46 transfers.
The price on BNB Chain fell 36% in those minutes. Two hours after the selling began, the price fell to 52% below where it started.
The sale brought in 3,333 BNB and a little USDT, about $2.1 million in all. Early reports put the haul at about $3.3 million, which counts the coins at the price before the sale. The sale itself pushed the price down, so the seller got less.
The same reports said the wallet still held about 47.6 million KAVA. On BNB Chain, its balance is zero. On Kava itself, the three wallets hold 921 coins between them.
07 · The moneyWhere the money went
Within two hours of the first sale, all the BNB had left BNB Chain by four routes. Every service on those routes works without an account.
The largest share went to Hyperliquid, an exchange that runs on its own chain. The seller sent a third of the BNB through Chainflip, a cross-chain swap service, and received ETH on Ethereum. It split the ETH across new wallets. Each wallet swapped its ETH to USDC on Arbitrum through LI.FI, an app that routes money across chains, and deposited the USDC on Hyperliquid. A smaller share took a shorter path through LI.FI to two more wallets.
Eight Hyperliquid accounts received $1.17 million of USDC. That figure includes the two exchange payouts from the morning. Each account bought XMR1 on the spot market within a minute of its deposit. Together, they hold 2,190 XMR1.
XMR1 is a token on Hyperliquid named after Monero, a privacy coin. We did not check what backs it. When we last read the accounts, on the afternoon of 14 November, none of the XMR1 had moved. We have traced money in and out of Hyperliquid before.
Another 15% of the BNB went through Bridgers to Solana and arrived as SOL. The seller swapped the SOL for 303,426 USDC and moved it to a wallet that pays out to more than 100,000 addresses per month. A wallet that busy is some kind of service. We have no label for it, and the trail ends there.
You can follow any address in this story with the Bitquery MCP.
08 · The blockRelay blocked 29% of the proceeds
The rest of the BNB took the fourth route. The seller swapped it to USDT, 612,416 in all, and sent the USDT into Relay, a bridge, through LI.FI. The order asked for ETH on Ethereum.
The ETH never arrived. Relay's public record for the order shows the status "failure", with the reason "BLOCKED_WALLET". It lists no payout. LI.FI's own tracker still showed the transfer as pending five hours later.
We checked both ends. No ETH or stablecoin reached the seller on Ethereum after the deposit, and no refund had reached it on BNB Chain when we last looked. So 29% of the sale proceeds sits at Relay.
Relay's record also marks the deposit as one the sender can pull back. We read that as a sign that a refund is possible. If Kava or law enforcement wants that money held, Relay is the place to ask. Tether can also freeze USDT when a report reaches it in time.
09 · The limitsWhat the chain cannot tell us
We do not know who runs the three wallets. The exchanges that paid the seller hold account records, and so does any swap service in between.
We read the app's code and the pool's history, and the two flaws above explain every number we saw. The team has not published its report, and it may describe the cause differently.
One step is our inference. The app liquidates a loan at the same 50% line it lends at. So one block of interest is enough to tip a full loan over, and that would explain why each liquidation worked one block after the loan.
We did not trace what the exchanges did with the coins they received. We did not follow the USDC on Solana past the busy wallet. Two other wallets on Kava still hold 300,000 coins between them, and we did not follow those either.
We did not read who the pool's lenders were.
10 · For holdersWhat the hack means for KAVA holders
If you hold KAVA in a wallet or on an exchange, the hack took none of your coins. The sale cut their price by about 40%.
If you lent the coin through Kava Lend, the picture is worse. The pool owes its lenders 55.2 million KAVA, and it held 0.19 when we read it on 14 November. A withdrawal needs cash in the pool, and there is almost none. We covered a run on a lending pool earlier this year, in the week $12 billion left Aave.
The BUSD pool is still broken. When we last read it, the main wallet's claim of 1.26 billion BUSD stood. Any BUSD that someone deposits there can leave with that wallet.
For anyone who runs a lending pool, the lesson is the dead market. Someone can steer a pool with almost no cash and old reserves on its books to a division by almost nothing. Close dead markets, or limit how far an index can move in one block.
11 · The methodHow we traced the Kava Lend exploit
We started on BNB Chain, where the sale was. One wallet received the bridged coins and sold them, and Bitquery's data shows each transfer in and out. We followed the BNB through each bridge to the chain on the other side.
Kava is not in Bitquery's data, so we read it from the chain's public nodes. We pulled every move the two wallets made. Then we read the lending pool's state at each block of the attack: its cash, its loans, its reserves and its index. We also read the code that works out the index. That code still calls the app hard, after its first name, HARD Protocol.
For the blocked bridge order, we read the order number from the deposit on BNB Chain and looked it up in Relay's public records.
We left out fake tokens that bots sent to the seller all day, a trick called address poisoning. Dollar values use Bitquery's price for each coin at the time it moved. Exchange names come from Bitquery's own labels.
The full BNB Chain history is also sold as files, as the BNB Chain dataset on the Bitquery Data Store. The same goes for the Ethereum, Arbitrum and Solana datasets. For cases like this one, we also run crypto investigation services.
Kava data comes from the chain's public nodes, read on 14 November 2026 up to about 16:20 UTC. BNB Chain, Ethereum, Arbitrum and Solana data comes from Bitquery, read up to 16:08 UTC. Hyperliquid balances come from the 16:14 UTC snapshot. Anything after that is not covered.
The team has not published its report. The two flaws described here come from the app's open code and from the pool's state at each block. The team may describe the cause differently.
The three wallets are tied to each other by the transfers between them. We attribute them to nobody.
The HitBTC and Bybit names are Bitquery's own labels on two Ethereum wallets that paid the seller. The link from each deposit to each payout rests on timing and on the amounts. A swap service may sit between the deposit and the payout. We do not say either exchange knew where the coins came from.
We could not name the services behind the deposit addresses on Kava. Bitquery has no labels for Kava addresses.
The sale proceeds are the BNB and USDT the seller received, with BNB at $618, the price a bridge quoted at 10:53 UTC. We value the coins the two wallets kept at $0.068, the price on BNB Chain before the sale.
The count of coins sold covers transfers out of the seller's wallet on BNB Chain. It includes 14,000 coins in fees to one of the trading apps.
The $1.17 million deposited on Hyperliquid includes about $41,000 from the two exchange payouts. We did not check what backs XMR1 or what its holders can redeem.
Relay's record was read at 16:20 UTC on 14 November. A refund or a payout after that time would not appear here. The record marks the deposit as withdrawable, and we did not test what that allows.
The Solana wallet at the end of one route pays more than 100,000 addresses per month. We call it a service because of that volume. We have no label for it.
Why each liquidation worked one block after the loan is our inference from the pool's settings. We did not replay the liquidation code.
One long-time user withdrew 1.4 million coins during the loop and had loans repaid by the two wallets. We saw nothing that ties that user to the three wallets, and we attribute nothing to that user.
Links between wallets are money links. They do not prove who controls a wallet.
12 · The recordThe addresses behind the Kava hack
Follow the money in plain English
The sale and every bridge in this story come from Bitquery's data. The Bitquery MCP server puts that data behind an AI assistant, so you can ask where a wallet's money went without writing a query. The full history is also sold as files on the Bitquery Data Store, as the BNB Chain dataset.
This article is provided for informational and educational purposes only and reflects analysis of publicly available on-chain data as of the dates indicated. It does not constitute legal, financial, compliance, or investment advice, and nothing in it is a recommendation to buy, sell or hold any token or asset, or to use or avoid any exchange, wallet, bridge, protocol or service.
The findings describe transactions and balances observed on Kava, BNB Chain, Ethereum, Arbitrum, Solana and Hyperliquid between 6 and 14 November 2026. Attributions come from on-chain behaviour and Bitquery's own labels; they may be incomplete or incorrect and may be revised as more data becomes available. Kava has not published its incident report, and its findings may differ from those described here.
References to Kava, Kava Lend, Binance, Paxos, MetaMask, CoW Protocol, Decent, PancakeSwap, LayerZero, Chainflip, LI.FI, Relay, Bridgers, Hyperliquid, HitBTC, Bybit, Upbit, Bithumb, Coinone, Tether, Aave or any other named project, company or service describe what the public record shows and what those parties have said in public. They are not statements about any party's intent, security practices, solvency or conduct, and nothing here asserts that any named party acted unlawfully or negligently or knew of the events described. The wallets that took and sold the coins are described by their behaviour and attributed to nobody.
Nothing herein should be relied upon as a definitive determination of fact. Readers should conduct their own independent verification before taking any action. The authors and publisher accept no liability for any loss or damage arising from reliance on this material. All trademarks and company names are the property of their respective owners.
Reported by Gaurav Agarwal for Bitquery Research, with AI tools; every figure was checked against the raw data.
FAQ
Was Kava hacked?
Two wallets drained Kava Lend, the chain's lending app, on 14 November 2026. They borrowed 55.2 million coins in 127 loans, and the app erased each loan. The team says the problem stayed inside that app. The blockchain itself kept running, and nobody created new coins.
How did the Kava Lend exploit work?
It used two flaws together. First, the attackers pushed a nearly dead BUSD pool to a point where the app took a little interest and divided it by almost nothing. That multiplied one wallet's BUSD claim about 243,000 times. Second, a helper wallet borrowed KAVA against BUSD that the first wallet kept taking back. Each liquidation then found no BUSD to seize and closed the loan anyway.
How much was taken in the Kava hack?
The two wallets borrowed 55.2 million KAVA and kept 53.9 million after repaying other users' loans. That was worth about $3.7 million at the price before the sale. The sale on BNB Chain brought in about $2.1 million, because the selling pushed the price down.
Why did the KAVA price crash?
One wallet sold 48.4 million coins on BNB Chain in 35 minutes on 14 November. The price there fell 36% during the sale and kept falling for two hours. The coins came from Kava Lend's pool.
Was it an infinite mint?
No. An infinite mint is a bug that lets someone create coins from nothing. The team said this was not one, and the chain agrees. The coins came from the cash lenders had put into the app. The pool held 55.3 million KAVA before the attack and 519 after it.
Where did the money go?
Most of it reached eight Hyperliquid accounts, which bought XMR1 and still held it when we last looked. Relay blocked 612,416 USDT. A smaller share went to a busy wallet on Solana. Before the sale, 4.4 million coins went to exchanges and a swap service.
What did Relay block?
The seller sent 612,416 USDT into the Relay bridge and asked for ETH on Ethereum. Relay's public record marks the order as failed, with the reason "BLOCKED_WALLET". Relay paid out no ETH, and we saw no refund when we last looked.
Can KAVA lenders withdraw from Kava Lend?
Not in full, as far as the chain shows. Lenders are due 55.2 million coins, and almost none sat in the pool on 14 November. The team has said more information will follow. It has not yet said how it will cover the gap.
Run the next investigation in minutes
Ask any question of the blockchain. Bitquery's AI Investigations agent traces funds, attributes wallets, and writes auditable reports across every major chain. Prefer to do it yourself? Connect the Bitquery MCP server to your AI assistant, pull the raw datasets, or query the chain directly with the Bitquery API.