GHSA-4p8p-pjpq-2w7h

Suggest an improvement
Source
https://github.com/advisories/GHSA-4p8p-pjpq-2w7h
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/11/GHSA-4p8p-pjpq-2w7h/GHSA-4p8p-pjpq-2w7h.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-4p8p-pjpq-2w7h
Aliases
Published
2026-11-09T21:13:55Z
Modified
2026-11-09T21:30:07Z
Severity
  • 8.7 (High) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N CVSS Calculator
Summary
tsParticles: Malformed JSON requests can terminate the @tsparticles/mcp-server HTTP process
Details

Summary

The HTTP mode of @tsparticles/mcp-server parses incoming /mcp request bodies with JSON.parse() outside a request-local error boundary. A single malformed JSON request causes the async request handler to throw and terminates the Node.js process.

This was verified on v4.3.0 at commit 0266d469aa2d719cb66a9c6bf09aded4186ec17c. Version 4.3.1 appears to fix this by returning HTTP 400 for invalid JSON.

Affected Code

The vulnerable handler is:

if (req.method === "POST" && req.url === "/mcp") {
  const body = await new Promise<string>((resolve, reject) => {
    const chunks: Buffer[] = [];
    req.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
    req.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
    req.on("error", reject);
  });

  const parsedBody = body ? JSON.parse(body) : undefined;
  await transport.handleRequest(req, res, parsedBody);
}

The JSON.parse() call is not wrapped in try/catch.

Reproduction

Start the HTTP server and send this malformed request:

POST /mcp HTTP/1.1
Content-Type: application/json
Mcp-Protocol-Version: 2025-11-25

{"jsonrpc":

Observed result in 3 out of 3 runs:

exit_code=1
SyntaxError: Unexpected end of JSON input
at Server.<anonymous> (integrations/mcp-server/src/index.ts:407:38)

Impact

An unauthenticated remote attacker can terminate the exposed MCP process with a single malformed request. The service remains unavailable until restarted by an external supervisor.

Recommendation

Wrap request parsing in a local try/catch and return a bounded HTTP 400 response such as:

{"error":"Invalid JSON"}

The process should remain alive after malformed requests.

Database specific
{
    "cwe_ids": [
        "CWE-248"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-11-09T21:13:55Z",
    "nvd_published_at": "2026-11-04T23:17:58Z",
    "severity": "HIGH"
}
References

Affected packages

npm / @tsparticles/mcp-server

Package

Name
@tsparticles/mcp-server
View open source insights on deps.dev
Purl
pkg:npm/%40tsparticles/mcp-server

Affected ranges

Type
SEMVER
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
4.3.1

Database specific

last_known_affected_version_range
"<= 4.3.0"
source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/11/GHSA-4p8p-pjpq-2w7h/GHSA-4p8p-pjpq-2w7h.json"