CVE-2026-55156

MEDIUMPre-NVD 5.35.3
EchelonGraph scoreLOW confidence

This medium-severity CVE scores 5.3 under the CNA's CVSS (NVD's own analysis pending). EPSS exploit-prediction score not yet available (the EPSS model rescores nightly; freshly-published CVEs typically appear within 48 hours). GitHub Security Advisory data not yet ingested — confidence will rise once GHSA publishes (typical lag: hours to days for open-source ecosystem CVEs; never for infrastructure-only CVEs).

Triggered by: NVD CVSS baseline
Sources: cna:github_m
5.3EG
EchelonGraph verdictMonitorLow exploitation likelihood right now — keep watching.
  • Lower severity and no public exploit yet
CISA-KEV: Not listedEPSS PROB: CVSS: 5.3Exploit: None knownExposed: 0

No vendor fix yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for a patch.

Token Optimizer MCP: Unauthenticated Path Traversal in Dashboard Session Log API Endpoints

Unauthenticated Path Traversal in Dashboard Session Log API Endpoints

| Field | Value | | ---------------- | ----- | | Repository | ooples/token-optimizer-mcp | | Affected version | 5.0.1 (commit 8137147) | | Vulnerability | CWE-22 — Improper Limitation of a Pathname to a Restricted Directory | | Severity | Medium | | CVSS 3.1 | 5.3 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) |

Summary

The dashboard HTTP server in token-optimizer-mcp exposes /api/session-summary and /api/session-events with no authentication middleware — any network-accessible client can reach them without credentials. Both handlers concatenate the caller-supplied sessionId query parameter directly into a filesystem path via path.join, and Node.js normalizes .. segments at resolution time, allowing an unauthenticated attacker to read any .jsonl file reachable from the server's filesystem. Successful reproduction confirmed exfiltration of a .jsonl file located outside the intended hooksDataPath directory with a single unauthenticated HTTP GET request.

Affected Code

src/server/web-server.ts:73–88/api/session-summary: unsanitized sessionId interpolated into path.join then passed to fs.readFileSync

const hooksDataPath = getHooksDataPath();
    const jsonlFilePath = path.join(
      hooksDataPath,
      session-log-${sessionId}.jsonl
    );

if (!fs.existsSync(jsonlFilePath)) { return res.status(404).json({ success: false, error: JSONL log not found for session ${sessionId}, sessionId, }); }

// Parse JSONL file const jsonlContent = fs.readFileSync(jsonlFilePath, 'utf-8');

src/server/web-server.ts:297–311/api/session-events: identical unsanitized path.join + fs.readFileSync pattern

const hooksDataPath = getHooksDataPath();
    const jsonlFilePath = path.join(
      hooksDataPath,
      session-log-${sessionId}.jsonl
    );

if (!fs.existsSync(jsonlFilePath)) { return res.status(404).json({ success: false, error: JSONL log not found for session ${sessionId}, }); }

// Parse JSONL file const jsonlContent = fs.readFileSync(jsonlFilePath, 'utf-8');

req.query.sessionId flows unsanitized into path.join(hooksDataPath, \session-log-${sessionId}.jsonl\), which Node.js resolves by normalizing .. traversal sequences before the fs.readFileSync call.

Proof of Concept

Step 1 — Send traversal payload to /api/session-events with no credentials: server returns HTTP 200 with contents of a .jsonl file outside hooksDataPath — proves unauthenticated out-of-bounds file read.

curl -s "http://127.0.0.1:3100/api/session-events?sessionId=abc%2F..%2F..%2F..%2F..%2Ftraversal-target"

GET /api/session-events?sessionId=abc%2F..%2F..%2F..%2F..%2Ftraversal-target HTTP/1.1
Host: 127.0.0.1:3100
User-Agent: python-requests/2.x
Accept: */*

HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 186

{"success":true,"sessionId":"abc/../../../../traversal-target","total":1,"offset":0,"limit":100,"events":[{"type":"PATH_TRAVERSAL_EVIDENCE","secret":"sensitive-data-outside-hooks-dir"}]}

Impact

An unauthenticated remote attacker can read the contents of any .jsonl file accessible to the process running the dashboard server. In a typical deployment this includes all session log files (which contain tool invocations, hook outputs, and token usage data) as well as any other .jsonl file reachable via .. traversal from hooksDataPath. The constraint that the resolved path must end in .jsonl limits the attack surface to that file extension, but session logs can contain sensitive operational data. The same path traversal is present in both /api/session-summary and /api/session-events, and neither endpoint requires authentication.

Remediation

  • Validate sessionId format before use: reject any value that does not match a strict allowlist such as /^[a-zA-Z0-9_-]{1,64}$/. This prevents / and . characters from entering the path construction entirely.

const SESSION_ID_RE = /^[a-zA-Z0-9_-]{1,64}$/;
   if (!SESSION_ID_RE.test(sessionId)) {
     return res.status(400).json({ success: false, error: 'Invalid sessionId' });
   }
  • Alternatively, apply path.basename to strip all directory components: path.basename(sessionId) reduces any traversal sequence to a bare filename before path.join.
  • Add authentication middleware to all /api/* routes so that even if a bypass is found the endpoints are not reachable without a valid session token.

CVSS v3
5.3
EG Score
5.3(low)
EG Risk
28(Track)
EG Risk 28/100SSVC: Track

EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).

How it’s computed
Severity53% × 45%
Exploitation0% × 40%
Automatability30% × 15%
Action: Routine — remediate on your standard cadence.
EPSS PROB
EPSS %ILE
KEV
Not listed

Published

August 14, 2026

Last Modified

August 14, 2026

Vendor Advisories for CVE-2026-55156(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Data Freshness Timeline

(refreshed 1× in last 7d / 1× in last 30d)

Each row is a source pipeline that fetched or updated this CVE on that date, with what changed. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. Most recent first.

  1. 2026-08-14 22:25 UTCEG score recompute

Frequently asked(4)

What is CVE-2026-55156?
CVE-2026-55156 is a medium vulnerability published on August 14, 2026. Token Optimizer MCP: Unauthenticated Path Traversal in Dashboard Session Log API Endpoints Unauthenticated Path Traversal in Dashboard Session Log API Endpoints | Field | Value | | ---------------- | ----- | | Repository | ooples/token-optimizer-mcp | | Affected version | 5.0.1 (commit 8137147) | |…
When was CVE-2026-55156 disclosed?
CVE-2026-55156 was first published in the National Vulnerability Database on August 14, 2026. EchelonGraph re-ingests CVE updates from NVD on a 2-hour cycle, so this page reflects the latest published state.
What is the CVSS score of CVE-2026-55156?
CVE-2026-55156 has a CVSS v4.0 base score of 5.3 (CNA self-assessment; NVD's own analysis pending). The EG score is currently aggregating — additional source signals are being incorporated as they become available..
How do I remediate CVE-2026-55156?
Patch to the fixed version published by the affected vendor. Where vendor advisories exist for CVE-2026-55156, EchelonGraph cross-links them in the Vendor Advisories panel below — those typically contain the canonical remediation steps, fixed version numbers, and any vendor-specific mitigations.

Dependency Blast Radius

Explore the affected products and dependency analysis for CVE-2026-55156

Explore →

Is Your Infrastructure Affected by CVE-2026-55156?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.