A vulnerability in paused stream handling within the SablierFlowBase
contract allows actions on streams that should be voided or paused. This flaw could lead to unauthorized operations or token streaming under incorrect conditions.
In SablierFlowBase
, streams marked as “paused” may not account for isVoided
status, leading to possible unauthorized access to stream functions. Specifically, the notPaused
modifier checks only ratePerSecond
and skips isVoided
, leaving voided streams at risk.
This code solely evaluates ratePerSecond
to determine if a stream is paused, disregarding isVoided
.
Deploy the contract with two streams: one active, one voided.
Call a function requiring notPaused
, targeting the voided stream.
Observe that notPaused
bypasses isVoided
, executing on a voided stream.
Below is a sample test demonstrating the vulnerability:
The test shows successful execution of functions on a voided stream, demonstrating the vulnerability.
This vulnerability enables unauthorized actions on voided streams, potentially leading to state inconsistencies and incorrect fund flows.
Manual review.
Update the notPaused
modifier as follows:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.