How Hubolt handles secrets, authentication, and untrusted input, plus how to report issues.
Related: Configuration | API & Integrations | Deployment
- Secret files are git-ignored:
.env,.env.*(except.env.example),*.pem,*.key,*.p12,*.pfx,*.keystore. Never commit real secrets. - On a server, keep secrets in
/opt/hubolt/.envwithchmod 600. - In CI, use the platform secret store (GitHub Actions secrets, Bitbucket secured
variables). The Bitbucket pipeline holds only
DEPLOY_USER/DEPLOY_HOSTand an SSH key - no application secrets. - Provider credentials stored in the database (gateway) are encrypted at rest with
CREDENTIAL_MASTER_KEY(seesrc/server/services/credential-manager.ts). Generate it once withopenssl rand -base64 32and keep it stable; rotating it invalidates stored credentials.
- Server API uses bearer API keys:
Authorization: Bearer <api-key>(src/server/middleware/auth.ts). - API keys are stored as hashes only (
hashApiKey); the plaintext is shown once at creation and cannot be recovered. - Keys have a role:
adminorviewer. State-changing routes require admin viarequireAdmin(HTTP 403 otherwise). - Keys can expire (
expiresAt); expired keys are rejected (HTTP 401). - Webhooks (
POST /webhooks/github) are authenticated by signature usingGITHUB_APP_WEBHOOK_SECRET, not by an API key.
- The server registers
@fastify/helmetfor security headers. - CORS is restricted: disabled in production unless
CORS_ORIGINis set; defaults tohttp://localhost:3000in development. - The app binds to
127.0.0.1by default. For internet exposure, put it behind a reverse proxy with TLS (seedeploy/README.md).
- Reviewed code, diffs, comments, and repository files are treated as untrusted data. Prompts fence untrusted content so it cannot override review instructions.
- Secret redaction runs before prompt construction
(
src/core/redact.ts);privacy.redactSecretscontrols it in.hubolt.yml. - External request bodies are validated with zod before use.
- Hubolt suggests fixes for human review; it does not silently apply patches.
| Setting | Why it matters |
|---|---|
HOST=0.0.0.0 |
Exposes the server beyond localhost - use a firewall/TLS proxy. |
CORS_ORIGIN |
Too-broad an origin weakens browser protections. |
CREDENTIAL_MASTER_KEY |
Protects stored provider credentials; treat as a top secret. |
privacy.allowExternalModels |
Controls whether code is sent to hosted models. |
| GitHub App keys | GITHUB_APP_PRIVATE_KEY grants repo access - never commit. |
There is no committed SECURITY.md or formal disclosure process in this
repository (needs maintainer confirmation). Until one exists, report privately to
the maintainer rather than opening a public issue with exploit details. General
issues: https://github.com/m-rithik/hubolt/issues