Skip to content

Implicit submission unsets the claimer instead of applying the entered replacement #631

Description

@exromany

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

  1. Operator 42 currently delegates reward-claim initiation to address A.
  2. Its owner enters address B as the replacement and presses Enter.
  3. The browser activates the earlier Unset submit button, whose handler sets isUnset to true.
  4. Address validation is skipped and the resolver constructs setCustomRewardsClaimer(42, zeroAddress).
  5. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions