The sendWethToFeeRecipients function incorrectly sends protocol WETH rewards to the WETH token contract address instead of the intended marketMakingEngineConfiguration.protocolFeeRecipients address. This critical flaw results in irreversible loss of funds, as the WETH contract cannot process or recover these tokens.
The function passes the WETH token address (e.g., 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) as the recipient parameter to distributeProtocolAssetReward, instead of the actual marketMakingEngineConfiguration.protocolFeeRecipients address.
Intended Workflow:
The distributeProtocolAssetReward function should distribute WETH rewards to predefined marketMakingEngineConfiguration.protocolFeeRecipients address
Actual Behavior:
WETH rewards are sent to the WETH contract address, which lacks functionality to forward or recover these funds.
Example: Sending 100 ETH to 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 locks the tokens permanently.
Setup:
Protocol accumulates 500 ETH in rewards (availableProtocolWethReward = 500e18).
distributeProtocolAssetReward is configured to send rewards to the WETH contract address.
Attack:
A legitimate transaction calls sendWethToFeeRecipients.
The function transfers 500 ETH to the WETH contract address.
Result:
The 500 ETH is permanently stuck in the WETH contract, as it cannot initiate transfers or interact with external addresses.
WETH rewards sent to the WETH contract are irrecoverable
Manuel Review
Retrieve protocolFeeRecipients from the marketMakingEngineConfiguration and pass them to distributeProtocolAssetReward
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.