The SablierV2MerkleLL and SablierV2MerkleLT contracts inherit from SablierV2MerkleLockup, which is Adminable
The Adminable contract has a transferAdmin function, but it does not update the admins of the SablierV2Lockup streams created from SablierV2MerkleLockup because the admin (sender)` of these streams is immutable.
When a protocol uses the SablierV2MerkleLockup contracts to create an airstream, the admin is initially assigned the admin role. However, the current (usually first) admin is also set as the sender in the SablierV2Lockup contract, granting them rights to the SablierV2Lockup::cancel function (if cancalable) and other "admin-only" functions.
If the protocol admin's private key is compromised, or any other issue arises, using the Adminable::transferAdmin function to transfer admin rights will only change the admin role on the SablierV2MerkleLockup contracts. The previous admin will still retain the ability to cancel all streams and retrieve all refunded amounts on the SablierV2Lockup contract. This is because the admin (sender) of the streams remains immutable, allowing the previous admin to exploit their retained privileges.
Manual Review
Implement a mechanism to update the admin of all streams when using the Adminable::transferAdmin function on SablierV2MerkleLockup.
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.