CVE-2026-27729
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-27729 is a memory exhaustion denial-of-service vulnerability in the Astro web framework's @astrojs/node adapter caused by the absence of a default request body size limit in server actions. Affecting versions 9.0.0 through 9.5.3, a single oversized POST request to a valid action endpoint can exhaust the Node.js process heap and crash the server. The vulnerability was disclosed on February 23, 2026, with a fix released in version 9.5.4. NVD assigns a CVSS v3.1 score of 7.5 (High), while the CNA (GitHub) scores it 5.9 (Medium) (GitHub Advisory, Feedly).

Technical details

The root cause is CWE-770 (Allocation of Resources Without Limits or Throttling): Astro's server actions automatically parse incoming request bodies (JSON or FormData) and buffer them entirely into memory with no size restriction before any validation occurs. The @astrojs/node adapter running in mode: 'standalone' creates an HTTP server with no body size protection, meaning the Node.js process heap can be exhausted by a single oversized request. Action endpoint names are discoverable from HTML <form> attributes on any public page, requiring no authentication or prior knowledge to target. A public proof-of-concept (crash-test.mjs) demonstrates the issue by sending a 125 MB JSON payload to /_actions/<name>, triggering a FATAL ERROR: Reached heap limit crash (GitHub Advisory, Patch Commit).

Impact

Successful exploitation results in a complete availability loss for the affected server process — there is no confidentiality or integrity impact. A single oversized POST request is sufficient to crash the Node.js server process on memory-constrained deployments; in containerized environments (e.g., Docker/Kubernetes), the automatic restart behavior means repeated requests create a persistent crash-restart loop, effectively rendering the service unavailable. Only SSR standalone deployments using Astro server actions are affected; statically generated sites are not vulnerable (GitHub Advisory, Feedly).

Exploitability

A functional proof-of-concept exploit is publicly available in the GitHub security advisory, consisting of a JavaScript script (crash-test.mjs) that sends a 125 MB JSON payload to a server action endpoint to trigger heap exhaustion. No authentication is required, and action endpoint names can be discovered from public HTML pages. There is no evidence of in-the-wild exploitation at this time, and the vulnerability is not listed in the CISA KEV catalog. The EPSS score is approximately 0.07% (GitHub Advisory, Feedly).

Exploitation steps

  1. Reconnaissance: Browse the target Astro SSR site's public pages and inspect HTML source for <form> elements with data-astro-action attributes or similar markers to identify valid server action endpoint names (e.g., echo, subscribe).
  2. Confirm target: Verify the site uses @astrojs/node in standalone mode (versions 9.0.0–9.5.3) by checking response headers, error messages, or public package metadata.
  3. Craft oversized payload: Construct a large JSON or FormData body exceeding the server's available heap memory. For example, generate a JSON string with a field containing ~125 MB of repeated characters:
    const payload = JSON.stringify({ data: 'A'.repeat(125 * 1024 * 1024) });
  4. Send the request: POST the oversized payload to the discovered action endpoint:
    await fetch('http://target.example.com/_actions/echo', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
      body: payload,
    });
  5. Trigger crash: The server buffers the entire body into memory before any validation, exhausting the Node.js heap and causing a FATAL ERROR: Reached heap limit crash.
  6. Sustain DoS: In containerized environments, repeat the request after each automatic restart to maintain a persistent crash-restart loop (GitHub Advisory).

Indicators of compromise

  • Network: Unusually large HTTP POST requests (tens to hundreds of MB) to /_actions/<name> endpoints; repeated POST requests to action endpoints from the same or rotating source IPs in short succession.
  • Logs: Node.js process logs showing FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory; HTTP server access logs recording large Content-Length values or chunked transfer-encoded requests to /_actions/ paths.
  • Process: Repeated unexpected termination and restart of the Astro Node.js server process (visible in container orchestration logs as OOMKilled or rapid restart counts); abnormal memory usage spikes in process monitoring tools immediately before crashes.
  • Container/Orchestration: Kubernetes or Docker logs showing repeated container restarts (CrashLoopBackOff) correlated with inbound POST traffic to action endpoints (GitHub Advisory).

Mitigation and workarounds

The primary remediation is to upgrade @astrojs/node to version 9.5.4 or later, which introduces a default 1 MB body size limit for server actions and returns HTTP 413 (CONTENT_TOO_LARGE) for oversized requests (Release Notes, Patch Commit). As a temporary workaround prior to patching, configure a reverse proxy (e.g., nginx, Caddy) or load balancer in front of the Astro server to enforce request body size limits (e.g., client_max_body_size 1m; in nginx). Additionally, monitor for unexpected server restarts or crash loops as a signal of active exploitation attempts (Feedly).

Additional resources


SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-54504HIGH8.8
  • JavaScript logoJavaScript
  • @andrea9293/mcp-documentation-server
NoYesSep 17, 2026
CVE-2026-77615HIGH8.7
  • JavaScript logoJavaScript
  • paella-core
NoYesSep 17, 2026
CVE-2026-91127HIGH8.2
  • JavaScript logoJavaScript
  • @file-viewer/doc
NoYesSep 18, 2026
CVE-2026-77301HIGH7.5
  • JavaScript logoJavaScript
  • adm-zip
NoYesSep 18, 2026
CVE-2026-84992MEDIUM6.1
  • JavaScript logoJavaScript
  • md-editor-v3
NoYesSep 18, 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

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