Insights

The Coreum Bridge Released 200,000 XRP. It Wasn't Rippling.

On 9 August 2026 the XRP Ledger account that runs the Coreum bridge sent about 200,000 XRP to two wallets in 97 minutes, almost emptying itself. A widely shared warning blamed “rippling” and an on-by-default account flag. The ledger says otherwise: every payment was signed by the bridge’s own multisig, and native XRP cannot be rippled at all. The cause was a relayer that took the attacker’s own self-payments for deposits.

Published 11 August 2026Updated 16 October 2026Source: XRP Ledger, ledgers 106,183,346–106,184,842 and after

What happened

The bridge account rxXXXeMX…, the official Coreum account for XRP Ledger operations, held 200,409.9 XRP on the afternoon of 9 August 2026. Starting at 19:16 UTC it sent that XRP away in a steady stream of payments to two brand-new wallets, alternating between them about every 51 seconds. Ninety-seven minutes later it held 493.5 XRP.

199,916.3
XRP
paid to two wallets
97
minutes
19:16 to 20:53 UTC
94
payments
plus 9 in a wrapped token
493.5
XRP left
from 200,409.9
Bridge XRP balance, 9 August 2026, 97 minutes
200,410 → 493.5 XRP
The public warning was posted from a snapshot between the two amber points: its “93.7k → 77.2k in minutes” is that 11-minute slice of a drain that ran far longer and far deeper. Balances are read off each transaction that touched the account; hover or tap the chart to read any minute.

The two destinations were created that same afternoon, less than two hours before the first payment. They received 107,397.5 XRP and 92,518.8 XRP, and passed almost all of it on within hours.

The accounts involved

Every XRP Ledger account in the theft, what it did, and what it held on 16 October 2026:

RoleAccountCreatedWhat it didHolds now
The bridgerxXXXeMX8Gy5YvibvGLnQJ1XKKD7UswM112 March 2024Coreum’s XRP Ledger account, run by its relayers’ multisig. Paid 199,916.3 XRP to the two front wallets on 9 August; has signed one transaction since.763.5 XRP
Front wallet A1rfXSfH2q4zhGWdw45nYcWfjvFN5ZfwE1U69 August 2026, that afternoonReceived 107,397.5 XRP from the bridge; forwarded it within hours.3.0 XRP
Front wallet A2rwt8PJhyXWgW8uwmTjmQ7Rw89tJHELFgb59 August 2026, that afternoonReceived 92,518.8 XRP from the bridge; forwarded it within hours.3.0 XRP
Staging walletrnaBRmXU6ZS7orU6Qj38wsBYQmqHPbrhA928 June 2026Took 96,315.0 XRP from the front wallets.1.2 XRP
Staging walletr3jV8g599WMR9zeFi5m1rbvXyEwNWwYFXt28 June 2026Took 73,498.2 XRP from the front wallets.1.0 XRP
Both front wallets are on xrpl.to’s scam list. The Coreum-side accounts are further down.

Every payment was signed by the bridge itself

This is the fact the rest of the story turns on. Each payment has the bridge account in the Account field, so it is the sender, not a bystander, with an empty SigningPubKey and a Signers array of 17 signatures.

That is what a multi-signature transaction looks like. The bridge is controlled not by one key but by a list of 28 relayer keys (a relayer is one of the bridge’s operator programs, which watch both chains and co-sign its payouts), and a quorum of 17 must approve anything it does. Its master key is disabled, so the multisig is the only way it can act.

The claim“XRP is rippling out through the issuer”
Victim wallet
ripple
Bridge (issuer)
ripple
Attacker

Rippling only moves issued tokens along trust lines. Native XRP has no trust line, so this path does not exist for XRP. No account flag can create it.

What happenedthe bridge signed and paid it out
17 of 28 relayer keys sign
Payment
Bridge pays
XRP
Attacker

Every release is a Payment the bridge itself sent, with 17 of its 28 relayer keys signing each one. The cause sits upstream of the signatures, on the Coreum side.

The difference is who authored the transaction. Read the signer, and the “rippling” explanation falls apart.

The XRP did not leak out of the bridge. The bridge paid it out, and its relayer quorum signed every payment, from the first probe (50E065FC…) to the last release (CD308F78…). Whatever made the quorum authorise these transfers sits upstream of the signatures, not in any XRP Ledger flag.

Why it wasn't rippling

The warning, posted at 20:23 UTC while the drain was still running, named a specific mechanism: that the account’s DefaultRipple flag was on and two wallets were “draining native XRP through it via partial-payment loops.” Three parts of that can be checked, and all three fail.

1. Native XRP cannot ripple

