The master branch is the only supported version. We ship a continuous
release model — there are no long-lived release branches.
Please do not open a public GitHub issue for security reports.
Email security@resilland.com with:
- A clear description of the vulnerability
- Steps to reproduce (or a proof-of-concept)
- Affected endpoint / file paths if known
- Your name + affiliation (optional, but lets us credit you in the changelog)
We aim to:
- Acknowledge receipt within 3 business days
- Triage + classify within 7 business days
- Ship a fix on
masterwithin 14 days for critical issues, 30 days otherwise
You'll get a heads-up when a fix lands so you can confirm it from your side.
| In scope | Out of scope |
|---|---|
| Authentication bypass / privilege escalation | Self-hosted instances with non-default .env values |
API endpoints under /api/* and /v1/public/* |
Denial-of-service from a single IP |
| Encryption/storage of credentials in PostgreSQL/MinIO | UI/UX issues with no security impact |
| Multi-tenant isolation (org_id boundary) | Outdated dependencies with no known CVE in our usage |
MCP server (pip install resilland-intelligence-mcp) |
Spam from unauthenticated /api/policies reads |
If you run RESILAND Intelligence in production, please:
- Secrets — required before
APP_ENV=productionwill boot (seebackend/app/main.py::_validate_prod_secrets):APP_SECRET_KEY— Fernet AES key used to encrypt provider API keys at rest in Postgres. MUST be a stable, cryptographically-random value (python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"). A regenerated key invalidates every previously-stored ciphertext, so production refuses to boot with an empty one.POSTGRES_PASSWORDandMINIO_ROOT_PASSWORD— set these to strong values in.env. Production validator rejects theresiland_dev_2026placeholder and thechange_me/CHANGE_MEmarkers.RESILAND_AGENT_HMAC_SECRET— required only whenUSE_AGENT_PIPELINE=true. 32-byte random hex (python -c "import secrets; print(secrets.token_hex(32))"). Without it the backend refuses to start so the/api/agent/internal/*HMAC-protected endpoints never accept unsigned traffic.
- Authentication uses Firebase ID tokens verified by the Firebase Admin SDK on
the backend — there is no JWT secret of our own. Make sure
FIREBASE_PROJECT_ID+ the service-account JSON are set. - Network:
- Restrict the PostgreSQL port (5432) to the backend container only.
- Do not expose the MinIO API port (9000) publicly — proxy through nginx.
- Third-party key hardening:
- Restrict your Google Maps JS API key by HTTP referrer in Cloud Console.
- Restrict your Anthropic key by IP allow-list in the Anthropic console.
- Enable Firebase App Check (Recaptcha v3) on the frontend Firebase project.
- Debug surface: keep
APP_DEBUG=falsein prod — Swagger / ReDoc / OpenAPI endpoints are only served when debug is on, and the production validator refuses to boot with debug enabled. - Nginx: the sample
infra/nginx/resilland.com.confships HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy and Permissions-Policy — copy it rather than crafting your own if unsure.
We do not currently run a paid bounty programme. We're happy to credit
researchers in CHANGELOG.md and provide a confirmation letter for your CV.
None at this time.