Federation credential isolation #360

Closed
opened 2026-02-07 17:12:42 +00:00 by jason.woltje · 0 comments
Owner

Phase 5b - Federation Credential Isolation

Problem

User credentials must never leak across federation boundaries. The federation module allows querying and commanding across instances, and we need to ensure credential data is explicitly excluded from all federation pathways.

Requirements

  1. Add explicit deny-list in federation QueryService to prevent UserCredential entities from appearing in federated query results
  2. Verify existing federation message payloads never include credential data
  3. Ensure federation CommandService cannot create/modify/delete credentials on remote instances
  4. Document federation credential isolation guarantees

Implementation Notes

  • QueryService at apps/api/src/federation/query.service.ts handles incoming federated queries
  • CommandService at apps/api/src/federation/command.service.ts handles incoming federated commands
  • FederationMessage.payload must never contain credential values
  • Transit key isolation: mosaic-credentials key is separate from mosaic-federation key
  • Each federated instance runs its own OpenBao (or falls back to its own ENCRYPTION_KEY)
  • Even if a Transit key were compromised on one instance, it cannot decrypt credentials from another

Files

  • apps/api/src/federation/query.service.ts (modify - deny-list UserCredential entity type)
  • apps/api/src/federation/command.service.ts (modify - deny-list credential operations)
  • apps/api/src/federation/federation.service.ts (verify - no credential data in federation messages)

Acceptance Criteria

  • Federated queries cannot return UserCredential data
  • Federated commands cannot create/modify/delete credentials
  • No credential plaintext in federation message payloads
  • Integration test: federated query for credentials returns empty/denied
  • Documentation of isolation guarantees

Dependencies

  • Depends on: UserCredential model (Phase 3a)
  • Depends on: Credential CRUD API (Phase 3b)

Refs #346

## Phase 5b - Federation Credential Isolation ### Problem User credentials must never leak across federation boundaries. The federation module allows querying and commanding across instances, and we need to ensure credential data is explicitly excluded from all federation pathways. ### Requirements 1. Add explicit deny-list in federation QueryService to prevent UserCredential entities from appearing in federated query results 2. Verify existing federation message payloads never include credential data 3. Ensure federation CommandService cannot create/modify/delete credentials on remote instances 4. Document federation credential isolation guarantees ### Implementation Notes - QueryService at apps/api/src/federation/query.service.ts handles incoming federated queries - CommandService at apps/api/src/federation/command.service.ts handles incoming federated commands - FederationMessage.payload must never contain credential values - Transit key isolation: mosaic-credentials key is separate from mosaic-federation key - Each federated instance runs its own OpenBao (or falls back to its own ENCRYPTION_KEY) - Even if a Transit key were compromised on one instance, it cannot decrypt credentials from another ### Files - apps/api/src/federation/query.service.ts (modify - deny-list UserCredential entity type) - apps/api/src/federation/command.service.ts (modify - deny-list credential operations) - apps/api/src/federation/federation.service.ts (verify - no credential data in federation messages) ### Acceptance Criteria - [ ] Federated queries cannot return UserCredential data - [ ] Federated commands cannot create/modify/delete credentials - [ ] No credential plaintext in federation message payloads - [ ] Integration test: federated query for credentials returns empty/denied - [ ] Documentation of isolation guarantees ### Dependencies - Depends on: UserCredential model (Phase 3a) - Depends on: Credential CRUD API (Phase 3b) Refs #346
jason.woltje added this to the M9-CredentialSecurity (0.0.9) milestone 2026-02-07 17:12:42 +00:00
jason.woltje added the securityapiapip1 labels 2026-02-07 17:12:43 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaic/stack#360