Skip to content

Security: kbd0011/biotech-gxp

Security

SECURITY.md

Security policy

Supported versions

Only the latest release on main receives security fixes. The project is a research-grade prototype, not a validated GMP system — see corporate_boundary/NON_PRODUCTION_BOUNDARY.md.

Reporting a vulnerability

Do not open a public GitHub issue.

If you have found a vulnerability, please email the maintainer directly at kbdev0011@gmail.com.

Include enough detail to reproduce — preferably a minimal proof of concept. We aim to acknowledge within 5 business days and ship a patch (or a disclosure plan) within 30.

Scope

Within scope:

  • Authentication / authorization bypass (src/gxp_copilot/api/auth.py, src/gxp_copilot/governance/rbac.py, apps/web/src/middleware.ts, apps/web/src/auth.ts).
  • JWT signature / replay / fixation issues.
  • SQL injection in the importers, repositories, or any audit/recover path.
  • Information disclosure via the audit log endpoint or the /auth/check-email enumeration surface.
  • CSRF on state-changing endpoints (POST /recover, /users admin CRUD, /auth/magic-link/*).
  • Unsafe defaults in Dockerfile.api, Dockerfile.web, or docker-compose.yml.

Out of scope:

  • Denial-of-service via large CSV imports (the importer is intended for trusted operator use; rate limiting is per-route on unauthenticated paths only).
  • Anything that requires the operator to set GXP_AUTH_ENABLED=1 without setting AUTH_SECRET. The middleware fails closed and logs loudly in that configuration; the configuration itself is the bug, not the runtime behaviour.
  • Bugs in the synthetic data — every CSV in data/synthetic/ is intentionally fictitious.

Known security considerations

  • JWT algorithm: HS256 with a shared AUTH_SECRET between frontend (NextAuth) and backend (PyJWT). Tokens are signed but not encrypted. Email + role claims are visible to anyone who intercepts a token.
  • Audit log is plaintext JSONL. If a deployment logs real patient/product data through the recovery path, the audit log inherits that sensitivity — protect the host accordingly.
  • Docker images are built without secrets. Operators must set AUTH_SECRET and OPENAI_API_KEY at runtime via env vars; never bake them in.

Responsible disclosure

We commit to:

  • Acknowledging your report within 5 business days.
  • Providing a public credit (or anonymous credit on request) in the release notes for the fix.
  • Not pursuing legal action against good-faith researchers.

There aren't any published security advisories