Skip to content

fix: Resolve security validation vulnerabilities in ColdStorageAddressBookModule (#111, #112)#113

Open
addnad wants to merge 1 commit into
circlefin:masterfrom
addnad:fix/addressbook-security-vulnerabilities
Open

fix: Resolve security validation vulnerabilities in ColdStorageAddressBookModule (#111, #112)#113
addnad wants to merge 1 commit into
circlefin:masterfrom
addnad:fix/addressbook-security-vulnerabilities

Conversation

@addnad

@addnad addnad commented Apr 7, 2026

Copy link
Copy Markdown

This PR fixes two critical security vulnerabilities in the ColdStorageAddressBookModule that could allow unauthorized access to account allowlists.

Issues Fixed

Issue #111: Unauthorized Allowlist Expansion

Vulnerability: The addAllowedRecipients() function had skipRuntimeValidation: true, allowing any external address to call it and expand an account's allowlist without authorization.

Attack Flow:

  1. Account has ColdStorageAddressBookModule installed
  2. Attacker calls account.addAllowedRecipients([attackerAddress])
  3. No validation required, attacker's address added to allowlist
  4. User can be phished into sending tokens to attacker

Fix: Changed to skipRuntimeValidation: false, allowGlobalValidation: true for consistency with removeAllowedRecipients()

Issue #112: Blocked Execution Module Function Calls

Problem: The validation hooks (preRuntimeValidationHook and preUserOpValidationHook) reverted with Unsupported() for any call not explicitly handled, preventing direct invocation of module execution functions.

Impact: Users couldn't call addAllowedRecipients() and removeAllowedRecipients() as intended.

Fix: Changed final reverts to successful returns, allowing execution module functions to work as designed.

Changes

  • skipRuntimeValidation: truefalse for addAllowedRecipients
  • allowGlobalValidation: falsetrue for addAllowedRecipients
  • Removed revert Unsupported() from validation hooks (replaced with returns)

Security Impact

  • Prevents unauthorized modification of account allowlists
  • Ensures only proper validation-gated calls can modify allowlists
  • Maintains security consistency between add/remove operations

Fixes #111 #112

…sBookModule (circlefin#111, circlefin#112)

Issue circlefin#111: Fix unauthorized allowlist expansion
- Problem: addAllowedRecipients() had skipRuntimeValidation: true, allowing
  anyone to expand any account's allowlist without authorization
- Solution: Changed to skipRuntimeValidation: false and allowGlobalValidation: true
  for consistency with removeAllowedRecipients()
- Impact: Now requires proper validation before allowing list modifications

Issue circlefin#112: Enable intended execution module function calls
- Problem: preRuntimeValidationHook and preUserOpValidationHook both reverted
  with Unsupported() at the end, preventing direct calls to addAllowedRecipients
  and removeAllowedRecipients
- Solution: Changed revert Unsupported() to successful returns (return;/
  return SIG_VALIDATION_SUCCEEDED;) to allow execution module functions to work
- Impact: Execution module functions can now be called as intended

Security Impact:
- Prevents unauthorized modification of allowlists
- Ensures only account owners can add/remove allowed recipients
- Maintains consistency between execution functions' validation requirements

Fixes: circlefin#111 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