mediumCVSS 6.2Vulnerability

GHSA-7xp7-m392-h92c

## Summary The EvoMap proxy daemon's HTTP body parser accepts requests of any size, and the `POST /asset/submit` route persists the full request body — verbatim and uncapped — as a JSONL line in `<dataDir>/messages.jsonl`. An unauthenticated local attacker (other local user, container neighbor, or malicious npm postinstall script running on the same host) can repeatedly POST large bodies to fill the disk. On restart, the daemon synchronously reads the entire file via `fs.readFileSync`, making the OOM/crash persistent. ## Details **1. Entry — unbounded body parser** (`src/proxy/server/http.js:9-21`): ```js function parseBody(req) { return new Promise((resolve, reject) => { const chunks = []; req.on('data', c => chunks.push(c)); req.on('end', () => { const raw = Buffer.concat(chunks).toString(); if (!raw) return resolve({}); try { resolve(JSON.parse(raw)); } catch (e) { reject(new Error('Invalid JSON body')); } }); req.on('error', reject); }); } ``` There is no Content-Length validation and no cumulative-bytes cap on `chunks`. **2. Route — no schema or size validation** (`src/proxy/server/routes.js:75-85`): ```js 'POST /asset/submit': async ({ body }) => { if (!body.assets && !body.asset_id) { throw Object.assign(new Error('assets or asset_id is required'), { statusCode: 400 }); } const result = store.send({ type: 'asset_submit', payload: body, priority: body.priority || 'normal', }); return { body: result }; } ``` The full `body` (including arbitrarily large `body.assets[*].blob`) is forwarded to `store.send()` as the message payload. `POST /mailbox/send` has the same shape. **3. Sink — unbounded JSONL append** (`src/proxy/mailbox/store.js`): ```js // line 71-73 function appendLine(filePath, obj) { fs.appendFileSync(filePath, JSON.stringify(obj) + '\n', 'utf8'); } // line 189-209: send() builds a message wrapping the payload and calls _appendMessage // line 166-171: _appendMessage(

Properties

ghsa_id
GHSA-7xp7-m392-h92c
severity
medium
summary
@evomap/evolver has an unbounded request body in proxy /asset/submit that causes persistent disk-exhaustion DoS
cvss_score
6.2
cve_id
GHSA-7xp7-m392-h92c
cvss_vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
is_ghsa_only
true
ghsa_published
2026-05-05T21:15:32Z
source_url
https://github.com/advisories/GHSA-7xp7-m392-h92c
ghsa_updated
2026-05-05T21:15:33Z

Related Entities (4)

HAS_WEAKNESS (1)

[Weakness]Uncontrolled Resource Consumption

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]npm/@evomap/evolver

AFFECTS (1)

[Software]npm/@evomap/evolver

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-7xp7-m392-h92c (CVSS 6.2) — Ninja Signal Threat Intelligence | Ninja Signal