#43315 [BC-Critical] DA Light Node Can Be DoSed Due to Lack of Batch Validation

Submitted on Apr 4th 2025 at 14:19:37 UTC by @Nirix0x for Attackathon | Movement Labs

  • Report ID: #43315

  • Report Type: Blockchain/DLT

  • Report severity: Critical

  • Target: https://github.com/immunefi-team/attackathon-movement/tree/main/protocol-units/da/movement/protocol/da

  • Impacts:

    • Temporary freezing of network transactions by delaying one block by 500% or more of the average block time of the preceding 24 hours beyond standard difficulty adjustments

    • Increasing network processing node resource consumption by at least 30% without brute force actions, compared to the preceding 24 hours

Description

Brief/Intro

The light node's batch_write function processes incoming transactions by iterating through each one individually and performing potentially expensive validation (like deserialization, signature checks, and whitelist lookups) before applying any checks and validations to the batch as a whole. This allows an attacker to flood the node with a large number of transactions in a single request and send multiple such batch_write requests , exhausting node resources and leading to a DoS, potentially significantly slowing or crashing in worst case DA light node. Such an attack will also incur cost for the protocol due to these transactions being saved in Celestia.

Vulnerability Details

The issue lies in the batch_write function within the light node's sequencer mode (protocol-units/da/movement/protocol/light-node/src/sequencer.rs). Upon receiving a BatchWriteRequest, the code immediately iterates through each contained blob without first performing any checks on the overall batch if it is being sent from an whitelisted sequencer node (only transaction senders are checked against a whitelist)

Inside this loop, each blob undergoes potentially expensive processing individually:

  1. JSON Deserialization (serde_json::from_slice).

  2. A call to prevalidator.prevalidate, which itself performs further per-transaction work including BCS deserialization, signature verification, and sender whitelist checks (handled in protocol-units/da/movement/protocol/prevalidator/src/aptos/...).

These expensive steps occur per-transaction before any batch-level validation. External actors can easily overwhelm the node by sending a large volume of batch_write requests. Further, all these transactions will be stored in Celestia incurring a cost for the protocol while attacker can minimize their cost by sending non-executable large transactions.

Impact Details

The primary impact is a Denial-of-Service (DoS) attack against Movement light nodes. Attackers can trigger resource exhaustion (CPU/memory) by sending large batches, forcing repetitive, expensive per-transaction validation. This can cause nodes to become unresponsive or crash. A secondary impact is wasted Data Availability (DA) layer costs, as protocol might be forced to pay fees (e.g., to Celestia) for blocks filled with valid but ultimately non-executable junk transactions that bypass the validation.

References

Mentioned above

Proof of Concept

Proof of Concept

Run this script against the DA Light Node (adapted version of whitelist.rs) which sends 1000 parallel batch_write each with 4000 txs.

Resource consumption e.g. 450%+ CPU is observed directly on the container as well slowness in processing blocks32b31ee1fcd8 movement-celestia-da-light-node 458.26% 5.836GiB / 7.653GiB 76.25% 10.3GB / 16MB 383MB / 1.22GB 26

Was this helpful?