Back to Blog
Industry AnalysisOctober 8, 2026by Theo Nova

The Handoff Is the Attack Surface: What the NEAR Intents Exploit Reveals About Cross-Chain Security

The Handoff Is the Attack Surface: What the NEAR Intents Exploit Reveals About Cross-Chain Security

The Handoff Is the Attack Surface: What the NEAR Intents Exploit Reveals About Cross-Chain Security

What does the NEAR Intents exploit teach builders about cross-chain security? The clearest lesson is that the handoff between a deposit or withdrawal service and a smart contract deserves the same scrutiny as either component by itself. NEAR Intents reported about $3.8 million in losses on October 1, paused activity across 11 networks, and said the funds were returned in full the following day. The recovery was unusually fast; the boundary failure still deserves a careful engineering review.

The public statements identify the interaction between Omni deposit and withdrawal infrastructure and the NEAR Intents contract, but they do not publish the precise code path. That matters. This article treats the event as a case study in how to test cross-system accounting, authorization, and containment, not as a claim that a specific unreported bug occurred. The practical question is whether a system can prove that each credited balance corresponds to a valid, final, and uniquely processed event.

What happened, and what remains unknown

NEAR Intents announced that it had stopped services after detecting a security incident. The team attributed it to a bug in the interaction between its Omni deposit and withdrawal infrastructure and a NEAR Intents smart contract. Its initial notice put the preliminary loss at approximately $3.8 million, said the contract-side vulnerability had been patched, and explained that deposits and withdrawals on 11 networks would remain unavailable for about 12 additional hours while infrastructure fixes were completed. The notice was posted on X.

The temporary suspension was an operational control, not just a communications decision. If a system cannot confidently distinguish valid settlement from an anomalous credit, leaving the affected routes open can compound uncertainty. A pause creates time to reconcile state, establish the incident boundary, and decide which functions can safely resume. It also creates a user cost, which is why the conditions for pausing and restarting should be designed before an incident.

The outcome changed quickly. On October 2, NEAR Protocol co-founder Illia Polosukhin said the funds had been returned one day after the exploit and the inquiry was closed. NEAR Intents general manager Alex Shevchenko wrote, “The funds from the $3.8M NEAR Intents hack were sent back in full. We are stopping the investigation.” His post also urged would-be reporters to use bug bounties rather than disrupting services, as both NEAR Protocol and Shevchenko posted on X.

That is a significant recovery, but it is not the same as a technical postmortem. The cited public statements describe the system interaction, pause, patch, and return of funds; they do not establish which validation step failed or whether the defect was in message authentication, state accounting, replay handling, authorization, or another condition. Builders should resist the temptation to fill in those blanks. The actionable lesson is to test the boundary as a first-class system component.

For a wider view of how different trust assumptions can fail, see our breakdown of single-verifier bridge risks. The details differ, but the underlying design habit is similar: write down which facts each component is allowed to trust, then test what happens when that assumption is false, stale, duplicated, delayed, or only partially true.

A handoff is a protocol, even when it looks like plumbing

Teams often diagram the smart contract and treat the deposit service, relayer, indexer, signer, and withdrawal worker as implementation details. That is backwards. If an off-chain component can cause an on-chain balance to change, it participates in the asset-control protocol whether or not it is called a protocol. Its messages, keys, queues, retries, clocks, and failure modes are part of the security boundary.

Consider a simplified deposit path. A source-chain event is observed, interpreted, checked for finality, authenticated, assigned a unique identifier, and converted into a contract instruction. Each step transforms evidence.

If one service treats a pending observation as final, another accepts the same event twice, or a signature binds the wrong destination or amount, the contract may receive an instruction that is syntactically valid but economically wrong. The contract cannot compensate for information it was never given or a trust assumption the system failed to encode.

The withdrawal direction has its own chain of obligations. A user request must be authorized; the available balance must be reserved or reduced; the requested destination and asset must be unambiguous; and the external transfer must either complete or leave a recoverable record.

Retries are especially important. A timeout does not prove that a transfer failed. If a worker repeats the request without an idempotency rule, a transient network error can turn one intended withdrawal into two execution attempts.

A useful mental model is a shipping manifest. A warehouse system can mark a parcel as dispatched, a carrier can scan it, and a recipient can sign for it. If the records use different identifiers or disagree about whether a scan is provisional or final, no single ledger entry tells the whole story. Cross-chain systems need explicit definitions for event identity, finality, authorization, and completion at every handoff, rather than a hopeful assumption that adjacent services interpret the same record alike.

