EntryCrypto

Bitget hack, four days later: $388M confirmed, 60 million XRP deposited into four Binance accounts, 19,000 ETH through THORChain

By EntryCrypto ·

Bitget has raised the loss to $387.5M, blamed a zero-day in an unnamed third-party security product and restarted withdrawals. On-chain, every XRP parking wallet is empty: at least 59.9 million XRP went into four Binance customer accounts between September 25 and 28, and about 19,000 ETH was swapped through THORChain. Half the ETH is still parked.

Key facts

  • Bitget now puts the loss at about $387.5 million across 11 chains after adding Zcash and TRON transactions; it says a zero-day in a third-party security product gave the attacker high-level internal credentials that were used to send fraudulent withdrawal commands to the wallet backend. The vendor has not been named.
  • Bitget's own timeline says its risk system blocked customer withdrawals at 19:05 UTC on September 24 and signing services were shut down at 21:44 UTC; on-chain, the attacker's last transfer from a Bitget wallet was at 21:23 UTC, two hours and 52 minutes after detection.
  • All five XRP parking wallets (102.9 million XRP) were emptied between 12:25 UTC on September 25 and 07:43 UTC on September 27, and one of them was deleted from the ledger on September 26.
  • Between September 25 12:37 UTC and September 28 20:26 UTC the pipeline's four exit accounts made 5,073 deposits totalling 59,907,863 XRP (about $89 million) into Binance hot wallet rNxp4h8apvRis6mJf9Sh8C6iRxfrDWN7AV under destination tags 469304937, 470475839, 465674229 and 472578608.
  • Five of the eight Ethereum parking wallets moved 33,451 ETH on September 27 and 28; at least 19,174 ETH went into THORChain's router in about 1,100 swaps and 6,373 ETH into a LayerZero multicall contract. 34,844 ETH is still parked.
  • Withdrawals resumed in phases: BTC on September 28, ETH on September 29, USDT on September 30, everything else on October 2. Bitget says its protection fund covers the loss and will be topped back up to at least $300 million within a week.

When we stopped live coverage at 12:45 UTC on September 25, one XRP parking wallet was leaking into a laundering pipeline, the other four were full, and the eight Ethereum parking wallets had not moved. This is what happened in the four days since, from Bitget’s own disclosures and from the ledgers. Prices used: XRP $1.49, ETH $2,680, BTC $83,431. All times UTC.

What Bitget has confirmed

The loss is $387.5 million, not $351.6 million. The revision came from classifying additional Zcash and TRON transactions. Bitget now counts 11 chains (Ethereum, XRP Ledger, Zcash, TRON, Arbitrum, Optimism, Base, BNB Smart Chain, Avalanche, Algorand, Celestia) and 12 wallet addresses, with XRP, ETH, USDT, ZEC, ATOM, USDC, USDT0, XAUt, BNB, AVAX, TRX, ALGO and TIA among the affected assets. No per-asset breakdown has been published.

The entry point was a third-party security product. Bitget’s account, repeated by CEO Gracy Chen in interviews with The Block and The Hacker News: the attacker exploited a zero-day vulnerability in a security product Bitget runs, obtained high-level internal credentials, used them to reach an internal management system, and from there inserted fraudulent withdrawal commands into the wallet backend, which the signing pipeline treated as legitimate. The activity was disguised as routine administrative work and traces were deleted. Private keys were not compromised. The vendor has not been named; Bitget says it notified the vendor, disabled the affected functionality and revoked and reissued internal credentials. Mandiant and SlowMist are running the forensic investigation and a formal report is expected this week.

The attacker rehearsed. Chen told The Block that two small test transfers were made at 18:31 UTC, one in ETH and one in TRX, both below risk thresholds, about 27 minutes before the main theft. We documented the ETH one in part 1: 0.84 ETH from hot wallet 0x1AB4…8F23 at 18:31:11. Hypernative’s analysis adds that the main drain came in two waves, 15 seconds of signing at 19:01 that moved $87.6 million from hot wallets across five networks, and nine seconds at 19:16 that moved $202.8 million from warm wallets, and that the attacker’s transactions used round gas limits (100,000, 200,000, 50,000,000) where Bitget’s normal pipeline used calculated ones.

