Loading...
Skip to main content

CVE-2025-24015

HIGH

Deno's AES GCM authentication tags are not verified

Published June 4, 2025Updated June 4, 2025Source: osv

Summary

### Summary This affects AES-256-GCM and AES-128-GCM in Deno, introduced by commit [0d1beed](https://github.com/denoland/deno/commit/0d1beed). Specifically, the authentication tag is not being validated. This means tampered ciphertexts or incorrect keys might not be detected, which breaks the guarantees expected from AES-GCM. Older versions of Deno correctly threw errors in such cases, as does Node.js. Without authentication tag verification, AES-GCM degrades to essentially CTR mode, removing integrity protection. Authenticated data set with set_aad is also affected, as it is incorporated into the GCM hash (ghash) but this too is not validated, rendering AAD checks ineffective. ### PoC ```ts import { Buffer } from "node:buffer"; import { createCipheriv, createDecipheriv, randomBytes, scrypt, } from "node:crypto"; type Encrypted = { salt: string; iv: string; enc: string; authTag: string; }; const deriveKey = (key: string, salt: Buffer) => new Promise<Buffer>((res, rej) => scrypt(key, salt, 32, (err, k) => { if (err) rej(err); else res(k); }) ); async function encrypt(text: string, key: string): Promise<Encrypted> { const salt = randomBytes(32); const k = await deriveKey(key, salt); const iv = randomBytes(16); const enc = createCipheriv("aes-256-gcm", k, iv); const ciphertext = enc.update(text, "binary", "binary") + enc.final("binary"); return { salt: salt.toString("binary"), iv: iv.toString("binary"), enc: ciphertext, authTag: enc.getAuthTag().toString("binary"), }; } async function decrypt(enc: Encrypted, key: string) { const k = await deriveKey(key, Buffer.from(enc.salt, "binary")); const dec = createDecipheriv("aes-256-gcm", k, Buffer.from(enc.iv, "binary")); const out = dec.update(enc.enc, "binary", "binary"); dec.setAuthTag(Buffer.from(enc.authTag, "binary")); return out + dec.final("binary"); } const test = await encrypt("abcdefghi", "key"); test.enc = ""; console.log(await decrypt(test, "")); // no error ``` ### Impact While discovered through experimentation, authentication failures that should raise errors may be silently ignored.

Remediation

Upgrade to the fixed version using your package manager.

Cargo
Update deno to 2.1.7 or later
cargo update -p deno --precise 2.1.7
Cargo
Update deno_node to 0.125.0 or later
cargo update -p deno_node --precise 0.125.0

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (2)

PackageEcosystemAffectedFixed In
deno
crates.io
All versions2.1.7
deno_node
crates.io
All versions0.125.0

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

  • CWE-347
    Improper Verification of Cryptographic SignatureMITRE

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 7.5 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Confidentiality
Integrity
Availability

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:P

Frequently Asked Questions

What is CVE-2025-24015?
Deno's AES GCM authentication tags are not verified This vulnerability has been assigned a severity rating of HIGH (CVSS score: 7.5/10).
How do I check if my project is affected by CVE-2025-24015?
CVE-2025-24015 affects deno and deno_node. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2025-24015 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
7.5

High exploitability or significant impact. Prioritize remediation within days.

Also Known As

GHSA-2x3r-hwv5-p32x

Related CVEs

  • CVE-2026-22864
    HIGH

    Deno has an incomplete fix for command-injection prevention on Windows — case-insensitive extension bypass

  • CVE-2024-27936
    HIGH

    Deno's deno_runtime vulnerable to interactive permission prompt spoofing via improper ANSI stripping

  • CVE-2023-22499
    HIGH

    Deno is vulnerable to race condition via interactive permission prompt spoofing

  • CVE-2023-33966
    HIGH

    Missing "--allow-net" permission check for built-in Node modules

  • CVE-2023-28446
    HIGH

    Interactive `run` permission prompt spoofing via improper ANSI neutralization

  • CVE-2024-27935
    HIGH

    Deno's Node.js Compatibility Runtime has Cross-Session Data Contamination

  • CVE-2025-48935
    MEDIUM

    Deno has --allow-read / --allow-write permission bypass in `node:sqlite`

  • CVE-2026-49411
    MEDIUM

    Deno: Node TCPWrap numeric hostname aliases bypass --deny-net resolved-IP deny checks

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies