fix(signal): isolate group allowlist from DM pairing-store entries#26029
Closed
bmendonca3 wants to merge 4 commits intoopenclaw:mainfrom
Closed
fix(signal): isolate group allowlist from DM pairing-store entries#26029bmendonca3 wants to merge 4 commits intoopenclaw:mainfrom
bmendonca3 wants to merge 4 commits intoopenclaw:mainfrom
Conversation
nikolasdehor
approved these changes
Feb 25, 2026
nikolasdehor
left a comment
There was a problem hiding this comment.
Same class of fix as #25988 (Telegram) but for Signal. The one-line change from [...deps.groupAllowFrom, ...storeAllowFrom] to deps.groupAllowFrom correctly isolates the group allowlist from DM pairing-store entries, preventing paired DM users from automatically gaining group access. The test mock setup is thorough — it seeds the pairing store with the sender's number while keeping groupAllowFrom pointing to a different number, and asserts no dispatch context is created. Clean and minimal.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Signal group allowlist enforcement currently mixes two trust domains:
channels.signal.groupAllowFrom)readChannelAllowFromStore("signal"))Because of that merge, a sender who is only DM-paired can bypass group allowlist gating and trigger agent execution in Signal groups where they are not explicitly allowed.
This PR isolates group allowlist checks from DM pairing-store entries.
Change Type
Scope
src/signal/monitor/event-handler.tssrc/signal/monitor/event-handler.group-allowlist.test.tsSecurity Impact
High. This is an AuthZ boundary bypass:
groupAllowFrom(or open group policy).Repro + Verification
Repro (before this patch):
groupPolicy=allowlist,groupAllowFromexcluding sender+15550001111, anddmPolicy=pairing.+15550001111(DM paired).+15550001111in groupg1.Deterministic local regression test:
pnpm exec vitest run src/signal/monitor/event-handler.group-allowlist.test.ts --maxWorkers=1Post-fix targeted verification:
pnpm exec vitest run src/signal/monitor/event-handler.group-allowlist.test.ts src/signal/monitor/event-handler.inbound-contract.test.ts src/signal/monitor/event-handler.mention-gating.test.ts --maxWorkers=1Evidence
Dedupe checks against existing work:
Code-level fix evidence:
effectiveGroupAllownow uses onlydeps.groupAllowFrom.Human Verification
dmPolicy: pairinggroupPolicy: allowlistgroupAllowFrom: ["+15550002222"]+15550001111in DM.+15550001111, send group message into a Signal group.+15550002222, send group message and confirm dispatch continues.Compatibility / Migration
No config schema changes. Existing DM pairing behavior for direct messages is unchanged.
Failure Recovery
If unexpected regressions appear, revert this commit to restore previous behavior while preserving a clear regression test for the bypass scenario.
Risks and Mitigations
Risk:
Mitigation:
channels.signal.groupAllowFrom.Greptile Summary
Fixes authorization boundary bypass in Signal group allowlist by removing DM pairing-store entries from group sender authorization. Previously, senders who were only DM-paired could bypass
groupAllowFromrestrictions and trigger agent execution in Signal groups where they weren't explicitly allowed.src/signal/monitor/event-handler.ts:449removesstoreAllowFromfromeffectiveGroupAllow+15550001111is blocked from group when only+15550002222is ingroupAllowFromNote: Similar vulnerability pattern exists in other channels (
src/security/dm-policy-shared.ts:28, Telegram, LINE) that usemergeAllowFromSourcesorresolveEffectiveAllowFromListsfor group allowlists. Those channels may need equivalent fixes.Confidence Score: 5/5
Last reviewed commit: fc34437