This release includes 1 security fix for security teams reviewing exposed deployments.
Topics
+3 more
ReleasePort's take
Light signalRelease v0.11.1 patches two security regressions: it fixes an auth bypass via reverse‑proxy loopback and corrects misclassification of proxy requests as local.
Why it matters: Patch immediately to prevent public traffic from bypassing inspector/API authentication and being treated as the production user; adopt NEOTOMA_TRUST_PROD_LOOPBACK=1 if needed.
Summary
AI summaryFixes security regression that allowed public reverse‑proxy traffic to bypass auth and be treated as the local production user.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | High |
Fixes auth bypass when reverse‑proxy traffic on loopback is treated as local development Fixes auth bypass when reverse‑proxy traffic on loopback is treated as local development Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Security | Medium |
Root landing mode no longer misclassifies reverse-proxy requests as local by default Root landing mode no longer misclassifies reverse-proxy requests as local by default Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Security | Medium |
Production inspector/API auth bypass via reverse-proxy loopback now fixed with X-Forwarded-For checking Production inspector/API auth bypass via reverse-proxy loopback now fixed with X-Forwarded-For checking Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
NEOTOMA_TRUST_PROD_LOOPBACK=1 environment variable allows operators to trust production loopback requests NEOTOMA_TRUST_PROD_LOOPBACK=1 environment variable allows operators to trust production loopback requests Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Low |
Adds NEOTOMA_TRUST_PROD_LOOPBACK=1 env var to optionally trust production loopback traffic Adds NEOTOMA_TRUST_PROD_LOOPBACK=1 env var to optionally trust production loopback traffic Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Refactor | Low |
Introduces helper logic for loopback detection, forwarded‑hop parsing, and production checks in runtime paths Introduces helper logic for loopback detection, forwarded‑hop parsing, and production checks in runtime paths Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
| Other | Low |
Adds regression tests for forwarded public clients, production loopback rejection, and landing‑mode parity Adds regression tests for forwarded public clients, production loopback rejection, and landing‑mode parity Source: granite4.1:30b@2026-05-24-audit Confidence: low |
— |
Full changelog
Install
npm install -g [email protected]
| | |
|:--|:--|
| npm | https://www.npmjs.com/package/neotoma/v/0.11.1 |
| Compare | v0.11.0 → v0.11.1 — view diff |
v0.11.1 is a minimal security hotfix that closes the hosted Inspector/API auth bypass caused by production reverse-proxy loopback traffic being treated as local development traffic.
Highlights
- Close the production auth bypass behind reverse proxies.
src/actions.tsnow checksX-Forwarded-Forand fails closed in production instead of trusting loopback sockets by default. - Keep root landing behavior aligned with auth behavior.
src/services/root_landing/index.tsnow uses the same production-safe local-request classification so reverse-proxy traffic no longer falls into the wrong landing mode. - Ship focused regression coverage for the exploit path. The hotfix adds targeted tests for forwarded public clients, production loopback rejection, and landing-mode parity.
What changed for npm package users
CLI (neotoma, neotoma api start, …)
- No CLI surface changes are included in this hotfix.
Runtime / data layer
- Production local-request detection no longer trusts loopback sockets by default when the request is arriving through a reverse proxy.
- If
X-Forwarded-Foris present, every forwarded hop must also be loopback before the request is treated as local. - Production operators can still opt into trusting loopback-only production traffic with
NEOTOMA_TRUST_PROD_LOOPBACK=1, but the default now fails closed.
Shipped artifacts
- Runtime code changed in
src/actions.tsandsrc/services/root_landing/index.ts. - Regression coverage changed in
tests/integration/tunnel_auth.test.ts,tests/integration/root_landing.test.ts, andtests/unit/security_hardening.test.ts.
API surface & contracts
- No OpenAPI path or schema changes are included in this hotfix.
- Protected-route behavior changes operationally: unauthenticated public traffic that previously slipped through the local-dev shortcut is now rejected.
Behavior changes
- Hosted reverse-proxy traffic without bearer auth is no longer treated as the local production user.
- Production loopback requests now default to remote/untrusted behavior unless explicitly trusted.
- Root landing mode no longer classifies production reverse-proxy requests as
localby default.
Agent-facing instruction changes
- No agent-instruction changes ship in this hotfix.
Plugin / hooks / SDK changes
- No plugin, hook, or SDK changes ship in this hotfix.
Security hardening
- The local-development auth shortcut is now constrained so a public client cannot inherit it just because the app server sees a loopback socket from a reverse proxy.
- The root landing page mirrors the same hardening so deployment mode detection stays consistent with auth boundaries.
Docs site & CI / tooling
- No docs-site, CI workflow, or tooling changes ship in this hotfix.
Internal changes
- Added helper logic for loopback-address detection, forwarded-hop parsing, and production-environment checks in the affected runtime paths.
Fixes
- Fixed a security regression where public hosted Inspector/API traffic could be resolved as the local production user when a reverse proxy forwarded the request over a loopback socket.
Tests and validation
npx vitest run tests/integration/tunnel_auth.test.tsnpx vitest run tests/integration/root_landing.test.tsnpx vitest run tests/unit/security_hardening.test.tsnpm run build:server- Post-deploy
curlprobes against/meand/inspector/are required before marking the rollout complete.
Execute note
- This preview is rendered from
hotfix/v0.11.1-inspector-auth-bypassafter the hotfix commitff80d0ea1. Release execution still needs the version bump commit, final tag, GitHub Release, npm publish, deployment, and post-deploy protected-route probes.
Breaking changes
No breaking changes.
Commits (v0.11.0 → v0.11.1)
df63d598 chore(release): bump version to v0.11.156bd08fe docs(release): finalize v0.11.1 preview notesff80d0e1 fix(auth): prepare v0.11.1 inspector hotfix
Full compare: v0.11.0...v0.11.1
Security Fixes
- Fixed auth bypass where public hosted Inspector/API traffic could be resolved as the local production user when forwarded over a loopback socket via reverse proxy.
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 markmhendrickson/neotoma
Deterministic state layer for AI agents. Stores versioned entities (contacts, tasks, transactions, decisions) with immutable observations, full provenance, and schema-first extraction. Local-first SQLite, cross-client memory across Claude, Cursor, ChatGPT, and OpenClaw. Website
Related context
Related tools
Earlier breaking changes
- v0.12.1 Inspector build prepublish now exits non-zero if inspector submodule is missing, breaking ad-hoc npm pack runs without init.
- v0.12.0 Access policy source precedence: env > SchemaMetadata.guest_access_policy > config
- v0.12.0 Legacy feedback subsystem completely removed; issues subsystem is replacement
- v0.12.0 MCP submit_issue requires reporter_git_sha or reporter_app_version
Beta — feedback welcome: [email protected]