CVE-2025-67731: 
JavaScript vulnerability analysis and mitigation

Overview

CVE-2025-67731 is a Denial of Service (DoS) vulnerability in the servify-express npm package, a Node.js utility for quickly starting an Express server. The flaw stems from the package using express.json() without a request body size limit, allowing unauthenticated attackers to send arbitrarily large JSON payloads and exhaust server resources. All versions prior to 1.2 (i.e., <= 1.1) are affected. The vulnerability was published on December 11, 2025, with a CVSS v3.1 score of 7.5 (High) and a CVSS v4.0 score of 8.7 (High) (Github Advisory).

Technical details

The root cause is classified as CWE-770 (Allocation of Resources Without Limits or Throttling) — specifically, the index.js of servify-express registers app.use(express.json()) without specifying a limit option, meaning the Express JSON body parser will attempt to parse any payload regardless of size (Github Advisory). An unauthenticated remote attacker can exploit this by sending HTTP POST requests with extremely large JSON bodies to any endpoint exposed by the vulnerable server. No authentication, special privileges, or user interaction is required. The flaw is a misconfiguration in the wrapper package rather than a bug in Express itself; the fix (commit 8dff7f5) adds optional rate limiting middleware and the advisory recommends setting express.json({ limit: '100kb' }) (Patch Commit).

Impact

Successful exploitation results in high availability impact: excessive memory consumption, degraded server performance, or complete process crashes leading to a Denial of Service condition. There is no confidentiality or integrity impact — attackers cannot read data or modify system state through this vulnerability. Any application built on servify-express versions <= 1.1 and exposed to untrusted network clients is at risk (Github Advisory).

Exploitability

There is no public proof-of-concept exploit code and no evidence of in-the-wild exploitation at this time (Github Advisory). The EPSS score is approximately 0.046% (0.000460), placing it in a low-probability exploitation tier. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Despite the low exploitation probability, the attack requires no authentication and no user interaction, making it trivially automatable against exposed instances.

Exploitation steps

  1. Reconnaissance: Identify internet-facing Node.js services using servify-express versions <= 1.1, potentially via npm dependency scanning tools, Shodan, or Censys searches for Node.js/Express servers.
  2. Identify JSON endpoints: Probe the target server for HTTP endpoints that accept POST requests with a Content-Type: application/json header.
  3. Craft oversized payload: Construct an HTTP POST request containing an extremely large JSON body (e.g., a JSON object with a string value of several hundred megabytes or gigabytes).
  4. Send the request: Transmit the crafted request to the target endpoint. Because no size limit is enforced, the server will attempt to parse the entire payload into memory.
  5. Achieve DoS: Repeated or concurrent requests with large payloads exhaust available memory, causing degraded performance or a Node.js process crash, rendering the service unavailable (Github Advisory).

Indicators of compromise

  • Network: Unusually large HTTP POST requests (hundreds of MB or GB in Content-Length) to any endpoint on the affected server; high volume of concurrent POST requests from one or multiple source IPs.
  • Logs: Node.js/Express access logs showing repeated large-body POST requests; out-of-memory (OOM) error messages or process crash logs in the application's stdout/stderr or system journal.
  • Process: Sudden spike in Node.js process memory consumption visible via system monitoring tools (e.g., top, htop, or APM agents); unexpected process restarts or crashes of the node process running servify-express.

Mitigation and workarounds

Upgrade servify-express to version 1.2 or later, which introduces optional rate limiting middleware via express-rate-limit (Github Advisory, Patch Commit). If immediate upgrade is not possible, apply one or more of the following workarounds:

  • Add a size limit to the JSON parser: app.use(express.json({ limit: '100kb' }))
  • Enable rate limiting at the application level using express-rate-limit
  • Deploy a reverse proxy (e.g., NGINX) configured to enforce maximum request body sizes
  • Reject unusually large requests before they reach the application layer

Additional resources


Source: This report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-gvwc-5hr5-44p8HIGH7.5
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-5jh3-w3fj-6758LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-5v8x-rm7w-m4c7LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-7pqp-3q23-mwr8LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-3qg4-7mq2-gm93MEDIUMN/A
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management