← Back to Feed CACHED · 2026-09-15 06:17:30 · CACHE_KEY CVE-2026-39364
CVE-2026-39364 · CWE-180 · Disclosed 2026-04-07

Vite is a frontend tooling framework for JavaScript.

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Someone left the garage door open and thieves are driving around the neighborhood checking every house

CVE-2026-39364 is an unauthenticated file-read bypass in the Vite development server. By appending query parameters like ?raw??, ?import&raw, or ?import&url&inline to HTTP requests, an attacker can circumvent server.fs.deny rules and retrieve files that should be blocked — most critically .env files containing cloud credentials (AWS keys, Azure tokens), TLS certificates, and Terraform state. Affected versions are Vite 7.1.0 through 7.3.1 and 8.0.0 through 8.0.4, fixed in 7.3.2 and 8.0.5 respectively. The exploit is trivially simple: a single crafted GET request with no authentication required.

The vendor's HIGH / 7.5 rating is directionally correct but slightly generous for most enterprise environments. The CVSS vector scores this as a clean network-reachable, no-auth, no-interaction confidentiality breach — and that's technically accurate. However, the vulnerability only fires on the Vite dev server, not production builds. The dev server must be network-exposed via the --host flag or equivalent config, which is an anti-pattern in any mature deployment. That said, the F5 Labs August 2026 honeynet data showing 32,000+ scanning events and 807 grouped attack sessions proves this anti-pattern is widespread enough to matter. The active exploitation keeps this firmly in HIGH territory despite the narrow attack surface.

"Trivial file-read on exposed Vite dev servers is being actively scanned to steal cloud credentials."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Discover exposed Vite dev server

The attacker scans for Vite development servers on common ports (default 5173, also 3000, 4173, 8080). Vite dev servers return distinctive response headers and HTML content that fingerprint trivially. Shodan/Censys/FOFA queries identify targets. F5 Labs documented scanning from GCP IP ranges (34.x/35.x) across US, Belgium, Netherlands, and Singapore.
Conditions required:
  • Vite dev server is network-exposed (--host flag or 0.0.0.0 bind)
  • Target is reachable from the internet or attacker's network segment
Where this breaks in practice:
  • Production deployments use vite build output served by nginx/CDN — dev server is not running
  • Enterprise security policies should block dev server ports at the firewall
  • Default Vite config binds to localhost only; explicit --host is required to expose
Detection/coverage: Nuclei template CVE-2026-39364.yaml available from ProjectDiscovery (April 2026 release). Network IDS signatures for /@fs/ path prefix with ?raw parameters.
STEP 02

Craft server.fs.deny bypass request

The attacker sends a GET request appending query parameters that cause Vite's path validation to run *after* the query string is processed, bypassing the deny list. Example payloads: GET /@fs/.env?raw??, GET /@fs/../../root/.aws/credentials?import&raw, or double-encoded traversal ..%252f..%252f. The CWE-180 (Incorrect Behavior Order: Validate Before Canonicalize) is the root cause — the deny check sees the parameterized path and fails to match the deny pattern.
Conditions required:
  • Sensitive files (.env, .aws/credentials, terraform.tfstate) exist on the filesystem
  • Files are within or reachable from the Vite project root via path traversal
Where this breaks in practice:
  • Well-configured environments use secret managers (Vault, AWS Secrets Manager) instead of .env files
  • Containerized builds with minimal filesystems reduce available targets
Detection/coverage: WAF rules matching /@fs/ with ?raw or ?import query strings. Access logs showing 200 responses to /@fs/.env paths.
STEP 03

Exfiltrate sensitive credentials

The server returns the file contents as an HTTP 200 response in plaintext. The attacker harvests AWS access keys, Azure AD tokens, database connection strings, API keys, and TLS private keys. F5 Labs observed automated scanners targeting /root/.aws/credentials, /home/ec2-user/.aws/, .env, .env.production, and /proc/self/environ in a single campaign sweep.
Conditions required:
  • Retrieved files contain actionable secrets (not dummy/rotated values)
