« Volver al listado

CVE-2026-3125

Estado: AnalizadaAlta (7.7)—

A Server-Side Request Forgery (SSRF) vulnerability was identified in the @opennextjs/cloudflare package, resulting from a path normalization bypass in the /cdn-cgi/image/ handler.The @opennextjs/cloudflare worker template includes a /cdn-cgi/image/ handler intended for development use only. In production, Cloudflare's edge intercepts /cdn-cgi/image/ requests before they reach the Worker. However, by substituting a backslash for a forward slash (/cdn-cgi\image/ instead of /cdn-cgi/image/), an attacker can bypass edge interception and have the request reach the Worker directly. The JavaScript URL class then normalizes the backslash to a forward slash, causing the request to match the handler and trigger an unvalidated fetch of arbitrary remote URLs.

Leer descripción completaMostrar menos

For example:

https://victim-site.com/cdn-cgi\image/aaaa/https://attacker.com

In this example, attacker-controlled content from attacker.com is served through the victim site's domain (victim-site.com), violating the same-origin policy and potentially misleading users or other services.

Note: This bypass only works via HTTP clients that preserve backslashes in paths (e.g., curl --path-as-is). Browsers normalize backslashes to forward slashes before sending requests.

Additionally, Cloudflare Workers with Assets and Cloudflare Pages suffer from a similar vulnerability. Assets stored under /cdn-cgi/ paths are not publicly accessible under normal conditions. However, using the same backslash bypass (/cdn-cgi\... instead of /cdn-cgi/...), these assets become publicly accessible. This could be used to retrieve private data. For example, Open Next projects store incremental cache data under /cdn-cgi/_next_cache, which could be exposed via this bypass.

CVSS

Probabilidad de explotación (EPSS)

EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).

🎯 Técnicas ATT&CK

Cómo se explota esta vulnerabilidad y qué consigue el atacante, en el lenguaje de MITRE ATT&CK.

SSRF por bypass de normalización de rutas en handler de Cloudflare Worker accesible remotamente (AV:N, PR:N). Impacto: proxy SSRF (T1090.004) y exfiltración de datos privados en caché (T1005).

Inferido por nuestro agente de análisis a partir de la descripción oficial, el vector CVSS y la CWE, y comprobado por un supervisor. Puede contener errores.

🛡️ Mitigaciones ATT&CK que cubren estas técnicas

Tecnologías afectadas (1)

CWE

Referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-3125",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-3125",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-03-04T18:58:41.207814Z"
        }
      }
    ],
    "cvssMetricV31": [
      {
        "type": "Primary",
        "source": "nvd@nist.gov",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.1",
          "baseScore": 6.5,
          "attackVector": "NETWORK",
          "baseSeverity": "MEDIUM",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N",
          "integrityImpact": "LOW",
          "userInteraction": "NONE",
          "attackComplexity": "LOW",
          "availabilityImpact": "NONE",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "LOW"
        },
        "impactScore": 2.5,
        "exploitabilityScore": 3.9
      }
    ],
    "cvssMetricV40": [
      {
        "type": "Secondary",
        "source": "cna@cloudflare.com",
        "cvssData": {
          "Safety": "NOT_DEFINED",
          "version": "4.0",
          "Recovery": "NOT_DEFINED",
          "baseScore": 7.7,
          "Automatable": "NOT_DEFINED",
          "attackVector": "NETWORK",
          "baseSeverity": "HIGH",
          "valueDensity": "NOT_DEFINED",
          "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:H/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
          "exploitMaturity": "NOT_DEFINED",
          "providerUrgency": "NOT_DEFINED",
          "userInteraction": "NONE",
          "attackComplexity": "LOW",
          "attackRequirements": "NONE",
          "privilegesRequired": "NONE",
          "subIntegrityImpact": "NONE",
          "vulnIntegrityImpact": "LOW",
          "integrityRequirement": "NOT_DEFINED",
          "modifiedAttackVector": "NOT_DEFINED",
          "subAvailabilityImpact": "NONE",
          "vulnAvailabilityImpact": "NONE",
          "availabilityRequirement": "NOT_DEFINED",
          "modifiedUserInteraction": "NOT_DEFINED",
          "modifiedAttackComplexity": "NOT_DEFINED",
          "subConfidentialityImpact": "HIGH",
          "vulnConfidentialityImpact": "LOW",
          "confidentialityRequirement": "NOT_DEFINED",
          "modifiedAttackRequirements": "NOT_DEFINED",
          "modifiedPrivilegesRequired": "NOT_DEFINED",
          "modifiedSubIntegrityImpact": "NOT_DEFINED",
          "modifiedVulnIntegrityImpact": "NOT_DEFINED",
          "vulnerabilityResponseEffort": "NOT_DEFINED",
          "modifiedSubAvailabilityImpact": "NOT_DEFINED",
          "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
          "modifiedSubConfidentialityImpact": "NOT_DEFINED",
          "modifiedVulnConfidentialityImpact": "NOT_DEFINED"
        }
      }
    ]
  },
  "affected": [
    {
      "source": "cna@cloudflare.com",
      "affectedData": [
        {
          "repo": "https://github.com/opennextjs/opennextjs-cloudflare",
          "vendor": "opennextjs",
          "modules": [
            "packages/cloudflare/src/cli/templates/worker.ts"
          ],
          "product": "@opennextjs/cloudflare",
          "versions": [
            {
              "status": "affected",
              "version": "0",
              "lessThan": "1.17.1",
              "versionType": "npm"
            }
          ],
          "platforms": [
            "Cloudflare Workers"
          ],
          "packageName": "@opennextjs/cloudflare",
          "collectionURL": "https://www.npmjs.com/package/@opennextjs/cloudflare",
          "defaultStatus": "unaffected"
        }
      ]
    }
  ],
  "published": "2026-03-04T19:16:19.730",
  "references": [
    {
      "url": "https://github.com/advisories/GHSA-rvpw-p7vw-wj3m",
      "tags": [
        "Third Party Advisory"
      ],
      "source": "cna@cloudflare.com"
    },
    {
      "url": "https://github.com/opennextjs/opennextjs-cloudflare/pull/1147",
      "tags": [
        "Issue Tracking",
        "Patch"
      ],
      "source": "cna@cloudflare.com"
    },
    {
      "url": "https://www.cve.org/cverecord?id=CVE-2025-6087",
      "tags": [
        "Third Party Advisory"
      ],
      "source": "cna@cloudflare.com"
    },
    {
      "url": "https://www.npmjs.com/package/@opennextjs/cloudflare/v/1.17.1",
      "tags": [
        "Product",
        "Release Notes"
      ],
      "source": "cna@cloudflare.com"
    }
  ],
  "vulnStatus": "Analyzed",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "cna@cloudflare.com",
      "description": [
        {
          "lang": "en",
          "value": "CWE-706"
        },
        {
          "lang": "en",
          "value": "CWE-918"
        }
      ]
    },
    {
      "type": "Primary",
      "source": "nvd@nist.gov",
      "description": [
        {
          "lang": "en",
          "value": "CWE-918"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "A Server-Side Request Forgery (SSRF) vulnerability was identified in the @opennextjs/cloudflare package, resulting from a path normalization bypass in the /cdn-cgi/image/ handler.The @opennextjs/cloudflare worker template includes a /cdn-cgi/image/ handler intended for development use only. In production, Cloudflare's edge intercepts /cdn-cgi/image/ requests before they reach the Worker. However, by substituting a backslash for a forward slash (/cdn-cgi\\image/ instead of /cdn-cgi/image/), an attacker can bypass edge interception and have the request reach the Worker directly. The JavaScript URL class then normalizes the backslash to a forward slash, causing the request to match the handler and trigger an unvalidated fetch of arbitrary remote URLs.\n\nFor example: \n\n https://victim-site.com/cdn-cgi\\image/aaaa/https://attacker.com \n\nIn this example, attacker-controlled content from attacker.com is served through the victim site's domain (victim-site.com), violating the same-origin policy and potentially misleading users or other services.\n\nNote: This bypass only works via HTTP clients that preserve backslashes in paths (e.g., curl --path-as-is). Browsers normalize backslashes to forward slashes before sending requests.\n\nAdditionally, Cloudflare Workers with Assets and Cloudflare Pages suffer from a similar vulnerability. Assets stored under /cdn-cgi/ paths are not publicly accessible under normal conditions. However, using the same backslash bypass (/cdn-cgi\\... instead of /cdn-cgi/...), these assets become publicly accessible. This could be used to retrieve private data. For example, Open Next projects store incremental cache data under /cdn-cgi/_next_cache, which could be exposed via this bypass."
    },
    {
      "lang": "es",
      "value": "Una vulnerabilidad de falsificación de petición del lado del servidor (SSRF) fue identificada en el paquete @opennextjs/cloudflare, resultante de un bypass de normalización de ruta en el gestor /cdn-cgi/image/. La plantilla de worker @opennextjs/cloudflare incluye un gestor /cdn-cgi/image/ destinado solo para uso en desarrollo. En producción, el edge de Cloudflare intercepta las peticiones /cdn-cgi/image/ antes de que lleguen al Worker. Sin embargo, al sustituir una barra invertida por una barra inclinada (/cdn-cgi\\image/ en lugar de /cdn-cgi/image/), un atacante puede eludir la intercepción del edge y hacer que la petición llegue directamente al Worker. La clase URL de JavaScript luego normaliza la barra invertida a una barra inclinada, haciendo que la petición coincida con el gestor y desencadene una obtención no validada de URLs remotas arbitrarias.\n\nPor ejemplo:\n\nhttps://victim-site.com/cdn-cgi\\image/aaaa/https://attacker.com\n\nEn este ejemplo, contenido controlado por el atacante de attacker.com se sirve a través del dominio del sitio víctima (victim-site.com), violando la política de mismo origen y potencialmente engañando a usuarios u otros servicios.\n\nNota: Este bypass solo funciona a través de clientes HTTP que preservan las barras invertidas en las rutas (p. ej., curl --path-as-is). Los navegadores normalizan las barras invertidas a barras inclinadas antes de enviar las peticiones.\n\nAdemás, Cloudflare Workers con Assets y Cloudflare Pages sufren de una vulnerabilidad similar. Los Assets almacenados bajo rutas /cdn-cgi/ no son accesibles públicamente bajo condiciones normales. Sin embargo, utilizando el mismo bypass de barra invertida (/cdn-cgi\\... en lugar de /cdn-cgi/...), estos assets se vuelven accesibles públicamente. Esto podría usarse para recuperar datos privados. Por ejemplo, los proyectos Open Next almacenan datos de caché incremental bajo /cdn-cgi/_next_cache, que podrían ser expuestos a través de este bypass."
    }
  ],
  "lastModified": "2026-06-17T10:43:05.107",
  "configurations": [
    {
      "nodes": [
        {
          "negate": false,
          "cpeMatch": [
            {
              "criteria": "cpe:2.3:a:opennextjs:opennext_for_cloudflare:*:*:*:*:*:node.js:*:*",
              "vulnerable": true,
              "matchCriteriaId": "FFD587A5-A6DA-4D83-9903-7AD395DE5744",
              "versionEndExcluding": "1.17.1"
            }
          ],
          "operator": "OR"
        }
      ]
    }
  ],
  "sourceIdentifier": "cna@cloudflare.com"
}