Skip to content

Strengthen multisig guidance: timelocks, separation, address discipline, and key takeaways#448

Open
ipatka wants to merge 1 commit intosecurity-alliance:developfrom
ipatka:rev-multisig-guidance
Open

Strengthen multisig guidance: timelocks, separation, address discipline, and key takeaways#448
ipatka wants to merge 1 commit intosecurity-alliance:developfrom
ipatka:rev-multisig-guidance

Conversation

@ipatka
Copy link
Copy Markdown
Collaborator

@ipatka ipatka commented Apr 6, 2026

Strengthen multisig guidance: timelocks, separation, address discipline, and key takeaways


Revises the multisig security framework based on lessons from real-world multisig operations and emerging risks. Adds a one-page key takeaways summary for quick reference.

Key changes

  • Design principles: Added "build in slowness by design," "constrain emergency powers," and "separate responsibilities across multisigs" as foundational principles
  • Timelock guidance: Strengthened from "recommended" to "essential" for protocol admin multisigs. Added tiered duration guidance (long/medium/short/none) and a dedicated timelock monitoring section
  • Multisig separation: New section on separating multisigs by function with common patterns and a separation table
  • Address discipline: New sections on address book hygiene (never copy from explorer history) and permissionless Safe addition / address poisoning risks
  • Dedicated keys: Expanded rationale for using separate keys per multisig (wallet clarity + blast radius containment)
  • Calldata decoding: Expanded from brief mention to full section covering how calldata works, decoding steps, and common red flags
  • Delegated proposers: Corrected and clarified why delegated proposers matter (first signer verification) and why final signer should avoid "sign and execute"
  • Solana differences: New section on architectural differences from EVM for multisig verification
  • Access control inventory: New guidance on maintaining a comprehensive inventory of all privileged roles, added structured fields to the registration template
  • Key takeaways page: New one-page summary distilling the 11 most important principles with links to full sections

Files changed

  • docs/pages/multisig-for-protocols/key-takeaways.mdx (new)

  • docs/pages/wallet-security/secure-multisig-best-practices.mdx

  • docs/pages/multisig-for-protocols/use-case-specific-requirements.mdx

  • docs/pages/multisig-for-protocols/setup-and-configuration.mdx

  • docs/pages/multisig-for-protocols/planning-and-classification.mdx

  • docs/pages/multisig-for-protocols/registration-and-documentation.mdx

  • docs/pages/wallet-security/signing-and-verification/secure-multisig-safe-verification.mdx

  • docs/pages/wallet-security/signing-and-verification/secure-multisig-squads-verification.mdx

  • docs/pages/multisig-for-protocols/joining-a-multisig.mdx

  • docs/pages/multisig-for-protocols/overview.mdx

  • vocs.config.tsx

  • Describe your changes

  • If you are touching an existing piece of content, tag current contributors from the attribution list

  • If there is a steward for that framework, ask the steward to review it

  • If you're modifying the general outline, make sure to update it in the vocs.config.ts adding the dev: true parameter

  • If you need feedback for your content from the wider community, share the PR in our Discord

  • Review changes to ensure there are no typos; see instructions below.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 6, 2026

Sidebar Configuration Reminder

This PR includes added, renamed, or removed documentation files:

  • docs/pages/multisig-for-protocols/key-takeaways.mdx (added)

Please ensure that:

  • The sidebar in vocs.config.tsx has been updated to include these files
  • New content has the dev: true parameter so it's marked as under development
  • Sidebar links match the file paths - use the preview deployment to verify

See Contributing Guide – Sidebar & Navigation for more details.


This is an automated reminder. If this PR doesn't need sidebar changes, you can ignore this message.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 6, 2026

built with Refined Cloudflare Pages Action

⚡ Cloudflare Pages Deployment

Name Status Preview Last Commit
frameworks ✅ Ready (View Log) Visit Preview 7bfce67

Copy link
Copy Markdown
Collaborator

@DicksonWu654 DicksonWu654 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm! I sent a few suggestions in DMs

eliminates confusion about which multisig a signing request belongs to and reduces the risk of signing the wrong
transaction.
- **Key isolation**: If your key for one multisig is compromised, it cannot be used to attack any other multisig you
participate in. Each multisig has an independent security boundary.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if the addresses are from the same hd path on a hardware wallet, and the seed is compromised, you don't have true firewalling

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yea will clarify

<AttributionList contributors={frontmatter.contributors} />

