Skip to content

Allow UV retry reset without PIN configured #365

Description

@pando85

Problem

When uv_retries is exhausted (e.g., after repeated failed UV ceremonies), the only CLI reset path is passless client pin uv-reset, which requires PIN authentication. If no PIN is configured (min_pin_length: 0), there is no way to reset the UV retry counter via the client — the authenticator becomes permanently locked out of UV operations.

The only workaround is manually editing the encrypted pin_retries.gpg file in the password store, which is error-prone and not discoverable.

Expected Behavior

passless client pin uv-reset (or an equivalent command) should work even when no PIN is set. Since UV is handled by the notification callback (not PIN), the reset should not require PIN authentication when min_pin_length == 0.

Reproduction

  1. Configure passless with no PIN (min_pin_length: 0)
  2. Trigger multiple failed UV ceremonies (e.g., dismiss notifications) until uv_retries reaches 0
  3. Attempt passless client pin uv-reset → fails because no PIN is set
  4. All subsequent WebAuthn assertions fail with UV denied

Suggested Fix

  • Allow uv-reset without PIN when no PIN is configured (skip pinUvAuthParam verification)
  • Or add a dedicated passless client uv-reset command that resets UV retries via the admin socket (which already has privileged access)
  • Consider also resetting uv_retries on daemon restart when no PIN is configured (since the counter is only meaningful as a brute-force guard for PIN/UV)

Environment

  • passless 0.13.0 (v0.13.0, commit 00f5c9cb)
  • soft-fido2 0.15.0
  • Storage backend: pass (password-store)
  • No PIN configured (min_pin_length: 0)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions