#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?