That is why a narrowly scoped contract audit may not be enough. The full flow includes the contract, off-chain service, key-management setup, source and destination networks, monitoring, and recovery procedures. A review should map the end-to-end sequence and identify where state changes, where evidence is verified, and who can reverse or pause each action. A bridge key-compromise playbook is a useful companion for teams examining the people and credentials around that flow.

Five tests that make the boundary visible

Start with conservation. For every asset and route, write an invariant that relates valid source-side deposits, pending transfers, completed withdrawals, refunds, and balances held by the system. The exact equation depends on the design, but the principle is stable: a user must not be credited twice for one source event, and the system must not create a claim that exceeds assets it can account for. Define this in ordinary language first, then translate it into assertions and automated tests.

Next, test uniqueness and replay. Every cross-system event should have a stable identifier that survives retries and reprocessing.

Exercise the same message twice, deliver events out of order, restart a worker after it has sent a transaction but before it has stored the response, and simulate two workers processing the same queue item. The expected result should be specified in advance. “The service usually only sees the message once” is not an invariant.

Third, separate observation from authorization. A service reporting that an event exists should not automatically mean that the event is entitled to release value. Tests should vary the source chain, contract address, asset, destination, amount, recipient, and event status independently.

Change one field at a time and verify that the contract and the off-chain signer reject every combination outside the allowed policy. This makes implicit trust visible.

Fourth, make partial failure ordinary in test environments. Drop an RPC response after submission, delay a confirmation, return a stale indexer result, rotate a key while a message is queued, and make one network unavailable while others continue. Test the case where a transaction succeeds on-chain but the application times out before recording success. A resilient design must reconcile that state without treating uncertainty as permission to repeat an irreversible operation.

Fifth, test pause and recovery as production features. A pause needs defined scope: can one asset or route be halted without freezing unrelated traffic? Who can invoke the control, what evidence is required, and how will affected users see the change?

For restart, require a reconciliation checklist, an explicit decision owner, fresh monitoring, and clear rollback conditions. If the only recovery plan is “the team will investigate,” the operational design is incomplete.

These tests align with well-established smart-contract review guidance. OWASP's Smart Contract Top 10 distinguishes access-control and business-logic vulnerabilities, two categories that can appear in the same cross-system flow. OpenZeppelin's secure development roadmap recommends documenting integrations and assumptions, testing interactions, and monitoring invariants after deployment. These are not guarantees, but they provide a disciplined starting point.

For teams building on-chain logic, source verification is another practical baseline. It does not prove that a system is safe, but it lets reviewers compare deployed bytecode with the code they assessed and examine the behavior users are being asked to trust. Our practical smart-contract verification playbook walks through that control and its limits.

Containment, recovery, and the value of clear status

The NEAR Intents response illustrates why incident playbooks need both technical and product decisions. When the team detected the incident, it stopped services and kept deposits and withdrawals on 11 networks unavailable while completing infrastructure fixes. That pause was not free: users temporarily lost normal access to those routes, support teams had to explain what was affected, and engineers had to avoid restoring a route before they understood its state.

A good playbook should distinguish at least three states: normal operation, restricted operation, and recovery in progress. Each needs a defined set of permitted actions. For example, a team may allow read-only balance checks while pausing new deposits, or may keep unaffected routes open while isolating one source network.

Those choices must be supported by system boundaries that are actually independent. A control panel that says “pause network A” is misleading if the same key or queue can still authorize withdrawals on network A through another path.

Recovery also needs a ledger of decisions. Record which addresses, contracts, assets, and time windows are in scope; which balances have been reconciled; what patch changed; and which tests passed after deployment.

Preserve a timeline of alerts and privileged actions. In a fast-moving incident, this can feel bureaucratic. Later, it is how the team distinguishes a resolved symptom from a verified fix and communicates facts without guessing.

The return of funds in this case is an encouraging outcome, but response planning cannot assume that an attacker will cooperate. A system should have containment and user-remediation paths that do not depend on recovering stolen assets. The technical design should prioritize limiting exposure, detecting anomalous movement, and creating a reliable record of affected users. Any compensation decision is separate from the engineering question of whether the control gap has been closed.

Disclosure channels matter too. Alex Shevchenko's request to use bug bounties points to a practical distinction between a controlled report and a live exploit. Teams should make the safe channel easy to find, describe what information to include, set expectations for acknowledgment, and specify how researchers can avoid accessing or moving real user assets. A bounty program is useful only if its scope and response process are credible.