Where this breaks in practice:
  • Credential rotation policies limit the window of usefulness
  • Cloud providers detect anomalous usage patterns from stolen keys
Detection/coverage: CloudTrail / Azure Activity Log anomalies from unfamiliar IPs using stolen credentials. GuardDuty UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration finding type.
STEP 04

Pivot to cloud infrastructure

Using stolen AWS keys or Azure tokens, the attacker authenticates to cloud APIs. Depending on the IAM permissions attached to the stolen credentials, this can escalate to S3 bucket access, EC2 instance control, RDS database dumps, or full cloud account takeover. Terraform state files reveal the entire infrastructure topology, enabling targeted lateral movement.
Conditions required:
  • Stolen credentials have meaningful cloud permissions
  • No IP-based restrictions or MFA on cloud API access
Where this breaks in practice:
  • Least-privilege IAM policies limit blast radius
  • SCP/permission boundaries at the organization level
  • Cloud credential short-lived session tokens may have expired
Detection/coverage: AWS GuardDuty, Azure Defender for Cloud, GCP Security Command Center anomaly detection.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationActive. F5 Labs documented a sustained mass-scanning campaign in August 2026: ~32,000 raw events, 807 grouped attack sessions from GCP IP ranges targeting exposed Vite dev servers to harvest cloud credentials.
Proof-of-conceptPublic and trivial. Exploit is a single HTTP GET request: GET /@fs/.env?raw??. Nuclei template available since April 2026. Multiple PoC collections index it (SecureWithUmer/CVE-2026-PoCs, exploitintel/eip-pocs-and-cves).
EPSS score0.01996 (top ~5% percentile) — modest probability score that understates actual exploitation activity
KEV statusNot listed as of 2026-09-15. Active scanning may not meet CISA's confirmed-exploitation threshold yet.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N — Network-reachable, no auth, no user interaction, high confidentiality impact, no integrity/availability impact
Affected versionsVite 7.1.0 – 7.3.1 and 8.0.0 – 8.0.4
Fixed versionsVite 7.3.2 and 8.0.5
Scanning/exposure dataF5 Labs honeynet: 32K events in Aug 2026, up from 1,732 baseline in prior 3 months. Primary scanner sources: GCP ranges (34.14.x, 34.16.x, 34.11.x). Targets port 5173 and common alt ports.
Disclosure date2026-04-07 (GHSA-v2wj-q39q-566r)
CreditReported via GitHub Security Advisory process; Nuclei template by ritikchaddha (ProjectDiscovery)
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.0/10)

Active mass-scanning campaigns harvesting cloud credentials from exposed Vite dev servers confirm real-world exploitation, which is the single most decisive factor sustaining the HIGH rating. The narrow attack surface (only dev servers bound to --host) prevents escalation to CRITICAL despite the trivial exploit complexity.

HIGH Vulnerability mechanics and exploit availability
HIGH Active exploitation status (F5 Labs honeynet data)
MEDIUM Fraction of enterprise Vite installations with exposed dev servers

Why this verdict

  • Active exploitation confirmed: F5 Labs documented 32,000+ scanning events in August 2026, a ~18x increase over the prior 3-month baseline. Attackers are systematically harvesting AWS keys, Azure tokens, and Terraform state from exposed Vite dev servers. This is not theoretical.
  • Trivial exploit complexity: The attack is a single unauthenticated HTTP GET request with a query parameter appended. No tooling, no chaining, no special conditions beyond network reachability. Nuclei template has been public since April 2026.
  • Role multiplier: (a) *Low-value role* — developer workstation running vite dev locally: not reachable, no impact. (b) *Typical role* — staging/preview server with --host in a cloud VPC: reachable only internally, moderate impact if .env has real secrets. (c) *High-value role* — CI/CD build environment or cloud-hosted dev server accidentally exposed to the internet with production .env secrets or cloud IAM credentials on disk: blast radius extends from host → cloud account → potentially fleet-scale via Terraform state or IAM escalation. The high-value role is plausible but represents a minority of Vite installations (estimated <5%), which keeps this at HIGH rather than CRITICAL.
  • Friction — dev server only: Production Vite deployments use vite build and serve static assets through nginx/CDN/S3. The dev server is a development-time tool. Exploiting this requires the anti-pattern of exposing a dev server to the network, which limits the reachable population significantly.
  • Friction — default config is safe: Vite binds to localhost by default. The --host flag or server.host: '0.0.0.0' must be explicitly set, meaning exposure is an opt-in misconfiguration rather than a default-vulnerable state.

