Locations
Summary
When a custom rewards claimer already exists, pressing Enter in the replacement-address field activates the preceding Unset submit control. The form consequently submits the zero address instead of the replacement entered by the operator.
Root cause
ClaimerForm renders Info, containing Unset, before the address input and primary Set button.
SubmitButtonHookForm makes Unset a submit control.
- Unset's click handler writes
isUnset = true; the primary button restores false only when that button is clicked.
- Implicit Enter submission activates the first enabled submit control, so validation treats the request as an unset and
useClaimerFlowResolver maps it to zeroAddress.
Impact
An authorized operator owner can sign an unintended removal of the current delegation:
- the existing claimer loses its ability to initiate claims;
- the entered replacement receives no delegation; and
- delegated claim automation remains unavailable until the owner submits a corrective transaction.
The transaction stage identifies the action as an unset, allowing rejection before signing. The claimer also cannot redirect reward proceeds, so the surviving state disruption is correctable and low severity.
Scenario
- Operator 42 currently delegates reward-claim initiation to address A.
- Its owner enters address B as the replacement and presses Enter.
- The browser activates the earlier Unset submit button, whose handler sets
isUnset to true.
- Address validation is skipped and the resolver constructs
setCustomRewardsClaimer(42, zeroAddress).
- If the owner approves the displayed transaction, A is removed and B is not installed, interrupting delegated claims until another transaction corrects the state.
Drafted from LidoLens finding CSMW-OA-CLAIMER-01
Locations
csm-widget/features/change-role/claimer-form/claimer-form.tsx:19-22csm-widget/features/change-role/claimer-form/controls/info.tsx:18-51csm-widget/shared/hook-form/controls/submit-button-hook-form.tsx:30-39csm-widget/features/change-role/claimer-form/context/use-claimer-flow.ts:25-39Summary
When a custom rewards claimer already exists, pressing Enter in the replacement-address field activates the preceding Unset submit control. The form consequently submits the zero address instead of the replacement entered by the operator.
Root cause
ClaimerFormrendersInfo, containing Unset, before the address input and primary Set button.SubmitButtonHookFormmakes Unset a submit control.isUnset = true; the primary button restoresfalseonly when that button is clicked.useClaimerFlowResolvermaps it tozeroAddress.Impact
An authorized operator owner can sign an unintended removal of the current delegation:
The transaction stage identifies the action as an unset, allowing rejection before signing. The claimer also cannot redirect reward proceeds, so the surviving state disruption is correctable and low severity.
Scenario
isUnsettotrue.setCustomRewardsClaimer(42, zeroAddress).Drafted from LidoLens finding CSMW-OA-CLAIMER-01