We actively support the following versions with security updates:
| Version | Supported |
|---|---|
| 0.1.x | ✅ |
| < 0.1 | ❌ |
DO NOT open public GitHub issues for security vulnerabilities.
- Email: bh@baekho.io
- Subject:
[SECURITY] secret-wallet vulnerability - Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact (credential leakage, privilege escalation, etc.)
- Affected versions
- Suggested fix (if available)
- Initial response: Within 48 hours
- Triage: Within 5 business days
- Fix timeline: Depends on severity
- Critical: 1-7 days
- High: 7-14 days
- Medium: 14-30 days
- Low: Best effort
- Embargo period: 90 days (or until patch is released)
- Credit: Security researchers will be acknowledged in CHANGELOG
- CVE assignment: For critical vulnerabilities affecting multiple users
Secret Wallet is designed with Defense in Depth:
- No secrets in configuration files
- No secrets in environment variables (parent process)
- No secrets in logs or error messages
- Secure Enclave (T2/M1/M2 chips)
- Biometric authentication (TouchID/FaceID)
- Keychain encryption (AES-256-GCM)
- Credentials only in child process memory
- Parent process never has secrets in environment
- Ephemeral credential lifecycle
- Keychain ACLs (biometric policy)
- OS-level permission enforcement
- User consent required for access
| Threat | Mitigation |
|---|---|
| Plaintext credential theft | Keychain encryption |
| Accidental git commit | No credentials in filesystem |
| Process memory dump | Process isolation + ephemeral env vars |
| Malware keylogging | Hardware Secure Enclave (biometric) |
| Physical device theft | Biometric authentication required |
| Backup exposure | Keychain excluded from iCloud by default |
| Supply chain attack | Swift Package Manager lock file |
- Physical coercion (forcing user to unlock with biometrics)
- Compromised macOS kernel (assumes trusted OS)
- Hardware implants (assumes trusted hardware)
- Social engineering (user tricked into revealing secrets)
Issue: If an attacker steals a device and can unlock biometrics (e.g., forced fingerprint), they can access secrets.
Mitigation:
- User should enable FileVault (full-disk encryption)
- Lost Mode should be activated via Find My
- Secrets should be rotated if device is compromised
Issue: Any process running as the same user can attempt Keychain access.
Mitigation:
- Biometric-protected secrets require TouchID per access
- Keychain Access.app can be used to review ACLs
- macOS sandboxing limits cross-app access
Issue: Secret names are stored in ~/.secret-wallet/metadata.json in plaintext.
Mitigation:
- Metadata reveals only names (e.g., "openai-key"), not values
- File permissions:
chmod 600(user-only read/write) - Future: Encrypt metadata with device-specific key
Issue: Attacker with root access can dump child process memory and extract credentials.
Mitigation:
- Requires root or debugger attachment (needs SIP bypass)
- Credentials exist only during child process lifetime
- Future: Use
mlock()to prevent swapping to disk
Before submitting a PR with security implications:
- No hardcoded secrets (API keys, passwords, tokens)
- Input validation (sanitize user input, prevent injection)
- Keychain ACLs (use biometric policy where appropriate)
- Error handling (no secrets in error messages or logs)
- Process isolation (credentials only in child process)
- Audit logging (log access patterns, not values)
- Dependency review (check Swift packages for vulnerabilities)
| Date | Auditor | Scope | Findings |
|---|---|---|---|
| 2026-02-02 | Self (Baekho Lim) | Initial design review | See docs/THREAT_MODEL.md |
External audits welcome. Contact bh@baekho.io.
Primary: bh@baekho.io PGP Key: (Coming soon)
For non-security issues, use GitHub Issues.
Last updated: 2026-02-02