For a broader operational reference, see our incident-response and admin-key checklist. It covers the surrounding controls that determine whether a team can pause a system promptly and account for privileged changes. Build, security, support, and communications owners should rehearse the same scenario together, because a technically correct pause can still become a confusing user incident if nobody knows what to say.

Make evidence travel with the transaction

Every handoff should carry enough evidence for the next component to independently validate what it is being asked to do. That usually means a canonical event identifier, a source and destination, an asset identifier, an amount with units, the intended recipient, a confirmation or finality rule, and a clear status. The signed message should bind the values that affect authorization. If the destination, amount, or network can be changed after signing, the signature may authenticate the wrong operation.

The evidence record should also explain what has not happened yet. A message can be observed but not final, authorized but not submitted, submitted but not confirmed, or confirmed but not reconciled by the application. Collapsing those states into a single “complete” flag makes retry logic dangerous. Typed state transitions and explicit expiry rules help operators know whether to wait, retry safely, or escalate.

Monitoring should compare independent views of the same flow. Alert on mismatches between observed deposits and credited balances, between contract events and application records, and between withdrawal requests and actual destination-chain transfers. Use thresholds that reflect the system's normal behavior, but do not rely only on a single aggregate volume alert. A small number of unauthorized transfers can be severe even when total activity remains within ordinary daily ranges.

Log enough context to reconstruct a decision without exposing secrets. The record can include message identifiers, route, state transition, signer identity, policy version, and transaction references. Never log private keys or sensitive credentials.

Give alerts an owner and an action, such as isolate one route, disable one signer, or reconcile a queue. An alert that merely says “unusual activity” is noise unless the on-call team can use it to decide what to do.

The design question is not whether every component can fail. It is whether a component failure can make another component accept an unearned claim. Our analysis of trust boundaries in crypto infrastructure explores why these boundaries increasingly define the reliability of digital asset systems. Good observability turns that idea into something operational: evidence, expected transitions, and a clear owner for each exception.

What this means for Autheo and builders

Autheo's public architecture is framed as a distributed cloud platform, not only a blockchain. In that model, the Layer 1 provides a trust and economic foundation, while the mesh and infrastructure layers are where distributed execution is intended to happen. A security review should therefore follow a request across layers instead of treating an on-chain transaction as the entire user journey. The platform overview is available in the complete guide to Autheo.

That architectural distinction is a design lens, not a claim that every future marketplace or execution service is already operating. Staking and transaction fees are live today; decentralized compute, storage, AI inference, and identity capabilities are rolling out over the coming months. For any platform, including Autheo, a service should be described according to its actual deployment status, and each planned integration should be evaluated before it is treated as a production dependency.

For builders, the transferable principle is to draw the complete asset flow before writing the security checklist. Mark where information is observed, where it becomes trusted, where a balance changes, which component holds keys, and how a timeout is distinguished from a failure. Then define properties that must remain true even if a service is delayed, duplicated, compromised, or offline. A look at real-time blockchain data for builders can help teams think about how observability and data delivery fit into that wider flow.

The October incident ended with the full reported loss returned, a rare and welcome result. Yet the lesson is not that recovery will happen next time.

It is that cross-chain services should treat integration boundaries as security-critical, assume messages can be duplicated or delayed, and rehearse a pause before they need one. The clearest fix may be in a contract, a service, a key policy, or the way the components agree on finality. Only an end-to-end review can tell.

Key Takeaways

The public account attributes the October 1 incident to an interaction between NEAR Intents' Omni deposit and withdrawal infrastructure and its smart contract; it does not disclose the exact code path.

The reported loss was about $3.8 million. NEAR Intents paused routes across 11 networks, and the funds were returned in full the next day.

Treat off-chain services that can trigger on-chain balance changes as part of the asset-control protocol, not as incidental plumbing.

Test event uniqueness, replay, finality, authorization, partial failure, idempotent retries, and balance-conservation invariants across the full deposit and withdrawal flow.

Define pause scope, restart conditions, reconciliation steps, monitoring owners, and safe disclosure channels before an incident.

A fast recovery is good news, not a substitute for a documented root-cause review or an end-to-end security model.

To explore how Autheo describes its platform and the infrastructure it is building, visit autheo.com.

Share

Gear Up with Autheo

Rep the network. Official merch from the Autheo Store.

Visit the Autheo Store

Theo Nova

The editorial voice of Autheo

Research-driven coverage of Layer-0 infrastructure, decentralized AI, and the integration era of Web3.

About this author →

Get the Autheo Daily

Blockchain insights, AI trends, and Web3 infrastructure updates delivered to your inbox every morning.