Blog

Arcus Incident Analysis

Research reportsIncident analysis
Arcus Incident Analysis

Incident Summary

On November 10, 2026 UTC, nine Arcus BridgeVault payouts transferred 2,234,391 USDG to the published incident wallet on Robinhood Chain. The project’s report is named November 9 (opens in a new tab), while the relevant ledger and chain executions occurred on November 10 UTC. The token quantity is not an independently valued dollar loss or attacker profit.

The saved account records contain three exact signed64 wraparound residuals. That identifies a representation-level anomaly; the production value used by collateral validation remains unverified. The representative historical transactions connect an applied withdrawal to a published vault entitlement and payment, while leaving the upstream authorization unresolved.

Arcus reports (opens in a new tab) that its treasury covered the shortfall and other user balances were unaffected. The status record (opens in a new tab) corroborates a pause and resumption; recovery and incident-linked treasury replenishment have not been independently established.

Key Transactions

Timestamp (UTC)Transaction / Explanation
2026-11-10 03:08:510x1b3b5354b9daf44bf63377857f4e640ebce9c89f337f130f376a72f365e172e4 (opens in a new tab) — publishes withdrawal record 39755 for 1 USDG.
2026-11-10 03:08:520x534b430d8b651bff2849e249cef93cf031af5ac531e4c7272bc6a3a6b3f3ee29 (opens in a new tab) — pays 1 USDG.
2026-11-10 03:10:150x285333d00a4b553dbc6a325269e4c6fa901c9f3d7cc8cdde4c20f17ac01c4aa0 (opens in a new tab) — pays 500,000 USDG.
2026-11-10 03:10:420x16e6e206f0a6700c95ec03d55b3728b34846b08294c6791b88a6a99dcf0c2c2b (opens in a new tab) — pays 500,000 USDG.
2026-11-10 03:11:020x71c1bb3a43516bcc2eea3c3f1460ce8f5e139e9535ffd3427ba63dbf46e05005 (opens in a new tab) — pays 500,000 USDG.
2026-11-10 03:11:240x0127b0a030550a848bdf583d24e4dc6538f69aaf5b05ec49dd584c4600a59c00 (opens in a new tab) — pays 500,000 USDG.
2026-11-10 03:28:140x817d56ed73f97b16c1b0ae1e55bf48ba896e9060bed425ae96579e1c76939629 (opens in a new tab) — pays 55,000 USDG.
2026-11-10 03:32:180x458019d994b2ec23786db94cb24261e48526385587bb8d158528fd93c4c43f2b (opens in a new tab) — pays 60,000 USDG.
2026-11-10 03:42:080xb4b62e32bec8138bcd14d66c0b8b17a87314843ea8cd49017a22d609581bff6d (opens in a new tab) — pays 58,471 USDG.
2026-11-10 03:53:560x2ab936cf849529238ea15e42e0a6d5bcf1b2f27f585bcd9b5ee940fc8523d761 (opens in a new tab) — pays 60,919 USDG.
2026-11-10 08:17:050xbf6e7ed13ccef6f11316aa061ee514de63b876bc63b6683dea56ef40a9c72db4 (opens in a new tab) — later vault implementation upgrade; not proof of the reported engine fix.

Key Addresses

Attack Flow

Background

Arcus is a perpetuals exchange (opens in a new tab) whose documented design combines an off-chain central limit order book, a permissioned validator appchain, and an EVM rootchain. A sequencer orders requests; the exchange state machine updates balances and positions. Custody and final token settlement occur on the rootchain, so an exchange balance and a wallet token payment are distinct stages.

A wallet can use up to ten subaccounts (opens in a new tab), each with independent positions, orders and collateral. Quote cash (opens in a new tab) aggregates account and position cash. Equity also reflects open-position value and, where applicable, spot collateral and interest. Negative cash alone therefore does not establish insolvency; displayed free collateral can also be negative in a healthy spot-backed account.

A withdrawal response (opens in a new tab) marked 202 PENDING means queued. The later APPLIED outcome (opens in a new tab) means the engine operation succeeded and balances changed. The documented collateral rule rejects a withdrawal or transfer before persistence if its amount exceeds accountEquity − requiredMargin, leaving account state unchanged. Validators then publish withdrawal effects through the Checkpoint Manager; BridgeVault stores the resulting entitlement, and a separate execution call pays it. Queuing, application, publication and payment are different boundaries: an applied request is not, by itself, a completed token outflow. These documents were captured after the incident and do not authenticate the historical engine build or risk input.

arcus1
Exhibit 1. Browser capture of the current transfer-update documentation (opens in a new tab): a withdrawal or transfer exceeding free collateral should be rejected before persistence. Captured November 12, 2026; this describes intended behavior and does not establish the incident build's guard execution.