Why not higher?

CRITICAL would require the affected component to be canonically deployed in a high-value role (identity provider, domain controller, hypervisor, network edge). Vite is a frontend build tool whose dev server is explicitly not intended for production use. The high-value CI/CD exposure scenario exists but represents a small fraction (<5%) of the installed base. The vulnerability is also confidentiality-only with no code execution, limiting the direct blast radius to file reads.

Why not lower?

Active mass-scanning campaigns documented by F5 Labs in August 2026 prove real-world exploitation is occurring at scale. The exploit is trivially simple (single GET request, no auth), PoCs and Nuclei templates are widely available, and the stolen data (cloud credentials) enables devastating lateral movement into cloud infrastructure. Downgrading to MEDIUM would understate the operational risk for any organization that might have even one accidentally exposed Vite dev server.

05 · Compensating Control

What to do — in priority order.

  1. Audit and kill exposed Vite dev servers immediately — Search network logs, cloud security groups, and Kubernetes ingress rules for anything listening on port 5173 (or common alternatives) that responds with Vite signatures. Terminate or firewall-restrict these within 3 days per the noisgate mitigation SLA for HIGH. Use nuclei -t CVE-2026-39364.yaml -l targets.txt to scan your perimeter.
  2. Block /@fs/ paths with query parameters at the WAF/reverse proxy — If you must expose a Vite dev server temporarily (e.g., for QA preview environments), add a WAF rule denying any request matching /@fs/ with ?raw, ?import, or ?url query parameters. Deploy within 30 days.
  3. Migrate secrets out of .env files into a secret manager — Even after patching, .env files on disk are a persistent risk. Move all credentials to HashiCorp Vault, AWS Secrets Manager, or Azure Key Vault. This eliminates the high-value payload attackers are targeting.
  4. Rotate all credentials that may have been exposed — If any Vite dev server was internet-facing while running a vulnerable version, assume .env contents and any readable credentials are compromised. Rotate AWS keys, Azure tokens, database passwords, and API keys immediately.
  5. Enforce localhost-only binding in CI/CD and development configs — Add server.host: 'localhost' to vite.config.ts and lint CI/CD pipeline definitions to reject --host 0.0.0.0 or equivalent. This prevents future re-exposure.
What doesn't work
  • Network segmentation alone — if the dev server is in a VPC but developers SSH-tunnel or the VPC has overly permissive security groups, the server may still be reachable from unexpected networks. Segmentation helps but is not sufficient without also patching or killing the dev server.
  • Content Security Policy headers — CSP is a browser-side control and does nothing to prevent a direct HTTP GET from an attacker's scanner hitting the dev server API.
  • Upgrading only the production build pipeline — the vulnerability is in the dev server, not the build output. If developers are still running vulnerable Vite versions locally with --host, they remain exposed.
06 · Verification

Crowdsourced verification payload.