Bitget’s own timeline confirms the containment gap. The official chronology reads: 18:31 unauthorized transfers begin; 19:05 risk-control system auto-blocks withdrawals; 19:14 highest emergency response; 19:40 containment begins; 20:40 fund transfers to cold storage begin; 21:44 withdrawal and signing services shut down. Set that against the ledger. The attacker’s last transfer from a Bitget wallet was 223 ETH at 21:23:11, and the last XRP transfer was 9.3 million XRP at 21:19:21. The 19:05 block stopped customers, not the attacker. And the 20:40 entry deserves attention: at 20:40:02 Bitget’s XRPL aggregation wallet moved 2,183,079 XRP into the hot wallet the attacker was draining, and at 21:19 the attacker took 9,306,866 XRP from it, a transfer that had failed 51 minutes earlier for lack of funds. Whether that top-up was part of the cold-storage consolidation or an automated rebalance, it ran through a wallet that was still under the attacker’s control.

Withdrawals are back, in phases. BTC on September 28 at 08:00 (Bitget says more than 3,000 BTC were processed in the first hour), ETH on September 29 across Ethereum, BNB Smart Chain, Arbitrum, Base and Optimism, USDT on September 30, and all other tokens, fiat and P2P on October 2. The protection fund, about $465 million, absorbs the loss and Bitget says it will be replenished to at least $300 million within a week from corporate reserves. A 5 percent bounty is offered on frozen or recovered funds, and Bybit’s LazarusBounty platform is being used as a recovery channel. Chen also asked THORChain to refuse service to the attacker’s addresses; THORChain replied that its network halt is an emergency mechanism, not a selective freeze.

The XRP: all of it moved

In part 2 the 102.9 million XRP sat in five parking wallets. Between 12:25 UTC on September 25 and 07:43 UTC on September 27 every one of them was emptied, in 80 to 108 payments each, into roughly 25 freshly created distribution accounts. One parking wallet, r3UGfDM4ZyFSCzKH7TQEjgago9QoUJagtJ, was then deleted from the ledger at 14:14 on September 26, which reclaims the reserve and removes the account from balance-based watchlists.

Parking walletXRP outWindow
rDRV9…95hs20,006,821Sept 25 12:25 to Sept 26 00:24
r3UGf…agtJ20,474,975Sept 26 01:35 to 08:40, then deleted
rH7oM…CqZn20,129,625Sept 26 08:05 to 15:49
rwSjB…sAKw20,033,307Sept 26 15:11 to 23:00
r6Ncw…Cs7Y23,066,314Sept 26 22:50 to Sept 27 07:43

The distribution accounts did not scatter the money. They funnelled it back into the same five-account hub network we described in part 3: the hub r4du…T5ig, the collector r3n8sb…HpN1 and the feeders rU7dx6…UnDF, rpnu6d…anqi and rGP5LB…6Esp. Account after account shows the same five destinations. rsiNZr8…ePNz, for instance, received 9.8 million XRP and paid 9.84 million out in 761 payments, every one of them to those five accounts. rwSFhq…ik1WD made 1,253 payments, again all to the same five. This was one operation with one exit.

And the exit is Binance. The four exit accounts that drain the hub kept doing exactly what they did on September 25, only at scale. Counting only payments that carry a destination tag, which on the XRP Ledger identifies a customer account at an exchange:

Exit accountDepositsXRPBinance customer tagLast deposit
rhbgGt…mBLa1,42228,431,837469304937Sept 28 03:51
rNnMCi…RzfS2,58925,675,366470475839Sept 27 07:32
rs6Sp4…Q1gr5102,985,282465674229Sept 26 03:12
rfF1rd…BYaL4522,815,378472578608Sept 28 20:26
Total since Sept 25 12:374,97359,907,863 XRP (about $89M)all to rNxp4h8apvRis6mJf9Sh8C6iRxfrDWN7AV, labeled Binance 11 on XRPScan

Add the 488,000 XRP deposited before our cut-off and about 60.4 million XRP, 58 percent of the stolen XRP, went into four Binance customer accounts in a little over three days, in chunks of two to eleven thousand. The MEXC account used briefly on September 25 received nothing further. The hub network still holds about 780,000 XRP, and several distribution accounts had not finished paying out when we checked, so the figure will rise.

Two things we cannot say from the ledger: whether Binance has frozen those four accounts, and what happened inside Binance to the XRP that arrived. Deposits continued to be accepted through the evening of September 28. We found no evidence of XRP going to THORChain or to any other labeled exchange; the FixedFloat probes from September 25 stayed at test size.

The ETH: half moved, half still parked

The eight Ethereum parking wallets held 68,295 ETH on September 25. Five of them have since moved:

