If the owners initiate an emergency withdrawal of assets from the FeeCollector contract, it just transfers them to the treasury instead of depositing them, rendering them stuck.
In case of emergency, the protocol owners can call emergencyWithdraw() in the FeeCollector contract to save their assets and send them to the treasury, the issue is that it simply makes a transfer, rather than depositing them into the treasury:
The transferred tokens will not be accounted for internally inside the treasury which will render them stuck. The correct way to transfer into the treasury is by calling the deposit() function:
The treasury contract does not have any other functions to transfer out the tokens or use them which will render them stuck since they will not be accounted for in the _balances[token] mapping.
All funds transferred from emergency withdrawals from the FeeCollector to the Treasury will be stuck.
Manual Review
Deposit them with deposit() instead of just transferring them.
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.