#41337 [BC-Insight] Channel buffer size in block proposer is too low leading to network delays and resource exhaustion
Submitted on Mar 13th 2025 at 23:26:23 UTC by @Rhaydden for Attackathon | Movement Labs
Report ID: #41337
Report Type: Blockchain/DLT
Report severity: Insight
Target: https://github.com/immunefi-team/attackathon-movement/tree/main/protocol-units/da/movement/protocol/light-node
Impacts:
Increasing network processing node resource consumption by at least 30% without brute force actions, compared to the preceding 24 hours
Description
Brief/Intro
The block proposer's channel buffer size implementation uses the XOR operator (^) instead of bit shifting (<<), resulting in a buffer of 8 slots instead of the intended 1024. This significantly smaller buffer creates a bottleneck in block processing, potentially freeze network transactions by exploiting the backpressure mechanism. This would cause temporary transaction freezing during production.
Vulnerability Details
Take a look at the run_block_proposer function where the channel buffer size is incorrectly specified:
let (sender, mut receiver) = tokio::sync::mpsc::channel(2 ^ 10); ^ operator in rust peerforms bitwise XOR, not exponentiation. This results in:
2 (binary: 0010) XOR 10 (binary: 1010) = 8 (binary: 1000)
Actual buffer size: 8 slots
The actual buffer size intended: 1024 slots (2¹⁰)
The small buffer creates a critical bottleneck between the block builder and publisher components:
Block Builder (
tick_build_blocks):
Block Publisher (
read_blocks):
The timing mechanism in read_blocks becomes unreliable with the small buffer as it frequently hits timeouts during normal operation.
Impact Details
this falls under: "Temporary freezing of network transactions by delaying one block by 500% or more of the average block time"
because the 8-slot buffer creates severe backpressure during normal operation. Block delays occur when the buffer fills, forcing the block builder to wait. Txns processing can effectively freeze as a result.
References
https://github.com/immunefi-team/attackathon-movement//blob/a2790c6ac17b7cf02a69aea172c2b38d2be8ce00/protocol-units/da/movement/protocol/light-node/src/sequencer.rs#L265
Proof of Concept
Proof of Concept
This is a step by step run down of how this could be exploitted:
Environment Setup
Simple attack script setup
Create attack txns:
Execute attack pattern
Coordinate multi-node attack
Monitor impact
Expected Results
After Phase 1 (0-1 seconds):
Channel fills up (8 slots)
Block builder starts experiencing delays
After Phase 2 (1-2 seconds):
Block builder becomes blocked
Memory pressure increases
Transaction processing slows significantly
After Phase 3 (2+ seconds):
Node becomes unresponsive
Network synchronization issues appear
Other nodes start experiencing cascading effects
Fix
Was this helpful?