CVE-2026-77366 Security Alert: CRITICAL Vulnerability

Urgent: CVE-2026-77366 requires immediate attention.

· 6 min read

Executive Summary

CVE-2026-77366 is a critical authorization bypass in npm obsidian-tc with a CVSS 9.9 score. The flaw lets a caller use a valid token to access any configured vault by supplying input.vault, because dispatch did not verify that the requested vault matched the caller’s bound vault (ctx.vaultId). In practice, this breaks tenant isolation across roughly 90 tool sites and can expose read, write, and delete access across vaults.

This is especially urgent for solo developers and small teams running shared services: even without known active exploitation, the impact is severe enough to treat as a production security incident. The fix is available in 1.3.1 and later.

Immediate Action

  • Upgrade immediately to obsidian-tc@1.3.1 or later. If you cannot patch right away, move to a single-vault-per-process model.
  • Stop sharing one service instance across tenants. Run each tenant on a separate process, container, or credential set until patched.
  • Rotate credentials for any environment where multiple vaults were reachable from one token.
  • Review logs for cross-vault access attempts, especially requests that include a vault different from the caller’s expected scope.
  • Temporarily disable or restrict the affected tool dispatch path if you cannot isolate tenants quickly.
  • Check for vendor updates and advisories here: vendor advisory / release notes.

Affected Versions

  • obsidian-tc versions before 1.3.1 are vulnerable.
  • The fix was developed on the v1.3.0 tag, but that tag was never published to npm.
  • Safe version: obsidian-tc@1.3.1 and later.
  • Vulnerable pattern: any deployment where a valid token can set input.vault and reach multiple vaults through one server process.

Resolution Guide

JavaScript / npm

npm install obsidian-tc@^1.3.1
# or
npm install obsidian-tc@latest

Yarn

yarn add obsidian-tc@^1.3.1

pnpm

pnpm add obsidian-tc@^1.3.1

Python / pip / pipx — if your stack vendors or wraps this service, update the wrapper package to the fixed release or rebuild against the patched dependency:

pip install --upgrade <your-wrapper-package>
pipx upgrade <your-tool>

Java / Maven / Gradle — if embedded via a service wrapper, bump the wrapper artifact to a release that includes obsidian-tc 1.3.1+:

# Maven (example placeholder)
mvn versions:use-latest-releases

# Gradle (example placeholder)
./gradlew dependencyUpdates

Linux package managers — if you deploy via OS packages or a container image, update the package/image to a build that includes the fix:

# Debian/Ubuntu
sudo apt-get update
sudo apt-get install --only-upgrade <package-name>

# RHEL/CentOS/Fedora
sudo yum update <package-name>
# or
sudo dnf upgrade <package-name>

Docker

docker pull <vendor/image>:1.3.1
# or rebuild from a patched base image
docker build --no-cache -t <your-image>:patched .

Config hardening until patched

# Run one vault per process/container
VAULT_ID=tenant-a node server.js

# Disable multi-tenant routing if your app supports it
MULTI_TENANT=false

# Restrict dispatch to a single configured vault
ALLOWED_VAULTS=tenant-a

Minimal code fix pattern — enforce vault binding before dispatching any tool action:

function dispatch(input, ctx) {
  if (input.vault !== ctx.vaultId) {
    throw new Error("vault mismatch");
  }

  // existing scope/ACL checks
  return handleRequest(input, ctx);
}

Detection & Verification

Check installed version

npm ls obsidian-tc
node -p "require('obsidian-tc/package.json').version"

Search lockfiles and manifests

grep -R "obsidian-tc" package.json package-lock.json yarn.lock pnpm-lock.yaml

Audit dependencies

npm audit
yarn audit
pnpm audit

Verify the fix is present by confirming the dispatch path rejects mismatched vaults. If you have source access, grep for the guard:

grep -R "input.vault === ctx.vaultId" .
grep -R "vault mismatch" .

Runtime test — send a request with a token bound to vault A and set input.vault to vault B. The patched service should deny the request with an authorization error.

Risk and Impact

This bug can let an attacker with any valid token cross tenant boundaries and access vaults they should never see. Because the flaw affects read, write, and delete operations, the blast radius includes data theft, tampering, and destructive changes across all configured vaults in a shared deployment.

For small teams, the biggest danger is silent cross-project exposure: one compromised credential or one over-permissioned integration can affect every tenant on the same process. Treat this as a high-priority patch-and-isolate issue even though it is not currently known to be exploited in the wild.

Keep reading