WalletWasNowWhat happened
0xD2C2…F89910,0000dispersed to ten addresses on Sept 27, 18:45 to 20:06
0x52f0…d2843,69804,326 ETH to 0x600c…84b2 on Sept 28 11:52
0xDc29…dC634,59604,596 ETH to 0x600c…84b2 on Sept 28 14:28
0x9FA3…4FA010,000010,000 ETH to 0x600c…84b2 on Sept 28 18:55
0x600c…84b210,0004,844consolidated the above, then dispersed about 24,000 ETH to twelve addresses on Sept 28, 18:57 to 20:57
0xA6BF…B272, 0xFd5E…9e54, 0xeD5a…1A5110,000 each10,000 eachuntouched

So 33,451 ETH has moved and 34,844 ETH (about $93 million) is still parked.

The moved ETH went through a two-level peel. The twelve first-level addresses each received 100 to 1,000 ETH and either sent it straight into THORChain’s router or passed it to a second level that did. Counting depositWithExpiry calls to the THORChain Router contract:

AddressETH into THORChainSwaps
0x132E…afDD2,24230
0x4fEB…88AB2,175214
0x3287…A0f72,099241
0x0DAc…C1282,067233
0x0DB1…A47e1,909218
0x41c8…902C1,634248
0xAabC…e4511,54324
0x2971…69321,45230
0x5119…4E6C1,41324
six others2,64179
Total19,174 ETH (about $51M)about 1,340

Arkham and Cointelegraph report the THORChain output as bitcoin, which matches the Bybit playbook. A further 6,373 ETH went into a contract Blockscout labels LZMultiCall, a LayerZero-based multicall we could not attribute to a named product, 845 ETH into CoW Swap, and several thousand ETH sits in second-level addresses (0xbC7C…757e holds 1,951) that have not yet reached a swap. The counts above stop at two levels, so the THORChain figure is a floor.

Where the $387.5 million stands

Moved out of parkingStill parked or stagedNotes
XRP102.9M, of which 60.4M is inside four Binance accountsabout 0.8M in the hub network, the rest in distribution accounts still paying outone parking account deleted
ETH33,451 ETH; at least 19,174 swapped via THORChain, 6,373 via LZMultiCall, 845 via CoW Swap34,844 ETH in four walletsTHORChain output reported as BTC
TRX, BNB, ZEC, othersnot traced by usSlowMist reported 20.6M TRX and 5,897 BNB held on Sept 25Zcash leg about $29M per Hypernative

What to take from it

The Binance accounts are the story. Five thousand deposits into four customer accounts over three days, from four exit addresses that were themselves created by Binance withdrawals in 2025, is not a pattern that hides from an exchange’s own monitoring. Whether Binance froze those accounts, when, and how much XRP was withdrawn before it did, is the single most important unanswered question in this case. Binance has not commented. Bitget’s statement that “some assets” were frozen through partner coordination may refer to this; it has given no numbers.

The root cause is still a description, not a report. “A zero-day in a third-party security product” covers a lot of ground: an endpoint agent, a privileged-access manager, a secrets vault, an HSM front-end. Which one, and how a credential from it reached the wallet backend’s command path, is what the promised Mandiant and SlowMist report has to answer. Until then the practical lesson is the one Hypernative drew: the signer trusted an internal service to tell it the destination and amount, and nothing independent checked the request against a customer withdrawal or a treasury allowlist.

The containment gap is now official. Bitget’s own timeline puts signing shutdown at 21:44, three hours and thirteen minutes after detection. Everything the attacker took after 19:05, including the 9.3 million XRP that a Bitget top-up made possible, was taken while the exchange knew it was under attack.

We will publish again when the incident report lands, when the remaining 34,844 ETH moves, or when Binance says what happened to the four accounts.

Sources

  1. The year’s second-largest XRP hack is spilling over to Bitcoin and Ethereum

    Protos · · Security · Exchanges

  2. Bitget attacker tested risk controls with small transfers before $388 million theft, CEO says

    The Block · · Security · Exchanges

  3. Bitget CEO says $388M hack exploited third-party security vulnerability

    Cointelegraph · · Security · Exchanges

  4. Bitget Reopens Bitcoin Withdrawals After $387.5 Million Breach

    The Defiant · · Security · Exchanges

  5. THORChain rejects Bitget request to block hacker as $6 million moves to bitcoin

    CoinDesk · · Security · Exchanges

  6. THORChain refuses to block Bitget funds, despite pausing after own hack

    Protos · · Security · Exchanges

More analysis