High-Severity Cross-Chain Vulnerability in Across V3 Bridge Lets Malicious Relayers Steal User Funds

High-Severity Cross-Chain Vulnerability in Across V3 Bridge Lets Malicious Relayers Steal User Funds

Source: Cross Chain Action Vulnerability Disclosure by zachobront on mirror.xyz


Mint is an optimistic cross-chain bridge that allows users to move assets between blockchains. It features Cross Chain Actions, letting users execute complex transactions-like depositing into lending protocols-directly on the destination chain. However, a high severity bug discovered on January 28, 2025, exposed the protocol to full theft of certain transactions by malicious relayers.


How Across V3 Works: Key Components

  • Cross Chain Actions: Users send tokens alongside instructions to a Multicall Handler on the target chain, automating token transfers plus contract calls in one transaction.
  • Early Return for Self Relays: To facilitate relayers moving their own tokens cross-chain efficiently, Across allows them to skip the transfer part if the relayer is also the recipient (avoiding unnecessary token movements).

The Core Flaw: Unsafe Early Return Logic

The vulnerability stems from Across’s assumption that when the sender and recipient are the same (self relay), it’s safe to bypass execution. This overlooks the case when Cross Chain Actions are used, which rely on the Multicall Handler’s ability to execute arbitrary calls.

A malicious relayer can:

  1. Use the Multicall Handler to call fillV3Relay() with itself as recipient.
  2. The msg.sender == recipientToSend condition triggers an early return, skipping token transfers and calling instructions.
  3. The transaction falsely appears completed, marking the relay as filled.
  4. Other relayers ignore this relay, unaware it was never executed.
  5. When the relayer refund phase occurs, the attacker claims the refund tokens and drains the Multicall Handler’s assets.

Consequently, the victim’s funds never arrive on the destination chain but are stolen instead.


Proof of Concept

A detailed POC script simulating the attack on a Linea Mainnet fork shows:

  • Normal transaction: user receives tokens and calls execute as expected.
  • Attack scenario: early return skips transfers, user balance stays unchanged, but relay is marked filled.
  • Subsequent normal relays revert due to the relay already being marked as completed.

Remediation & Response

Upon reporting, the Across team quickly responded and patched the bug by removing the early return condition for self-relays from all Spoke Pool contracts across chains:

- if (msg.sender == recipientToSend && !isSlowFill) return;

This fix ensures all token transfers and calls are executed properly, eliminating the exploit path.

Final Notes

  • The researcher zachobront publicly thanked the Across team for their professionalism and swift action.
  • This incident highlights the complexity of cross-chain transaction logic and the need for rigorous validation, especially for multi-step automated actions.