While the SablierFlow contract implements the Checks-Effects-Interactions pattern, it lacks explicit reentrancy protection through OpenZeppelin's nonReentrant
modifier. This could still allow malicious tokens to reenter the contract through multiple concurrent calls.
The contract follows CEI but doesn't prevent multiple concurrent executions of the same function. A malicious token could use its transfer
function to trigger multiple withdrawals before the first one completes.
The contract follows CEI but doesn't prevent multiple concurrent executions of the same function. A malicious token could use its `transfer` function to trigger multiple withdrawals before the first one completes. Even with CEI pattern in place, a malicious token could still reenter through these paths:
While CEI pattern mitigates some risks, concurrent calls are still possible
manual code review
Add OpenZeppelin's ReentrancyGuard:
And considered apply the fixes to this functions as well because they modify critical state variables, make external calls to potentially malicious tokens and they all handle token transfers
}
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.