SECURITY.md
Rama main · réplica de lectura del repositorio original.
# Security Policy
## Supported Versions
OpenVPM is currently in early development. Security fixes are applied to the latest version on `main`.
| Version | Supported |
|---------|-----------|
| latest (main) | ✅ |
## Reporting a Vulnerability
**Please do not report security vulnerabilities through public GitHub issues.**
If you discover a security vulnerability, please report it by emailing **security@openvpm.com** with `[SECURITY]` in the subject line. We will acknowledge your report within 48 hours and provide a resolution timeline.
When reporting, please include:
- A description of the vulnerability and its potential impact
- Steps to reproduce the issue
- Any proof-of-concept code (if applicable)
We follow a 90-day disclosure timeline: we ask that you give us 90 days to address the vulnerability before public disclosure. We will credit you in the fix unless you prefer to remain anonymous.
## Security Considerations for Self-Hosters
If you deploy OpenVPM on your own infrastructure:
- Generate a strong `NEXTAUTH_SECRET` using `openssl rand -base64 32`. Production refuses to sign anyone in with a secret published in this repository or shorter than 32 characters. If you set `PORTAL_SESSION_SECRET`, the same rule applies.
- Never expose your PostgreSQL database or MinIO publicly — keep them in a private network (the bundled Docker Compose file publishes them on `127.0.0.1` only)
- Use HTTPS in production — do not serve patient data over HTTP
- Rotate API keys and database credentials regularly
- Review the audit log (`audit_log` table) for unexpected activity
- Keep dependencies up to date (`pnpm update`)
## Known Security Properties
- Passwords are hashed with bcrypt using the repository's centrally configured cost
- All dashboard routes require an authenticated session
- Multi-tenant isolation combines tenant-scoped application queries with PostgreSQL row-level security
- Role-based access control includes Admin, Veterinarian, Technician, Front Desk, and read-only Viewer roles
- Security headers are set on all responses (X-Frame-Options, X-Content-Type-Options, etc.)
- Controlled substance logs are append-only with witness requirements