On July 22, 2026, 24.15 million USDC—nearly all available liquidity—was drained from AFX Bridge on Arbitrum. Yet this was not a hack in the conventional sense: no encryption was broken and no code vulnerability was exploited. The bridge followed its own rules, treated the withdrawal as legitimate, and released the funds because the instruction carried five authentic signatures out of seven. The attacker had secured a majority of the votes held by the parties trusted to authorize transfers.
BitOK analysts reconstructed the crypto theft in detail. Here is how the attackers obtained $24 million in three minutes without breaching the bridge itself.
Table of content:
How 24.15 million USDC Was Drained from AFX Bridge
The Role of the Validator Quorum
Flow of Funds
Attack Timeline
Where the Initial Funding Came From
Key Addresses
The Attack in Full
What This Exploit Should Teach Us
How 24.15 million USDC Was Drained from AFX Bridge
To understand the attack, start with three key terms:
A bridge is a service that transfers value from one blockchain to another. It does not create “real” coins of its own. Instead, it locks an asset on one network and issues an equivalent asset on another. AFX Bridge operated on Arbitrum and held a large reserve of USDC in its contract.
Validators are trusted participants whose digital signatures confirm that a withdrawal is legitimate. AFX had seven validators, each with roughly equal voting weight.
A quorum is the minimum share of votes required for an instruction to be approved. AFX required strictly more than two-thirds of the total voting weight. Once enough signatures were collected, the contract executed the withdrawal automatically, with no additional checks. That was the mechanism the attacker exploited.
The key facts:
Losses — 24,150,000 USDC was withdrawn from the bridge on Arbitrum. Only about 41,000 USDC remained in the contract.
How access was obtained — the attacker submitted five valid validator signatures. Their combined voting weight was 71.42%, above the required two-thirds threshold, so the system treated the instruction as legitimate.
Timing — just 3 minutes and 30 seconds later, an authorized finalizer—a service address trusted to complete withdrawals—finished the transaction as designed. From the contract’s perspective, every rule had been followed.
A simple analogy helps explain what happened. Imagine a vault guarded by seven people, each holding a key. If guards controlling more than two-thirds of the votes hand over their keys, the system opens the vault automatically. The attacker presented five authentic digital signatures—the equivalent of genuine keys—so the order appeared perfectly legitimate. The vault opened willingly.
It is important to understand where the actual weakness lay. The attacker did not breach Arbitrum’s security or make the contract bypass signature verification. Instead, they exploited the keys—or the signing infrastructure—of the parties AFX trusted to approve withdrawals. The code worked exactly as intended; the failure was in the trust model and key management.
How the amounts changed at each stage, from withdrawal to the final address:
Metric;Value
Withdrawn from AFX Bridge;24,150,000 USDC
Received on Ethereum after CCTP;24,146,274.281809 USDC
Difference during transfer (CCTP / relay);3,725.718191 USDC
Received after selling USDC;≈ 12,467.3871168227 ETH
Transferred to the final address;12,467.43703738210198932 ETH
Remaining in AFX Bridge;≈ 41,020.050167 USDC
The active set of “hot” validators consisted of seven participants with nearly equal voting weights. Out of a total weight of 10,000, validators representing 7,142 signed the instruction—enough to exceed the two-thirds threshold.
Investigator’s note: the signatures are cryptographically valid and recover to addresses in the validator set. This alone does not prove that the key owners knowingly participated: the keys or the shared signing environment may have been compromised.
Flow of Funds
Once the attacker received the USDC, they moved quickly, swapping the assets and changing where the stolen funds were held. The sequence was as follows:
Split and cross-chain transfer. The attacker divided the 24.15 million USDC into six tranches and moved them from Arbitrum to Ethereum via Circle CCTP, Circle’s official mechanism for transferring USDC between networks. A total of 24,146,274.28 USDC arrived on Ethereum; the small difference reflects transfer-related costs.
Conversion to ETH. Eight transactions were used to sell the USDC through trading infrastructure involving UniswapX. The traces show the UniswapX V2 Dutch Order Reactor, which executes orders through a Dutch-auction mechanism in which the price gradually declines until a trade is filled. Within the same transactions, WETH—the wrapped form of ETH commonly used in trading—was unwrapped back into native ETH.
Consolidation at one address. All proceeds—12,467.437 ETH—were consolidated in a single destination wallet: 0x6276…ebAC.
Investigator’s note: Circle CCTP, UniswapX, Relay, and MetaBridge were used as ordinary public infrastructure after the attack. The fact that the funds passed through these services does not imply that they were compromised or involved.
How the attacker moved the funds. The graph was built usingBitOK's Graph tool.
Attack Timeline
Time;Event
19:48–19:50;The operational address moves ETH through MetaBridge and funds wallets on Arbitrum and Ethereum with gas
21:26:55;A fraudulent instruction to withdraw 24.15 million USDC is created with five valid signatures
21:30:25;An authorized finalizer completes the withdrawal, the USDC reaches the attacker
21:33–21:41;Six Circle CCTP transfers move the USDC from Arbitrum to Ethereum
21:33–21:42;Eight trades convert USDC to ETH through infrastructure involving UniswapX
21:42:59;12,467.437 ETH is consolidated at the final address
Any operation of this kind requires a small amount of “fuel” to get started, such as gas to pay transaction fees. This is where analysts found a lead that may help identify who was behind the attack.
The initial gas did not come from Tornado Cash, a popular mixer often used to obscure fund flows. Instead, it came from the service wallet 0xe946…76cbA, which received 0.204 ETH on the day of the attack and then forwarded funds to the attacker’s operational address. The wallet behaves like a service wallet: it receives funds from many sources, pays many recipients, and sends precise, non-round amounts after fees.
Investigator’s note: the strongest working hypothesis links this wallet to the instant-exchange service ChangeNOW, or to an aggregator using ChangeNOW liquidity. The wallet history includes a direct deposit from an address labeled as ChangeNOW, as well as links to liquidity from HTX and Binance. Its ownership has not been conclusively established; confirming it would require the service’s internal logs.
A separate clarification concerns 0x370A…12cF, which appears in the gas-funding chain. This is a high-volume Relay Solver, a technical executor of cross-chain operations. Among other things, it transferred 0.1 ETH through MetaBridge and paid out approximately 0.099 ETH on Ethereum. It is neither the source of the funds nor the operator’s wallet, but a service address used by many customers.
A closer look at each conclusion regarding the funding source:
Confidence level;Conclusion
Confirmed;Gas came through 0xe946…76cbA, Tornado Cash does not appear in the identified chain
Assessment;0xe946…76cbA is a service wallet used for payouts and gas funding
Working hypothesis;The wallet is linked to ChangeNOW or to an aggregator using its liquidity
Not established;The payer’s identity, the original deposit, and ownership by any specific service
Technical detail: the recipient address 0x2f29…FEefc uses EIP-7702, a relatively new Ethereum feature that allows an externally owned account to temporarily execute smart-contract code. This explains why the address appears to “call itself” during the CCTP transfers, but it does not reveal who controls it.
The Attack in Full
The attackers prepared gas and operational wallets in advance. They then presented the bridge with a majority of validator signatures, prompting it to release almost all of its liquidity. The funds were moved to another network, converted to ETH, and consolidated in one place less than 20 minutes after the withdrawal.
Investigator’s note: as of the July 23 review, the destination wallet still held all of the ETH it had received, and no confirmed outgoing transfers of the stolen funds had been identified. The central question remains unresolved: how the five signatures were obtained—through key theft, compromise of shared signing infrastructure, malware, or insider involvement. The attacker’s identity and jurisdiction, as well as the likelihood of asset recovery, also remain unknown.
One caveat for future monitoring: if the destination wallet later receives zero-value transactions carrying messages or unsolicited scam tokens, those should be treated as ordinary on-chain spam—not as movement of the stolen funds.
What This Exploit Should Teach Us
The main lesson is that a system can be robbed without a single line of code being broken. Compromising the trust on which it depends can be enough.
Signing authority is the key to the vault. There was no flaw in the contract: it faithfully executed an instruction backed by a majority of the votes. The security of a bridge therefore depends on how well validator keys are protected and whether those validators are genuinely independent. If several “hot” keys can be compromised at once—for example, through a shared server or common signing environment—a formal quorum provides little protection.
Large withdrawals should not be executed automatically. A transaction covering almost the entire balance passed through the ordinary quorum process in three and a half minutes. Sensible safeguards include stricter rules for unusually large withdrawals: approval by a “cold” quorum, limits on the share of liquidity that can be withdrawn, and a timelock that gives the team time to intervene. A short dispute window is not enough without automated, round-the-clock monitoring.
The good news is that the funds remain visible at a single address and have not entered a mixer. That alone, however, does not guarantee recovery. Recovering the assets would require action from relevant platforms and, in most cases, legal procedures. Preventing a theft is vastly cheaper than trying to recover assets after the fact.