- HTTP transport users must upgrade immediately; client code relying on shared session state across HTTP sessions must be refactored to use per‑session instances.
- Call `UsageTracker.setSessionSource()` to wire `activeSessions` correctly for STDIO vs. HTTP transports; in HTTP mode it will report 0 by design.
- Each HTTP session now receives its own `SessionStore` instance; conversation history, listings, and deletions are scoped per-session.
- `SessionStore.getInstance()` and `SessionStore.resetInstance()` removed; construct instances with `new SessionStore()` and pass explicitly to tool registration functions.
- CVE pending: Cross-session data exposure in HTTP transport fixed by isolating each HTTP session's `SessionStore` to prevent unauthorized access to other clients' conversation history and session enumeration/deletion capabilities.
- Added integration test (`src/transport-isolation.test.ts`) verifying per-HTTP‑session store isolation.
- Added unit tests confirming independent `SessionStore` instances have no cross-store effects on `clear`, `delete`, or `list` operations.
Full changelog
Security
Cross-session data exposure in HTTP transport (high severity). The SessionStore was a process-wide singleton shared across all connected HTTP clients. In HTTP transport mode, any client that provided another client's session_id to deepseek_chat would read that client's conversation history. The deepseek_sessions tool compounded this by letting any client enumerate all active session IDs (list), delete any session (delete), or wipe every tenant's sessions at once (clear).
STDIO transport was unaffected — each STDIO client runs its own server process, so there was no shared state to leak.
Full advisory and CVE coordination pending.
Changed
- BREAKING (HTTP transport only). Each HTTP session now gets an isolated
SessionStoreinstance. Conversation history, session listings, and session deletion are scoped to the HTTP session that created them. Clients on the same server no longer share session state. SessionStoreis no longer a singleton.SessionStore.getInstance()andSessionStore.resetInstance()have been removed. Construct instances withnew SessionStore()and pass them explicitly toregisterChatTool,registerSessionsTool, andregisterAllTools.UsageTracker.getStats().activeSessionsis wired to the STDIO store viaUsageTracker.setSessionSource(). In HTTP transport it reports0by design — a process-wide count across isolated stores would be both meaningless and a minor cross-tenant information leak.
Added
SessionStoreisolation tests: independent instances, no shared state, no cross-store effects onclear/delete/list.- HTTP transport integration test (
src/transport-isolation.test.ts) proving eachserverFactoryinvocation produces a fresh store and that user-suppliedsession_idcollisions across HTTP sessions do not merge data.
Upgrade
npm install @arikusi/[email protected]
Users on STDIO transport: no action needed beyond the upgrade.
Users on HTTP transport: upgrade immediately. Session data is now correctly scoped per HTTP session — if your client relied on cross-client session sharing, that behaviour was the vulnerability and must be reworked.