“Rippling” is the movement of an issued token (an IOU) along a chain of trust lines through the issuer. It only ever touches trust-line balances. Native XRP has no issuer and no trust line, so it is never part of a rippling path. No setting on any account, on by default or not, can make native XRP “leak through” an issuer.

2. All of the loss was bridge-signed payments

Every XRP that left the bridge, split by cause:

Every XRP that left the bridge, by cause
payments the bridge signed
199,916.3 XRP · 94 payments the bridge signed itself0 XRP · rippled or passed through
Of every transaction that changed the bridge’s XRP balance in the window, not one passed value through the account. There is nothing to attribute to rippling.

3. DefaultRipple is on, and irrelevant; there were no partial payments

The flag really is set: the account has DefaultRipple on today. It governs issued tokens, which is exactly what a token bridge needs, and has no bearing on the XRP that moved. The releases also did not carry the tfPartialPayment flag, and neither did any other transaction in the incident, on the bridge’s side or the wallets’, so “partial-payment loops” does not describe them either.

The suggested one-transaction fix, an AccountSet to clear DefaultRipple, would have changed nothing, because the flag was never the lever.

The token side first, then the XRP

The order of the payments points at a bridge being driven, not a wallet being emptied. The first nine payments did not send XRP at all. They sent the bridge’s own wrapped-Coreum token, an IOU the bridge account issues under the generated currency code coreum7c8eb29e07, the naming scheme the bridge’s public specification uses for Coreum-side assets. They start with a 92-unit probe (50E065FC…), then a ladder that roughly doubles each step (27A1A932…) up to a final payment of 1,824,252 units: 4,356,778 units in all.

The first nine payments: the bridge’s own wrapped token, a probe, then a doubling ladder
92
#1
20k
#2
40k
#3
80k
#4
160k
#5
319k
#6
638k
#7
1.28M
#8
1.82M
#9
then XRP
94×
Units of the wrapped token: a 92-unit probe, a ladder that doubles from 19,940 to 1.28 million, and a final 1.82 million, 4,356,778 units in all. The shape of someone testing a lever, then leaning on it. Only after that did the account start releasing native XRP, in 94 payments.

Only then does the account switch to native XRP: 3,249 XRP first (B1CB50EF…), a single 25,908.6 XRP transfer at the peak (A36A38BC…), then a steady rhythm of about 1,694.7 XRP to each wallet in turn (3B4F6764…, then 73676CFE… fifty seconds later) until the account was nearly empty.

To see why that order matters, picture what the bridge is: an escrow with a bookkeeper on another chain. The XRP Ledger account holds what users lock. A smart contract on Coreum keeps the books of who is owed what. The relayers are couriers between the two: each one watches both chains, holds one of the 28 keys, and co-signs whatever the contract’s books say should be paid. Honest books, honest payouts:

How it is supposed to work
You lock XRP with the bridge
Relayers tell the Coreum contract
Wrapped XRP arrives on Coreum

Coming back is the mirror image: return tokens on Coreum, the contract records what you are owed, and the relayers co-sign a real XRP Ledger payment from the bridge to you. The relayers decide nothing: they pay out whatever the contract’s books say is owed.

What the attacker made it do
Pays their own wallet, with the bridge memo
Contract says the attacker is owed
Bridge pays out real XRP

The attacker never funded the bridge. They moved the bridge’s own token between their own two wallets, tagged with a bridge memo. Because the bridge issues that token, the transfer showed up in its history, and the relayers, which never check that a payment was actually sent to the bridge, counted it as a deposit and minted the attacker the balance. First in small doubling amounts to prove the trick, then in bulk.

The signatures were real and the procedure was followed. What was corrupted is the deposit the procedure trusts: a self-payment dressed up, on Coreum’s public record, as money arriving.

The first red arrow, how the contract’s books were poisoned, sits on Coreum, not on the XRP Ledger. Coreum is a public chain too, and its records show exactly what was fed to the contract.

How the books were poisoned

The bridge’s contract is open source, so we can be precise about where the payout decision is made. The contract that keeps the books runs on Coreum, and it never reads the XRP Ledger itself. It waits for its relayers to report what happened. Each relayer submits an attestation (the code calls it Evidence) saying “this XRP Ledger transaction deposited this much, for this recipient.” When enough relayers submit the same attestation, the contract treats the deposit as real and mints the wrapped tokens (contract/src/evidence.rs, the handle_evidence gate).

The whole design rests on relayers attesting only to deposits that really happened, and the relayer code, open source in the same repository, has a gap on exactly that point. A relayer builds a deposit attestation from any successful payment it sees in the bridge account’s history that carries a Coreum-recipient memo, reading the amount the ledger says was delivered (relayer/processes/xrpl_to_coreum.go). What it never checks is who the payment was sent to. It does not require the destination to be the bridge at all.

