docs(p0): compact MVP spec for Android Oboe focus
This commit is contained in:
@@ -1,154 +0,0 @@
|
||||
# Sec Threat Model V0.9.2.2.1
|
||||
|
||||
**Document type:** Security / Threat Model
|
||||
**Version:** 0.9.2
|
||||
**Status:** Baseline Candidate
|
||||
**Language:** English
|
||||
**Product:** Chanora
|
||||
**Repo path:** `docs/security/threat-model.md` ---
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This document identifies Chanora security assets, trust boundaries, attack surfaces, threat scenarios, mitigations, and residual risks.
|
||||
|
||||
This document must be completed and approved before public or external release.
|
||||
|
||||
## 2. Security Scope
|
||||
|
||||
In scope:
|
||||
|
||||
- Identity private keys and identity material
|
||||
- Server passwords
|
||||
- Saved bookmarks and recent server entries
|
||||
- Local database
|
||||
- Secure storage
|
||||
- Diagnostic logs and export bundles
|
||||
- Protocol input from compatible servers
|
||||
- Text messages, channel names, server names, and nicknames
|
||||
- Audio device access and microphone permission
|
||||
- Platform permission flows
|
||||
- Dependency and supply-chain risks
|
||||
- Flutter/Rust bridge boundary
|
||||
- Local file export/import surfaces
|
||||
|
||||
Out of scope unless later added:
|
||||
|
||||
- Cloud account sync
|
||||
- Server hosting infrastructure operated by Chanora
|
||||
- Telemetry backend
|
||||
- Crash reporting backend
|
||||
- Payment processing
|
||||
|
||||
## 3. Assets
|
||||
|
||||
| Asset ID | Asset | Sensitivity | Required protection |
|
||||
|---|---|---|---|
|
||||
| SEC-ASSET-001 | Identity private key / identity secret | Critical | Store only in platform secure storage; never log. |
|
||||
| SEC-ASSET-002 | Server password | Critical | Store only in platform secure storage; redact from diagnostics. |
|
||||
| SEC-ASSET-003 | Server address / bookmark | Sensitive | Store locally; redact or minimize in diagnostic export. |
|
||||
| SEC-ASSET-004 | Nickname / user identity display name | Personal / user-provided | Preserve Unicode; avoid unnecessary upload. |
|
||||
| SEC-ASSET-005 | Channel names and server names | Potentially sensitive | Treat as user/server content; redact where configured. |
|
||||
| SEC-ASSET-006 | Chat text | Sensitive user/server content | Do not upload automatically; redact from diagnostics by default unless user explicitly includes. |
|
||||
| SEC-ASSET-007 | Diagnostic bundle | Sensitive aggregate | Redact secrets; user-initiated export only. |
|
||||
| SEC-ASSET-008 | Local database | Sensitive | Protect via OS file permissions; avoid plaintext secrets. |
|
||||
| SEC-ASSET-009 | Logs | Sensitive | Redact secrets and avoid verbose sensitive content. |
|
||||
| SEC-ASSET-010 | Audio stream | Sensitive real-time data | Do not persist audio unless explicitly designed later. |
|
||||
| SEC-ASSET-011 | Dependency graph | Supply-chain-sensitive | Track licenses, vulnerabilities, and source integrity. |
|
||||
|
||||
## 4. Trust Boundaries
|
||||
|
||||
| Boundary ID | Boundary | Risk |
|
||||
|---|---|---|
|
||||
| TB-001 | User input to Flutter UI | Malformed or hostile input. |
|
||||
| TB-002 | Flutter to Rust bridge | DTO validation and error mapping required. |
|
||||
| TB-003 | Rust Core to protocol adapter | Protocol events and external inputs must be normalized. |
|
||||
| TB-004 | Protocol adapter to external compatible server | Untrusted network/server input. |
|
||||
| TB-005 | Rust/Flutter to platform secure storage | Platform-specific failure modes. |
|
||||
| TB-006 | App to local database/file system | File tampering, data leakage, permissions. |
|
||||
| TB-007 | Diagnostics export to user-controlled destination | Sensitive data leakage. |
|
||||
| TB-008 | Audio device boundary | Permission and device-route privacy. |
|
||||
| TB-009 | Dependency supply chain | Vulnerable or malicious dependencies. |
|
||||
|
||||
## 5. Attack Surfaces
|
||||
|
||||
| Surface ID | Attack surface | Example threats |
|
||||
|---|---|---|
|
||||
| AS-001 | Connection form | Credential capture in logs, malformed host input. |
|
||||
| AS-002 | Protocol input | Malformed packets, hostile names/messages, state desync. |
|
||||
| AS-003 | Bridge DTOs | Invalid commands, unexpected event payloads. |
|
||||
| AS-004 | Local database | Tampering, unauthorized read. |
|
||||
| AS-005 | Secure storage | Platform fallback failure or incorrect secret classification. |
|
||||
| AS-006 | Diagnostics export | Secret leakage, excessive server/user information. |
|
||||
| AS-007 | Logs | Password or identity leakage. |
|
||||
| AS-008 | Audio permissions | Unclear microphone use or unintended capture. |
|
||||
| AS-009 | Dependency ecosystem | Vulnerable packages or license incompatibility. |
|
||||
| AS-010 | Store/package distribution | Tampered artifacts or signing issues. |
|
||||
|
||||
## 6. Threat Scenarios and Mitigations
|
||||
|
||||
| Threat ID | Scenario | Impact | Mitigation | Verification |
|
||||
|---|---|---|---|---|
|
||||
| THR-001 | Server password is logged during connection failure. | Credential leakage. | Redaction filters; never log secret fields. | Diagnostic redaction audit. |
|
||||
| THR-002 | Identity private key is stored in local DB. | Identity compromise. | Secure storage classification and audit. | Secure storage audit. |
|
||||
| THR-003 | Diagnostic export includes server password or identity secret. | Credential leakage. | Export redaction and denylist/allowlist design. | Redaction audit. |
|
||||
| THR-004 | Hostile server sends malformed Unicode or extremely long names. | Crash, UI corruption, log injection. | Boundary validation, length limits, safe rendering. | Protocol fuzz/sanitization tests. |
|
||||
| THR-005 | Protocol event causes inconsistent UI state. | Wrong user/channel state. | State reducer validation and snapshot recovery. | SWE.5/SWE.6 tests. |
|
||||
| THR-006 | Dependency has known critical vulnerability. | Compromise or exploit risk. | Dependency scan and release gate. | Supply-chain report. |
|
||||
| THR-007 | OSS license is incompatible with release model. | Legal/compliance risk. | License inventory and legal review. | Dependency/license report. |
|
||||
| THR-008 | Microphone permission is unclear to user. | Privacy risk. | Permission explanation and privacy policy. | Privacy/legal review. |
|
||||
| THR-009 | Logs contain private channel or nickname data by default. | Privacy leakage. | Minimize logs; redact or hash sensitive content. | Diagnostics audit. |
|
||||
| THR-010 | Build artifact is not traceable to commit. | Supply-chain/release integrity risk. | Release record with commit, tag, build number, hashes. | Go/No-Go record. |
|
||||
|
||||
## 7. Residual Risks
|
||||
|
||||
| Risk ID | Risk | Disposition |
|
||||
|---|---|---|
|
||||
| RISK-001 | External compatible servers may expose untrusted content. | Accept with boundary validation and safe rendering. |
|
||||
| RISK-002 | Platform secure storage behavior differs by OS/version. | Mitigate with per-platform audit. |
|
||||
| RISK-003 | Dependency vulnerabilities may appear after release. | Mitigate with recurring scan and patch policy. |
|
||||
| RISK-004 | Diagnostic bundles may contain contextual sensitive data even after redaction. | Mitigate with user confirmation and privacy notice. |
|
||||
|
||||
## 8. Approval
|
||||
|
||||
| Role | Name | Decision | Date |
|
||||
|---|---|---|---|
|
||||
| Security Reviewer | TBD | Pending | TBD |
|
||||
| Software Architect | TBD | Pending | TBD |
|
||||
| Platform Owner | TBD | Pending | TBD |
|
||||
| QA / Verification Owner | TBD | Pending | TBD |
|
||||
|
||||
## 9. Change History
|
||||
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.0 | 2026-05-14 | Initial threat model template and baseline candidate. |
|
||||
|
||||
|
||||
## Baseline Candidate 0.9.1 Update
|
||||
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.1 | 2026-05-14 | Updated baseline after product decision closure: Apple App Store SDK gate uses Xcode 26+ and iOS 26 / iPadOS 26 SDK+ since 2026-04-28, platform baselines and decision traceability propagated across the document set. |
|
||||
|
||||
|
||||
## Baseline Candidate 0.9.2 Update
|
||||
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.2 | 2026-05-14 | Corrected Apple App Store Connect upload gate to 2026-04-28 and checked full-package naming, references, and coverage. |
|
||||
|
||||
|
||||
## Desktop Push-to-Talk Threat Addendum (Baseline Candidate 0.9.3)
|
||||
|
||||
| ID | Threat | Asset | Likelihood | Impact | Mitigation |
|
||||
|---|---|---|---|---|---|
|
||||
| THREAT-PTT-001 | A desktop PTT backend logs raw key codes or scan codes to the in-memory log sink. | User keystroke privacy | Medium (without controls) | High | `PttSanitizer` per SAD-077 / SDD-090 drops records with banned field names before they reach any sink; backend implementations call `AudioTransmitGate::set` only and never log key data. |
|
||||
| THREAT-PTT-002 | A desktop PTT backend leaks raw key codes through the user-initiated diagnostic export. | User keystroke privacy | Medium | High | Diagnostic export carries only the capability level, backend identifier, and bound input class per SRS-202 / DEC-027. |
|
||||
| THREAT-PTT-003 | The application advertises Global PTT support on a platform / permission / environment where it does not actually work. | Honest release claim | Medium | Medium (UX regression, support load) | `PttCapabilityLevel` is published from the *active* backend only; the UI capability badge reflects runtime measurement (SRS-196 / SysRS-298). Release readiness record carries per-platform evidence per SysDes-148. |
|
||||
| THREAT-PTT-004 | A missed key-up event leaves `transmit_active` true after the user releases the binding (for example because the OS suppressed the event while Chanora was minimised). | Voice transmission integrity, user expectation of mute | Medium | Medium | `MissedKeyUpWatchdog` per SAD-079 / SDD-092 self-clears `transmit_active` after a configured timeout (default 30 s); the watchdog timeout is a P0 requirement per DEC-028. |
|
||||
| THREAT-PTT-005 | A malicious or buggy third-party application registers a global hook that intercepts Chanora's binding and forces PTT on. | Voice transmission integrity | Low | Medium (user can mitigate by switching binding) | Out of MVP scope; documented as a deferred risk. Chanora reports the active backend identifier so a support investigation can correlate. |
|
||||
| THREAT-PTT-006 | macOS Input-Monitoring / Accessibility permission is revoked at runtime; the application continues to claim Global PTT. | Honest capability state | Low | Medium | `MacOSEventTapBackend` re-queries the permission state on each tap-disabled callback and downgrades to `L0Focused` via `BridgeEvent::PttCapability`. |
|
||||
|
||||
| Version | Date | Description |
|
||||
|---|---|---|
|
||||
| 0.9.3 | 2026-05-15 | Added desktop PTT threats THREAT-PTT-001..006: raw key logging, key data in diagnostic export, capability over-claim, missed key-up, third-party hook interference, and macOS permission revocation. |
|
||||
Reference in New Issue
Block a user