If you read one page from the Multisig Security Framework, make it this one. These are the principles that matter most.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this advice is ethereum/safe specific I would add something here to add guards and other safeguards to force changes through the timelock.

Hash verification confirms you are signing the intended transaction, but it does not tell you what the transaction does.
Always [decode the calldata](/wallet-security/signing-and-verification/secure-multisig-safe-verification#5-calldata-review)
and verify the function, target, and parameters match what was described. Watch for red flags like unexpected
`DELEGATECALL`, `approve` calls, or hidden batch operations.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would add: calculate hashes across multiple devices and OS to make sure computer isn't compromised, then make sure to verify the entire hash on the hardware wallet when signing

Comment on lines +25 to +29
## Separating Multisigs by Function

Protocols should not consolidate all admin privileges into a single multisig. If one multisig controls everything
(treasury, protocol upgrades, operational parameters, emergency pause), then compromising that multisig means total
protocol compromise.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is solid advice. if these are all behind timelocks, do they need to deploy 1 msig and 1 timelock for each role?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yup would require multiple to be deployed

[External Transaction Monitoring](#external-transaction-monitoring) for treasury-specific requirements.
- **Redundant channels**: Use multiple independent alert channels (e.g., email, Slack, Telegram) so that a single
channel failure does not cause a missed alert

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

recommend adding bullet point on integration testing. there should be extensive internal tooling that will catch mistakes like misconfigurations of a protocol via governance, even after the change is deployed onchain.

if a threat actor wanted to exploit a larger protocol, one vector would be supply chain attack that slips in malicious governance payload. the payload looks one way locally, once broadcast, it morphs into something else.

without extensive tests and harnesses to simulate that what you have in your local repo is actually what ended up on chain, you run the risk of a mismatch.

from experience, once stuff goes onchain, almost no one reviews, which is why automated testing with protocol invariants is extremely important.

Comment on lines +217 to +218
Consider making timelock queues publicly visible through a dashboard or notification feed. This allows the broader
community to observe pending changes, which adds an additional layer of scrutiny beyond the core team.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

imo this transparency is non-negotiable. without it, it's hard for the community to understand the changes being made.

- **`MultiSend` when a single action was expected**: Extra calls could be hidden in a batch.
- **Unfamiliar function selectors**: If you cannot identify the function being called, do not sign until you verify it.
- **Parameters that do not match the briefing**: Wrong recipient, wrong amount, wrong contract address.
- **Mismatched target contract**: The function call is going to a different contract than described.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • unverified smart contracts on etherscan being called
  • calldata mismatch with simulation output. e.g. the selector is "transfer(address,uint256)" but no tokens are transferred. (this is similar to how bybit attack worked at the smart contract level. unverified smart contract on etherscan, and calldata that was decoded to "transfer")

Copy link
Copy Markdown
Collaborator

@frameworks-volunteer frameworks-volunteer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Model: z-ai/glm-5.1 Reasoning: high Provider: openrouter

Review: Strengthen multisig guidance

Security Review

No issues found. This is pure MDX documentation content with no code execution, no secrets, no injection vectors, and no dependency changes.

QA Review

  • All internal links and anchor fragments resolve to existing headings (verified: dedicated-keys-per-multisig, address-book-discipline, address-poisoning-and-permissionless-safe-additions, constrain-emergency-powers, separating-multisigs-by-function, tiered-timelock-durations, timelock-configuration, timelock-monitoring, delegated-proposer, maintain-an-access-control-inventory, 5-calldata-review)
  • Frontmatter on new key-takeaways.mdx matches existing conventions (title, description, tags, contributors, imports)
  • Tags in fetched-tags.json match key-takeaways.mdx frontmatter exactly
  • vocs.config.tsx sidebar entry added correctly
  • CI passes: Build Preview, lint, sidebar-reminder all green
  • No leftover debug content, TODOs, or placeholder text
  • fetched-tags.json sectionMappings diff is alphabetical reorder only, no functional change

Minor Observation

The PR checklist marks "modify the general outline, update vocs.config.ts adding the dev: true parameter" as done, but the new Key Takeaways sidebar entry does not include dev: true. This appears intentional since the content is production-ready, not a WIP section. No action needed.

Verdict

Solid contribution. The new design principles (slowness by design, constrained emergency powers, separation), expanded timelock guidance with tiered durations, address discipline sections, and the key takeaways summary page are all well-written and internally consistent. Approving.

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.

4 participants