The historical sequence

  1. The recipient begins with a small recorded entitlement. Returned account-1 history reconciles exactly: 6 deposits + 13 internal inflow − 11.789000001 internal outflow − 6.668396 withdrawals − 0.042603055 trading PnL = 0.500000944 quote units. This uses returned operator history and does not establish lifetime completeness or source equity.
  2. An internal transfer produces two extreme reported balances. At 03:07:10.104964 UTC, sequence 10096155419, the source and recipient record the same applied transfer. After the same-sequence interest adjustment, source cash is −2,156.277510656 and recipient cash is +0.500000944; the reported post-transfer figures are +9,223,369,880.577265153 and −9,223,372,036.354774865. The feed does not establish instruction order.
  3. A one-token withdrawal crosses into on-chain entitlement. At 03:08:46.831236 UTC, sequence 10096382839, the recipient’s applied 1 USDG withdrawal changes its reported cash to +9,223,372,036.354776751. At 03:08:51, the publication transaction creates BridgeVault record 39755, fixing the recipient, wrapper, 1,000,000 raw USDG, and true execution flag. At 03:08:52, eight rootchain blocks later, the payout consumes that ID and transfers 1 USDG. Matching ID, amount and recipient anchor this representative creation-to-payment sequence.
  4. Further withdrawal requests produce real token payments. The remaining fourteen applied debits reconcile against the recorded positive balance. Fifteen applied requests total 5,234,391 USDG; nine successful payouts total 2,234,391 USDG. Six requests totaling 3,000,000 USDG have no matching payout through finalized block 111,322,906, November 11 at 01:13:26 UTC. Arcus attributes the held requests to its limiter and later reversal.
    arcus screen1
    Figure 1. The representative first withdrawal, entitlement publication and payment. Solid arrows show observed ordering; the dashed boundary marks the unresolved question of whether collateral validation consumed a wrapped value.
    arcus screen2
    Exhibit 2. Browser capture of the first payout receipt, log 3 (opens in a new tab). The USDG transfer value is 1,000,000 raw units, or 1 USDG at six decimals. This is payment evidence; it does not expose the engine's arithmetic.

Vulnerability

The arithmetic fingerprint

For an internal transfer of Δ, ordinary bookkeeping is source_after = source_before − Δ and recipient_after = recipient_before + Δ. A withdrawal then subtracts its debit from the recipient balance. Collateral approval is a separate decision; these equations describe the recorded balance transitions.

A signed 64-bit integer ranges from −2^63 to 2^63−1. In two's-complement arithmetic, a result outside that range wraps modulo 2^64. For intuition, eight-bit −128 − 1 is represented as +127: the discrepancy is one full cycle, 2^8. This illustrates the arithmetic only; languages and runtimes differ in their overflow behavior.

The Arcus quote scale is 1e9 quantums per quote unit (opens in a new tab), so M = 2^64 equals 18,446,744,073.709551616 quote units. The saved transfer records satisfy:

Recorded transitionResidual versus ordinary arithmetic
Source after transfer+M = +2^64
Recipient after transfer−M = −2^64
Pair total0

The source and recipient reported balances therefore retain the same combined total, −2,155.777509712 quote units, even though each individual result has crossed a signed boundary. A pair-conservation check can miss that pattern.

Why the next debit matters

The next recipient debit is 1 USDG. Its reported balance is just above the signed64 minimum, so ordinary subtraction crosses that boundary:

Recipient cash transitionQuote units
Reported cash before debit−9,223,372,036.354774865
Ordinary result after subtracting 1−9,223,372,037.354774865
Reported result+9,223,372,036.354776751
Reported minus ordinary+18,446,744,073.709551616 = M / 1e9

This is signed underflow, within the broader integer-overflow class. Unlike the paired transfer, the debit has no opposite leg to cancel the residual. The result is an exact anomaly in the recorded cash transition, not evidence of additional deposited collateral.

arcus screen3
Figure 2. Analyst reconstruction from the saved source and recipient histories. The three residuals are exact reported-record identities, not a recovered production execution trace.

What the records support

The exact power-of-two residuals are more specific than a generic balance error. They identify a wrapping signature in the reported path; the layer is unresolved. The recipient history independently reconciles to 0.500000944 with returned ETH/SPY positions flat, which weakens an ordinary prior-entitlement explanation within that history's coverage. It does not establish complete lifetime history or source equity.

The pinned public decoder (opens in a new tab) reads the amount and quote balances as signed 64-bit values. That supports the wire-format interpretation; it does not establish historical engine storage, arithmetic or an incident DA frame.

arcus screen4
Exhibit 3. The pinned decoder is a consumer-side source view. It does not identify the production arithmetic expression or the value consumed by collateral validation.

The records establish a wrapping signature in the reported accounting path and a real entitlement and payment, but they do not identify which component performed the wrapping or show that the collateral guard consumed the wrapped value.

Fund Flow

arcus screen5
Figure 3. Nine paid withdrawals establish 2,234,391 USDG of Arcus outflow. Six applied requests totaling 3,000,000 USDG had no matching payout through finalized block 111,322,906, November 11, 2026 at 01:13:26 UTC, and are excluded from that outflow.

Nine deposits (opens in a new tab) sent 2,852,928.439519 USDG gross into Relay. Two refunds returned 618,509.991541 USDG to the incident wallet; they are not Arcus recoveries. Seven successful fill inputs total 2,234,418.439519 USDG, exceeding the verified Arcus payouts by 27.439519 USDG. Gross deposits include refunded and reused funds, so they must not be added to the incident outflow.

The Relay request records (opens in a new tab) associate seven fills with 1,052.212688526003007096 ETH delivered on Ethereum. Independent receipts confirm the matched transactions succeeded, not their internal native-ETH values. The extra successful input prevents allocating all ETH solely to Arcus payouts; later custody and recovery remain outside the established trace.

Arcus’s timeline (opens in a new tab) places monitoring detection at 03:15, pause at 04:07, fix at 04:37, reopening at 09:26, reversal at 10:02, and treasury top-up at 17:28 UTC on November 10. The reported fix is about ninety minutes after onset; the pause is the roughly one-hour milestone. Verified payouts continued through 03:53:56. Public status corroborates service interruption and restoration, while patch deployment, reversal accounting and treasury coverage still need independent evidence.

To keep up to date on the latest incident alerts and statistics, follow @certikalert (opens in a new tab) on X, explore our incident dashboard, or read our latest analysis on certik.com.

Share

Tell us what you are building.