This release includes 3 security fixes for security teams reviewing exposed deployments.
Topics
+13 more
Affected surfaces
Summary
AI summaryUnified config file simplifies deployment and webhook server now requires HMAC secret.
Full changelog
Enterprise + local foundation: one config knob, pluggable storage, hardened webhooks, real auth gating
The first of two enterprise-hardening releases. Everything here is local-first by
default (zero new dependencies, behavior byte-identical when you set nothing);
enterprise backends and controls are strictly opt-in. Council 3/3 after a
two-round adversarial review that caught and closed real defects before ship.
Features
- Unified config file (#691):
loki start --config <file>(aliases--vars,
--env-file) loads one.env/ YAML / JSON file, so Docker / compose / k8s /
Vault operators inject a single mounted file instead of a wall ofLOKI_*env
vars. Locked precedence: CLI flags >--config> ambient env > auto
.loki/config.yaml> settings.json > defaults. Secrets are referenced via
${VAR}(resolved by bash indirect expansion, never eval), never inlined; a
literal secret value warns on load and failsloki config validate. New
loki config example|schema|validate, all generated from one canonical key map
(the three config-mapping tables that used to drift are now one). - Pluggable storage adapter (
lokistore/): one local-first interface every
durability feature binds to. Default is the same.loki/files you already
use (zero new deps; importing it loads no cloud SDK). Opt in tos3/gcs/
azure-blob(lazy-imported only when selected) viastorage.backend. - Object-store checkpoint sync (opt-in): with a non-local
storage.backend, a
build's checkpoints sync off-cluster and a pod rescheduled onto a fresh node
hydrates and resumes. The Helm worker sets a stableLOKI_RUN_IDso keys match
across pod restarts. - Multi-build state isolation: per-build state is namespaced by
LOKI_SESSION_ID,
so two builds in one pod no longer clobber each other (legacy single-build path
unchanged when unset). - Post-release smoke CI: a new workflow installs and runs the PUBLISHED npm /
Docker / Homebrew / SDK artifacts after each release and fails loud, replacing
the previous manual post-release check.
Security and hardening
- Webhook trigger server rewrite: refuses to run (or accepts) any webhook when no
HMAC secret is configured (was accept-all), constant-time signature compare,
threaded with a bounded worker queue (no listener blocking, load-shed on
storm), dispatchesloki start(not the deprecatedloki run), reaps children
(no zombies), dedups redelivered webhooks, and rejects a malformed
owner/reposo a webhook payload can never inject a CLI flag into the build. - Two unauthenticated WebSocket paths closed: the
/labsub-app and the native
/ws/collabendpoint were reachable without auth when enterprise auth was on
(the collab path could mutate shared state); both now require a valid scoped
token (close 1008 otherwise) and are pass-through when auth is off. - Config-value validator fixed:
validate_yaml_valueused a regex bracket class
that matched nothing and silently accepted shell metacharacters; it now
rejects$(...), backticks, pipes, etc. - LokiStore path-traversal read closed: a leaf symlink inside the store base that
pointed outside it was followed on read; reads now realpath-check the full
target. - Dashboard RBAC consistency: seven
/api/memory/*reads and the/api/collab/*
routes that were missing scope checks now match their gated siblings.
Honest scope (NOT overclaimed)
LOKI_ALLOWED_PATHSis PARTIAL enforcement: it restricts the sandbox custom
--mounthost path and an operator-supplied sandbox command. It does NOT
restrict provider-driven agent file writes (those go through the provider CLI,
not run.sh; the container is their containment). Docs say exactly this.- Object-store sync covers the
.lokicheckpoint state; the gitrefs/loki/cp/*
worktree snapshots are not synced. SSO/SAML, SCIM, app-level/tenant RBAC, and
SOC2 remain roadmap, not shipped.
Every claim above maps to enforced, tested behavior: full local test suite green
(1376 pytest + the new bash suites), local-ci 85/0, bash/Bun parity intact.
Breaking Changes
- Webhook trigger server now refuses to run without an HMAC secret configured.
Security Fixes
- Webhook server now performs constant‑time HMAC verification and rejects unauthenticated payloads (previously accept‑all).
- LokiStore path‑traversal read vulnerability closed; reads now realpath‑check the full target.
- Config-value validator now rejects shell metacharacters (`$(...)`, backticks, pipes) that were previously silently accepted.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About Loki Mode
Multi-agent autonomous SDLC framework. Spec to deployed app. PRD, GitHub issue, OpenAPI/JSON/YAML, or one-line brief. 5 AI providers, 11 quality gates.
Related context
Related tools
Beta — feedback welcome: [email protected]