The FundFlowController
constructor retrieves the current claimPeriod
value utilized in the linked StakingPoolBase.sol
contract. However, it is important to note that the claimPeriod
can be updated, which will impact all operations of the FundFlowController
. Further details will be provided in the subsequent section.
Upon reviewing the FundFlowController
code, it is observed that the claimPeriod
is set within the initialize
function, and there is no setter function available to update the claimPeriod
if it changes in the Chainlink staking contract.
Now, let us examine the Chainlink Staking Pool Base, which includes a function designed to update the claimPeriod
.
Limit check to which the claim period can be updated
The current claimPeriod
is set to 7 days
, but it can be adjusted to any value ranging from 1 day to 30 days
.
The following functions in the FundFlowController
and VaultDepositController
contracts will be affected:
claimPeriodActive
updateVaultGroups
VaultControllerStrategy:withdraw
VaultControllerStrategy::getMinDeposits()
If the claimPeriod
is adjusted, the protocol erroneously assumes it can unbind the funds from Chainlink staking, while in reality, it cannot.
The claimPeriodActive
function will yield an incorrect response.
The withdraw
function is vulnerable to a Denial of Service (DoS) attack, as the protocol assumes it can withdraw funds when it actually cannot.
Manual Review
Instead of storing the claimPeriod
within the FundFlowController
contract, it is recommended to utilize the StakingPoolBase::getUnbondingParams
, which will consistently return the current claimPeriod
.
Or set a setter function for claimPeriod
which will update the claimPeriod
.
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.