| Version | Supported |
|---|---|
| 1.x | ✅ Active security fixes |
| < 1.0 | ❌ Not supported |
Do NOT open a public GitHub issue for security vulnerabilities.
- Email: Send a detailed report to the maintainers via the contact listed on the GitHub repository
- GitHub Private Advisory: Use GitHub Security Advisories to report privately
Please include as much of the following as possible:
- Type of vulnerability (e.g., cryptographic weakness, key exposure, RCE)
- Affected component (e.g.,
KeyVaultService,NodeCryptoAdapter, specific endpoint) - Step-by-step reproduction instructions
- Proof of concept code (if applicable)
- Potential impact assessment
- Your suggested fix (if any)
| Milestone | Target |
|---|---|
| Acknowledgment of report | 48 hours |
| Initial severity assessment | 5 business days |
| Fix development + testing | 30–90 days depending on severity |
| Public disclosure | After fix is released (coordinated) |
We follow coordinated vulnerability disclosure:
- Reporter submits vulnerability privately
- We acknowledge and assess severity
- We develop and test a fix
- We release the fix
- We publicly acknowledge the reporter (unless they prefer anonymity)
- Full public disclosure after users have had time to update
We ask that you:
- Allow us reasonable time to fix before public disclosure
- Not exploit the vulnerability beyond what is necessary to demonstrate it
- Not access or modify other users' data
Key security design decisions are documented in:
docs/threat-model.md— STRIDE threat modeldocs/cryptography.md— Cryptographic algorithm justificationsSECURITY-AUDIT.md— Internal security audit checklist
The following limitations are by design and documented as out-of-scope:
- No TLS: api-crypt does not implement TLS — use a reverse proxy (nginx, Traefik, Caddy)
- Authorization Scopes / Multi-tenancy: api-crypt uses a single shared
API_KEYand does not implement fine-grained scopes or tenant isolation. You must enforce client scopes, RBAC, and mTLS at your API Gateway layer before traffic reaches this container. - Single-instance: Multiple instances sharing the same
keys.db.jsonis not supported - No HSM support: Private keys are encrypted with a software master key, not a hardware security module
- Passphrase not stored: Keys created with a passphrase require it on each operation — the server never stores it
This repository runs automated security checks on every push:
- CodeQL: Static analysis for JavaScript/TypeScript vulnerabilities
- TruffleHog: Secret detection in commit history
- npm audit: Dependency vulnerability scanning
- SBOM: Software Bill of Materials generated per release
See .github/workflows/security.yml for details.