That gap is reachable because the bridge issues its own token on the XRP Ledger. Any movement of an issuer’s token touches the issuer’s account: when the attacker sent that token between their own two wallets, the bridge’s trust-line records changed, so the transfer landed in the bridge’s transaction history and the relayers picked it up. Attach the bridge memo, and a payment that never went near the bridge’s funds is read as a deposit into them.

That is what both chains show. The attacker’s opening move was a payment of 100 units of the wrapped-CORE token from one of their wallets to the other (3DB7E443…), never sent to the bridge, carrying the memo {"type":"coreumbridge-xrpl-v1","coreum_recipient":"core1e7y6…"}. On Coreum, 21 separate relayers each submitted that transaction to the contract as a deposit, and the contract minted the balance to the attacker’s account.

The XRP side used the same flaw a different way: the attacker paid XRP to themselves with the wrapped token set as the most to spend (3A04E779…), so the payment converted the token through the exchange’s order book, touching the bridge as issuer with the memo attached, and was read as a deposit of 1,714 XRP.

Repeated with growing amounts (the doubling ladder above), this minted the attacker about 4,356,812 CORE and 200,001 XRP of bridge tokens out of nothing, spread across a handful of Coreum accounts. Each was then bridged back the normal way, and that is the release the relayer quorum co-signed on the XRP Ledger. The 200,000 XRP that left the bridge is the withdrawal of a balance no deposit ever backed.

This points to a flaw in the logic, not stolen keys. 21 independent relayers each attested the very first phantom deposit. A stolen key or server does not make honest operators agree; shared code that looks right and is wrong does. Every relayer ran the same code, the code counted a self-transfer as a deposit, and every relayer attested it.

All of it is on two public chains. The bridge contract on Coreum is core1zhs909jp9yktml6qqx9f0ptcq2xnhhj99cja03j3lfcsp2pgm86studdrz, and the attacker’s main Coreum account is core1e7y6qwktg7l6ajr8e2eal5j4dnc2jyceftnjce. The two phantom payments above are on the XRP Ledger, and their matching attestations are on Coreum. Who the attacker is has not been made public.

The sell-off that found no buyers

What did the two wallets do with 4,356,778 freshly minted units? They tried to sell them on the XRP Ledger’s own exchange, and found almost nobody to sell to. Between them sit 94 conversion payments: a wallet paying itself XRP while spending the wrapped token, filled by whatever sell offers were on the order book. But the offers they crossed were mostly each other’s: about 191,000 XRP simply went back and forth between the pair, and less than 5,000 XRP of the proceeds came from anyone else.

Watched live, two new wallets posting offers and firing rapid conversion payments may well be what looked like “partial-payment loops” from the outside. None of it used partial payments, and none of it moved the bridge’s XRP. The wallets signed every one of those conversions themselves; the bridge’s balance only ever fell on payments the bridge signed.

Where the XRP went

Neither front wallet kept the XRP. Within hours both forwarded it in even chunks of about 9,600 to 9,720 XRP: A1 sent 92,488.3 XRP in 11 payments (9C0CF29C… is one) and A2 sent 77,324.9 XRP in 8 (C01D38D2…), mostly into two staging accounts created six weeks earlier, on 28 June 2026. Another 34,405.2 XRP went to three further wallets in the same even chunks.

Source
rxXXXeMX…
the bridge, created 12 March 2024
199,916 XRP
Front wallets
rfXSfH2q…
created that afternoon
rwt8PJhy…
created that afternoon
169,813 XRP
Staging wallets
rnaBRmXU…
created 28 June 2026
r3jV8g59…
created 28 June 2026
1,129,325 XRP
Onward
201 accounts, in 335 payments, mixed with 941,104 XRP from 274 other accounts
Minutes-old front wallets take the funds directly, then hand off to older staging accounts, which pass the XRP on together with far more from elsewhere. Every wallet in the chain was empty by 31 August 2026.

The stolen XRP did not travel alone. Between 9 and 31 August the two staging wallets took in 169,813.2 XRP from the front wallets and another 941,104.2 XRP from 274 other accounts, and paid out 1,129,325.2 XRP in 335 payments to 201 accounts. Both have been empty since 31 August 2026.

15.3% from the bridge, through the front wallets84.7% from 274 other accounts
Everything the two staging wallets received between 9 and 31 August. Mixed with 5.5 times as much XRP from elsewhere, the stolen amount can no longer be followed as one sum.

Since then

Coreum renamed itself tx in March 2026, when it merged with Sologenic (tx.org). On 11 August tx posted: “The bridge has been halted, the vulnerability has been identified, and all potential remedies are being evaluated” (tx on X). The next day CoinDesk reported that tx had fixed the code, hired blockchain forensics specialists and filed a complaint with the FBI’s Internet Crime Complaint Center, and had not said how holders would be made whole (CoinDesk). The fix is not in the bridge’s public code: its repository has no commit after 5 September 2025.

