GitHub Advisoryadvisory · npm
GHSA-xc9g-j69q-37xw consciousness-explorer / sublinear-time-solver MCP export_state has an arbitrary file write
HIGH
Official page ↗
- Aliases
- CVE-2026-55609
- Ecosystem
- npm
- Packages
- consciousness-explorer, sublinear-time-solver
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
- Weaknesses
- CWE-73
- Reviewed
- 2026-08-25
Affected packages
• npm consciousness-explorer: < 1.1.2 → fixed in 1.1.2
• npm sublinear-time-solver: < 1.6.0 → fixed in 1.6.0
Description
Impact
An arbitrary file write vulnerability (CWE-73, External Control of File Name or Path) exists in the `consciousness-explorer` component of `sublinear-time-solver`. The MCP `export_state` (and `import_state`) tool accepted a user-supplied `filepath` argument and passed it directly to `fs.writeFileSync` / `fs.readFileSync` without constraining the destination or rejecting path traversal. An attacker able to invoke the MCP tool could write or overwrite any file accessible to the server process (e.g. `~/.ssh/authorized_keys`, application files), leading to integrity loss and potential service disruption.
The same sink class was present in the main solver MCP server (`saveVectorToFile` / `loadVectorFromFile`).
Affected versions
• `consciousness-explorer` < 1.1.2
• `sublinear-time-solver` < 1.6.0
• `sublinear` (crates.io) < 0.2.0
Patches
• `[email protected]`
• `[email protected]`
• `[email protected]`
State/vector files are now confined to a dedicated directory (overridable via `$CONSCIOUSNESS_EXPLORER_STATE_DIR` / `$SUBLINEAR_SOLVER_VECTOR_DIR`), a basename-only contract is enforced (rejecting separators, `..`, NUL/control chars, hidden files, and Windows reserved names), and files are opened with `O_NOFOLLOW | O_CLOEXEC` mode `0o600`. Covered by 14 regression tests in `tests/consciousness/safe-path.test.mjs`.
Breaking change: callers must now pass a basename, not an absolute path.
Workarounds
Do not expose the MCP server to untrusted clients; restrict `export_state` to trusted local users; run the server under a low-privilege account with a restricted working directory.
Related
Alias · CVE (1)
- CVE-2026-55609 sublinear-time-solver is a Rust and WebAssembly library for solving asymmetric diagonally dominant systems in sublinear time. vulnerability
Weakness · CWE (1)
- CWE-73 External Control of File Name or Path weakness
References
- https://github.com/ruvnet/sublinear-time-solver/security/advisories/GHSA-xc9g-j69q-37xw web
- https://github.com/BruceJqs/public_exp/issues/32 web
- https://github.com/ruvnet/sublinear-time-solver/issues/19 web
- https://github.com/ruvnet/sublinear-time-solver/pull/20 web
- https://github.com/ruvnet/sublinear-time-solver/commit/a701296e363192be863e79d788fa268095e3d229 web
- https://github.com/ruvnet/sublinear-time-solver/commit/ea9a212b69e4449ec443fe088a7aec7546f70b4a web
- https://github.com/ruvnet/sublinear-time-solver package
- https://github.com/ruvnet/sublinear-time-solver/releases/tag/v1.6.0 web