FossilRepo
Security Policy
Reporting a Vulnerability
If you discover a security vulnerability in Fossilrepo, please report it responsibly.
Do not open a public issue.
Email [email protected] with:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
We will acknowledge your report within 48 hours and aim to release a fix within 7 days for critical issues.
Supported Versions
| Version | Supported |
|---|---|
| latest | Yes |
Security Model
Authentication
- Session-based authentication with httpOnly, secure cookies
- CSRF protection on all forms (HTMX includes token via
htmx:configRequest) - Rate limiting on login (10 attempts/minute per IP)
- Password validation enforced (Django's built-in validators)
Authorization
- Group-based permissions via
Penum (core/permissions.py) - Project-level RBAC: read, write, admin roles via team membership
- Project visibility: public (anonymous read), internal (authenticated), private (team members only)
- All views enforce permission checks before data access
Data Protection
- SSH keys and OAuth tokens encrypted at rest (Fernet/AES-128-CBC, keyed from
SECRET_KEY) - No plaintext credentials stored in the database
- Fossil sync uses
--localauthonly for authenticated users with write access - Anonymous users get pull-only access on public repos (no
--localauth)
Deployment
When deploying Fossilrepo in production:
- Set a strong, unique
DJANGO_SECRET_KEY(the app refuses to start without one whenDEBUG=False) - Change all default database credentials
- Enable HTTPS (
SECURE_SSL_REDIRECT,SESSION_COOKIE_SECURE,CSRF_COOKIE_SECUREare automatic whenDEBUG=False) - Set
DJANGO_ALLOWED_HOSTSto your domain only - Set
CORS_ALLOWED_ORIGINSandCSRF_TRUSTED_ORIGINSto your domain - Review Constance settings in Django admin (OAuth secrets, S3 credentials)
- Use a reverse proxy (Caddy/nginx) for SSL termination
- Keep the Fossil binary updated (compiled from source in the Docker image)