« Volver al listado

CVE-2026-21713

Estado: AnalizadaMedia (5.9)—

A flaw in Node.js HMAC verification uses a non-constant-time comparison when validating user-provided signatures, potentially leaking timing information proportional to the number of matching bytes. Under certain threat models where high-resolution timing measurements are possible, this behavior could be exploited as a timing oracle to infer HMAC values.

Node.js already provides timing-safe comparison primitives used elsewhere in the codebase, indicating this is an oversight rather than an intentional design decision.

This vulnerability affects **20.x, 22.x, 24.x, and 25.x**.

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).

Tecnologías afectadas (1)

CWE

Referencias

JSON original (NVD)

Mostrar
{
  "id": "CVE-2026-21713",
  "cveTags": [],
  "metrics": {
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "id": "CVE-2026-21713",
          "role": "CISA Coordinator",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "version": "2.0.3",
          "timestamp": "2026-03-30T19:45:13.027379Z"
        }
      }
    ],
    "cvssMetricV30": [
      {
        "type": "Secondary",
        "source": "support@hackerone.com",
        "cvssData": {
          "scope": "UNCHANGED",
          "version": "3.0",
          "baseScore": 5.9,
          "attackVector": "NETWORK",
          "baseSeverity": "MEDIUM",
          "vectorString": "CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N",
          "integrityImpact": "NONE",
          "userInteraction": "NONE",
          "attackComplexity": "HIGH",
          "availabilityImpact": "NONE",
          "privilegesRequired": "NONE",
          "confidentialityImpact": "HIGH"
        },
        "impactScore": 3.6,
        "exploitabilityScore": 2.2
      }
    ]
  },
  "affected": [
    {
      "source": "support@hackerone.com",
      "affectedData": [
        {
          "vendor": "nodejs",
          "product": "node",
          "versions": [
            {
              "status": "affected",
              "version": "20.20.1",
              "versionType": "semver",
              "lessThanOrEqual": "20.20.1"
            },
            {
              "status": "affected",
              "version": "22.22.1",
              "versionType": "semver",
              "lessThanOrEqual": "22.22.1"
            },
            {
              "status": "affected",
              "version": "24.14.0",
              "versionType": "semver",
              "lessThanOrEqual": "24.14.0"
            },
            {
              "status": "affected",
              "version": "25.8.1",
              "versionType": "semver",
              "lessThanOrEqual": "25.8.1"
            },
            {
              "status": "affected",
              "version": "4.0",
              "lessThan": "4.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "5.0",
              "lessThan": "5.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "6.0",
              "lessThan": "6.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "7.0",
              "lessThan": "7.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "8.0",
              "lessThan": "8.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "9.0",
              "lessThan": "9.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "10.0",
              "lessThan": "10.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "11.0",
              "lessThan": "11.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "12.0",
              "lessThan": "12.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "13.0",
              "lessThan": "13.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "14.0",
              "lessThan": "14.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "15.0",
              "lessThan": "15.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "16.0",
              "lessThan": "16.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "17.0",
              "lessThan": "17.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "18.0",
              "lessThan": "18.*",
              "versionType": "semver"
            },
            {
              "status": "affected",
              "version": "19.0",
              "lessThan": "19.*",
              "versionType": "semver"
            }
          ],
          "defaultStatus": "unaffected"
        }
      ]
    }
  ],
  "published": "2026-03-30T20:16:19.397",
  "references": [
    {
      "url": "https://nodejs.org/en/blog/vulnerability/march-2026-security-releases",
      "tags": [
        "Vendor Advisory"
      ],
      "source": "support@hackerone.com"
    }
  ],
  "vulnStatus": "Analyzed",
  "weaknesses": [
    {
      "type": "Secondary",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
      "description": [
        {
          "lang": "en",
          "value": "CWE-208"
        }
      ]
    }
  ],
  "descriptions": [
    {
      "lang": "en",
      "value": "A flaw in Node.js HMAC verification uses a non-constant-time comparison when validating user-provided signatures, potentially leaking timing information proportional to the number of matching bytes. Under certain threat models where high-resolution timing measurements are possible, this behavior could be exploited as a timing oracle to infer HMAC values.\r\n\r\nNode.js already provides timing-safe comparison primitives used elsewhere in the codebase, indicating this is an oversight rather than an intentional design decision.\r\n\r\nThis vulnerability affects **20.x, 22.x, 24.x, and 25.x**."
    },
    {
      "lang": "es",
      "value": "Un fallo en la verificación HMAC de Node.js utiliza una comparación de tiempo no constante al validar firmas proporcionadas por el usuario, filtrando potencialmente información de temporización proporcional al número de bytes coincidentes. Bajo ciertos modelos de amenaza donde las mediciones de temporización de alta resolución son posibles, este comportamiento podría ser explotado como un oráculo de temporización para inferir valores HMAC.\n\nNode.js ya proporciona primitivas de comparación seguras contra ataques de temporización utilizadas en otras partes de la base de código, lo que indica que esto es un descuido en lugar de una decisión de diseño intencional.\n\nEsta vulnerabilidad afecta 20.x, 22.x, 24.x y 25.x."
    }
  ],
  "lastModified": "2026-08-19T13:36:43.997",
  "configurations": [
    {
      "nodes": [
        {
          "negate": false,
          "cpeMatch": [
            {
              "criteria": "cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:*",
              "vulnerable": true,
              "matchCriteriaId": "42C896A4-ABB4-4DF3-8F8B-320C8E8E6AA3",
              "versionEndIncluding": "20.20.1"
            },
            {
              "criteria": "cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:*",
              "vulnerable": true,
              "matchCriteriaId": "5317F856-6549-4E7C-B6B8-811DE991E7A7",
              "versionEndIncluding": "22.22.1",
              "versionStartIncluding": "22.0.0"
            },
            {
              "criteria": "cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:*",
              "vulnerable": true,
              "matchCriteriaId": "DD9D3210-E42B-4584-817D-DAC5F1234234",
              "versionEndIncluding": "24.14.0",
              "versionStartIncluding": "24.0.0"
            },
            {
              "criteria": "cpe:2.3:a:nodejs:node.js:*:*:*:*:-:*:*:*",
              "vulnerable": true,
              "matchCriteriaId": "89D03065-041A-4A59-95C4-B2AE7EE36439",
              "versionEndIncluding": "25.8.1",
              "versionStartIncluding": "25.0.0"
            }
          ],
          "operator": "OR"
        }
      ]
    }
  ],
  "sourceIdentifier": "support@hackerone.com"
}