Guardian's review of XAUT0 BSC Deployment for USDT0, published March 2026. The report records 1 finding, including 1 low.
- Published
- Review window
- March 25 to 31, 2026
- Language
- Solidity
- Chains
- BNB Chain
- Sector
- Stablecoins, Cross-chain
- 0 Critical
- 0 High
- 0 Medium
- 1 Low
- 0 Informational
Findings 1
-
L-01 Low Potential DoS via Unexecutable Inbound Message Queue DoS Pending
Description
Upon successful receipt of inbound message hashes, the executor invokes
lzReceive. During this process, LayerZero lazily updates the nonce within_clearPayload.if (_nonce > currentNonce) { unchecked { // try to lazily update the inboundNonce till the _nonce for (uint64 i = currentNonce + 1; i <= _nonce; ++i) { if (!_hasPayloadHash(_receiver, _srcEid, _sender, i)) revert Errors.LZ_InvalidNonce(i); } lazyInboundNonce[_receiver][_srcEid][_sender] = _nonce; } }https://github.com/LayerZero-Labs/LayerZero-v2/blob/9c741e7f9790639537b1710a203bcdfd73b0b9ac/packages/layerzero-v2/evm/protocol/contracts/MessagingChannel.sol#L134 While updating the nonce, the protocol enforces that for a given message with nonce
n, all messages with nonce< nmust be at least inbounded (execution is not required). This validation is implemented via a loop. If there is a long queue of inbounded messages prior to noncen, the loop may become expensive in terms of gas.Description:
One might assume that as earlier messages get executed (e.g., message 501 in a queue of 1000), the pressure on subsequent messages reduces. This assumption aligns with LayerZero’s design, as noted in the code:
/// @dev if a lot of messages are queued, the messages can be cleared with a smaller step size to prevent OOGHowever, this assumption breaks if the queued messages are unexecutable.
Attack Scenario
An attacker can deliberately create a large number of inbounded but unexecutable messages, causing the loop to run out of gas when processing later messages. This is feasible in OApps such as Tether (USDT), where:
- Cross-chain transfers to blacklisted addresses will revert on the destination chain.
- Transfers to certain contract addresses may also revert. By repeatedly sending such transactions, an attacker can fill the inbound queue with messages that cannot be executed.
Feasibility Analysis
At first glance, this may appear impractical due to high gas requirements (e.g., ~16M gas per transaction on EVM). However, this overlooks executor behavior:
- Executors are only incentivized to spend the gas specified during message submission.
- If the configured gas limit is reasonable (e.g., 300k), an attacker would only need ~150 such failing messages to create a clog.
Impact
This can temporarily block the processing of subsequent messages (i.e., a denial-of-service on the messaging channel). However, this does not result in permanent blockage or loss of funds.
Mitigation / Design Consideration
LayerZero provides a skip mechanism:
- OApp owners or delegates can call
skipon the endpoint to manually advance the nonce. - This clears the blockage and restores normal operation.
Severity
This issue is not Critical or High severity because:
- No funds are lost.
- The blockage is temporary and can be resolved via
skip. However, it represents a valid operational risk that can disrupt message processing.
Recommendation
Consider monitoring queued inbound messages on destination chains, detecting abnormal buildups of unexecutable messages, and proactively intervening using the
skipfunction when necessary.
No findings match.
More from USDT0
All 34 reportsPut your code through the same review.
This review started with a conversation about scope. Tell us what you are building and we will plan yours with you.
