Skip to content

fix(ColdStorageAddressBookModule): enforce validation on addAllowedRecipients and unblock module execution calls#114

Open
giwaov wants to merge 1 commit into
circlefin:masterfrom
giwaov:fix/cold-storage-addressbook-security
Open

fix(ColdStorageAddressBookModule): enforce validation on addAllowedRecipients and unblock module execution calls#114
giwaov wants to merge 1 commit into
circlefin:masterfrom
giwaov:fix/cold-storage-addressbook-security

Conversation

@giwaov

@giwaov giwaov commented Apr 7, 2026

Copy link
Copy Markdown

Fixes #111 and #112.

Problem

Issue #111 - Unauthorized allowlist expansion:
\�ddAllowedRecipients()\ was configured with \skipRuntimeValidation: true\ in the execution manifest, allowing any external address to call \�ccount.addAllowedRecipients([attackerAddress])\ without authorization. Meanwhile,
emoveAllowedRecipients()\ correctly used \skipRuntimeValidation: false.

Issue #112 - Validation hook blocks module execution functions:
\preUserOpValidationHook\ and \preRuntimeValidationHook\ reverted with \Unsupported()\ for unrecognized entity IDs. When the module's validation hook is installed and a call to \�ddAllowedRecipients()\ or
emoveAllowedRecipients()\ is made directly (not via \execute()/\executeBatch()), the hook doesn't recognize the entity ID and reverts, blocking the intended execution flow.

Fix

  1. Changed \skipRuntimeValidation: true\ to \ alse\ for \�ddAllowedRecipients\ - runtime validation is now enforced
  2. Set \�llowGlobalValidation: true\ for \�ddAllowedRecipients\ to match
    emoveAllowedRecipients\
  3. Replaced
    evert Unsupported()\ with passthrough
    eturn\ in both \preUserOpValidationHook\ and \preRuntimeValidationHook\ for unrecognized entity IDs

Single file, +8/-4 lines.

…cipients and unblock module execution calls

- Set skipRuntimeValidation to false for addAllowedRecipients so
  runtime validation is enforced (fixes circlefin#111)
- Enable allowGlobalValidation for addAllowedRecipients to match
  the pattern used by removeAllowedRecipients
- Replace revert Unsupported() with passthrough return in both
  preUserOpValidationHook and preRuntimeValidationHook for
  unrecognized entity IDs, so module execution functions like
  addAllowedRecipients/removeAllowedRecipients are not blocked
  by the validation hook (fixes circlefin#112)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

addAllowedRecipients() Function Execution Manifest Skips All Validation, Allowing Anyone to Expand Any Account's Allowlist

1 participant