On the XRP Ledger, the bridge has signed nothing since 02:56 UTC on 10 August (D60D83D0…). It holds 763.5 XRP: the 493.5 left after the drain, plus 270 XRP that another account paid in on 14 August with no memo (D402EBBC…), so no bridge deposit.

The wrapped CORE the attack minted is still on the XRP Ledger. Of the 6,021,494 units of coreum7c8eb29e07 logocoreum7c8eb29e07 that exist, 4,069,632 sit in the two front wallets. 545 accounts hold some, and none of it has been bridged back since the halt.

67.6% in the two front wallets32.4% everyone else
Every unit of the bridge’s wrapped CORE token on the XRP Ledger on 16 October 2026.

What the warning got wrong

After the last release at 20:53 UTC (CD308F78…) no more XRP left the account. By the following afternoon the bridge contract was reported halted, which fits both facts: still able to sign at 02:56, stopped by the time of the report. The account’s flags are unchanged: master key disabled, DefaultRipple still on, no global freeze. Clearing DefaultRipple was never done and never needed to be, because it played no part in what happened.

Raising the alarm on a fast, abnormal outflow was the right instinct, and by the next day the thread had corrected itself: “it’s the coreum side”, in the author’s own words. On the XRP Ledger, an on-by-default flag and partial payments get blamed for many drains they have nothing to do with, and the way to tell is always the same: read who signed the transaction.

Reference transactions

Every hash below is a validated XRP Ledger transaction.

  1. First payment: 91.97 units of the bridge’s own wrapped-Coreum token to A2 · ledger 106,183,346
    50E065FCEAC40BB3B3DB22FBA70430AB08AC4F915F5D73F19C717C67282B76BB
  2. Wrapped-token ladder: 79,762 units to A1 (each step about doubles the last) · ledger 106,183,369
    27A1A9325F3910990EBAB1780EF12BDD040CDBF572277F3125E35E9F3370BE99
  3. First native-XRP release: 3,249 XRP to A2 · ledger 106,183,498
    B1CB50EF8651CD4C036B547972838A0826453B10B3A951CB1FB4F6D75F9EE433
  4. Largest single XRP release: 25,908.6 XRP to A1 · ledger 106,183,574
    A36A38BCD40971F0183B22E39DBA382556F7A9CA97ADABEFBB82CDAF9B28588B
  5. Steady-state cycle: 1,694.7 XRP to A1 · ledger 106,184,216
    3B4F67647C798D823B5BCE98F423F44D06DAF221054AA2F3851DC65574095E78
  6. Steady-state cycle: 1,694.7 XRP to A2, 50 seconds later · ledger 106,184,229
    73676CFE83996BA68D7DA216E3F1A1C1E18F3BD248FE55603F41D312D1C90EDA
  7. Last XRP release: 520.3 XRP to A1 · ledger 106,184,842
    CD308F78B8E3154F809C0DA46EE54BB9B00DAC14E81805A4F7317105B128020D
  8. The only transaction the bridge has signed since: 96.3 wrapped-token units, 02:56 the next morning · ledger 106,190,470
    D60D83D07AC20BB5F4A4CD9D746081063C9B27A1E74652362C927BDECE4439C5
  9. Onward hop: A1 forwards 9,616 XRP to a staging wallet · ledger 106,184,877
    9C0CF29CD70856C284073D9BE414700056D643EC2022663FA7C33E344C33D659
  10. Onward hop: A2 forwards 9,719 XRP to a staging wallet · ledger 106,187,318
    C01D38D2E60ED346DDB206B6212288C9D0369E1C37B7704F5977DF507937CCDA
  11. 14 August: 270 XRP paid into the bridge with no memo
    D402EBBC5304602F2F25E5D710603EC7180B46CA70A8BBFE077962CC6FC8A8D9

Bridge design and code: specification, contract source (the attestation gate is evidence.rs; the relayer’s missing destination check is in xrpl_to_coreum.go). The warning thread: original post, correction, halt report. tx’s statement.

Coreum side (public chain): bridge contract core1zhs909jp9yktml6qqx9f0ptcq2xnhhj99cja03j3lfcsp2pgm86studdrz; attacker’s main account core1e7y6qwktg7l6ajr8e2eal5j4dnc2jyceftnjce. The two phantom “deposits” on the XRP Ledger, a wallet-to-wallet token transfer (3DB7E443…) and a self-directed XRP payment (3A04E779…), each appear on Coreum as an xrpl_to_coreum_transfer attested by 21 relayers against the bridge contract.