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.