Run this on any host where you suspect Vite dev servers may be running, or from an auditor workstation against a list of target IPs/hostnames. No special privileges needed — it just makes HTTP requests. Example: bash check_cve_2026_39364.sh http://devserver.internal:5173

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash\n# CVE-2026-39364 Vite server.fs.deny bypass checker\n# Usage: bash check_cve_2026_39364.sh <BASE_URL>\n# Example: bash check_cve_2026_39364.sh http://localhost:5173\n# Requires: curl\n# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN\n\nset -euo pipefail\n\nBASE_URL=\"${1:-}\"\nif [ -z \"$BASE_URL\" ]; then\n  echo \"Usage: $0 <BASE_URL>\"\n  echo \"Example: $0 http://localhost:5173\"\n  exit 2\nfi\n\n# Remove trailing slash\nBASE_URL=\"${BASE_URL%/}\"\n\necho \"[*] Testing CVE-2026-39364 against $BASE_URL\"\n\n# Test payloads that bypass server.fs.deny\nPAYLOADS=(\n  \"/@fs/.env?raw??\"\n  \"/@fs/.env?import&raw\"\n  \"/@fs/.env?import&url&inline\"\n)\n\nVULNERABLE=0\nREACHABLE=0\n\nfor payload in \"${PAYLOADS[@]}\"; do\n  URL=\"${BASE_URL}${payload}\"\n  echo \"[*] Testing: $URL\"\n  HTTP_CODE=$(curl -s -o /dev/null -w \"%{http_code}\" --connect-timeout 5 --max-time 10 \"$URL\" 2>/dev/null || echo \"000\")\n  \n  if [ \"$HTTP_CODE\" = \"000\" ]; then\n    echo \"    [-] Connection failed\"\n    continue\n  fi\n  \n  REACHABLE=1\n  \n  if [ \"$HTTP_CODE\" = \"200\" ]; then\n    # Verify response body is not empty/error page\n    BODY=$(curl -s --connect-timeout 5 --max-time 10 \"$URL\" 2>/dev/null)\n    if [ -n \"$BODY\" ] && ! echo \"$BODY\" | grep -qi \"<!DOCTYPE\"; then\n      echo \"    [!] HTTP 200 with file content returned — VULNERABLE\"\n      VULNERABLE=1\n      break\n    fi\n  else\n    echo \"    [+] HTTP $HTTP_CODE (blocked or not found)\"\n  fi\ndone\n\nif [ \"$VULNERABLE\" -eq 1 ]; then\n  echo \"\"\n  echo \"VULNERABLE — CVE-2026-39364: server.fs.deny bypass confirmed\"\n  exit 1\nelif [ \"$REACHABLE\" -eq 0 ]; then\n  echo \"\"\n  echo \"UNKNOWN — could not reach Vite dev server at $BASE_URL\"\n  exit 2\nelse\n  echo \"\"\n  echo \"PATCHED — server.fs.deny bypass payloads were blocked\"\n  exit 0\nfi
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: find and kill every internet-facing Vite dev server. Run a Nuclei scan with the CVE-2026-39364.yaml template against your external perimeter and internal network ranges — active scanning campaigns are hitting these endpoints *right now*. Any exposed Vite dev server running versions 7.1.0–7.3.1 or 8.0.0–8.0.4 should be taken offline or firewalled within the noisgate mitigation SLA of 30 days for HIGH severity, but given active exploitation, treat initial triage as urgent (this week). If any dev server was internet-facing while vulnerable, rotate every credential in every .env file and any cloud keys readable from that host — assume compromise. For the noisgate remediation SLA, upgrade all Vite installations to 7.3.2 or 8.0.5+ within 180 days, and enforce server.host: 'localhost' as a default in your project templates and CI/CD configs to prevent re-exposure. Long-term, migrate secrets out of .env files into a proper secret manager.

Sources

  1. GitHub Advisory GHSA-v2wj-q39q-566r
  2. F5 Labs — Mass Scanning for Exposed Vite Endpoints
  3. SecurityOnline — Vite CVE-2026-39364 Exploited
  4. Nuclei Template — CVE-2026-39364.yaml
  5. GBHackers — Mass Scanning Targets Exposed Vite Servers
  6. CyberSecurityNews — Vite Servers Under Attack
  7. Red Hat Security Advisory
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.