#44101 [SC-Low] `_dispatch()` incorrectly assumes revert bubbling when transferring native tokens.

Submitted on Apr 16th 2025 at 22:02:25 UTC by @adrianx for Audit Comp | Spectra Finance

  • Report ID: #44101

  • Report Type: Smart Contract

  • Report severity: Low

  • Target: https://github.com/immunefi-team/Spectra-Audit-Competition/blob/main/src/router/Dispatcher.sol

  • Impacts:

    • Griefing (e.g. no profit motive for an attacker, but damage to the users or the protocol)

Description

Brief/Intro

_dispatch() incorrectly assumes revert bubbling when transferring native tokens.

Vulnerability Details

When a Native eth transfer is executed through Router:: _dispatch(command, input); the underlying function performing the call assumes that any exceptions will be bubbled up, but with call being a low level rather than a Solidity function, it is not the case.

As seen below, there is an Incorrect assumption that reverts would bubble: In the Dispatcher.

https://github.com/immunefi-team/Spectra-Audit-Competition/blob/1cebdc67a9276fd87105d13f302fd77d000d0c0b/src/router/Dispatcher.sol#L485

But as outlined in Solidity by Example - call https://solidity-by-example.org/call/.

Impact Details

Griefing attacks. The incorrect assumption allows attackers to perform griefing attacks. Attackers can execute Failed native token transfers as though it was successful.

References

https://github.com/immunefi-team/Spectra-Audit-Competition/blob/1cebdc67a9276fd87105d13f302fd77d000d0c0b/src/router/Dispatcher.sol#L485

Proof of Concept

Proof of Concept

Add the following code to RouterTest.T.sol and run with forge test --mt testTransFerNative -vvvv. check the logs to see the expected results.

logs:

The contract will incorrectly assume revert bubbling and executes the transfer as though it was successful.

Was this helpful?