Description
Crypt::Age versions before 0.004 for Perl allow CPU exhaustion via an unbounded number of recipient stanzas, each costing an X25519 scalar multiplication in unwrap_file_key.

The header parser accepts any number of recipient stanzas, and unwrap_file_key tries every identity against every X25519 stanza. Each attempt runs a scalar multiplication, an HKDF and a ChaCha20-Poly1305 open. The header MAC cannot be checked first, because its key comes from the file key, which only a successful unwrap produces.

Each stanza is 98 bytes of attacker-chosen header and buys one scalar multiplication per identity held, and the file is rejected only after every one of them has run. A caller reaches this through decrypt, decrypt_file or decrypt_filehandle whenever it decrypts a file it did not write.
Published: 2026-10-20
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service
Action: Patch Immediately
AI Analysis

Impact

A flaw in the Crypt::Age Perl module allows an attacker to construct a ciphertext containing an unbounded number of recipient stanzas. Each stanza forces the library to perform an expensive X25519 scalar multiplication for every identity, followed by HKDF and ChaCha20-Poly1305 checks, before the file is rejected. The cumulative cost can exhaust CPU resources, leading to a denial‑of‑service condition. The issue is an example of CWE‑405 (Use of Unchecked Input Size) and CWE‑770 (Uncontrolled Resource Consumption).

Affected Systems

Perl applications that depend on the Crypt::Age library, specifically versions prior to 0.004, are affected. The vulnerability exists in the decrypt, decrypt_file, and decrypt_filehandle functions. Any environment that loads this module and performs decryption on external files is at risk.

Risk and Exploitability

The vulnerability can be triggered by supplying a crafted file with a large number of recipient stanzas to any decryption call. The attack vector is therefore through file input, which may be local or remote if the application accepts user‑supplied files. No public exploits are listed, and the EPSS score is < 1%, indicating a very low but nonzero probability of exploitation. The CVSS score of 7.5 reflects a moderate‑to‑high severity. While the vulnerability is not listed in the CISA KEV catalog, the combined effect of CPU exhaustion and the exponential cost per recipient stanza can severely degrade availability in shared or high‑traffic environments.

Generated by OpenCVE AI on October 30, 2026 at 14:50 UTC.

Remediation

Vendor Solution

Upgrade to Crypt-Age 0.004 or later.


OpenCVE Recommended Actions

  • Upgrade the Crypt::Age module to version 0.004 or later, which mitigates the CPU exhaustion issue.
  • If an upgrade is not immediately possible, refrain from decrypting untrusted files and insert a pre‑validation step that limits or rejects files with an exorbitant number of recipient stanzas.
  • Apply resource quotas or rate limiting to decryption operations to reduce the risk of sustained CPU abuse.

Generated by OpenCVE AI on October 30, 2026 at 14:50 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 30 Oct 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 30 Oct 2026 13:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Wed, 21 Oct 2026 17:15:00 +0000

Type Values Removed Values Added
First Time appeared Perl
Perl crypt::age
Vendors & Products Perl
Perl crypt::age

Wed, 21 Oct 2026 01:30:00 +0000

Type Values Removed Values Added
References

Tue, 20 Oct 2026 21:30:00 +0000

Type Values Removed Values Added
Description Crypt::Age versions before 0.004 for Perl allow CPU exhaustion via an unbounded number of recipient stanzas, each costing an X25519 scalar multiplication in unwrap_file_key. The header parser accepts any number of recipient stanzas, and unwrap_file_key tries every identity against every X25519 stanza. Each attempt runs a scalar multiplication, an HKDF and a ChaCha20-Poly1305 open. The header MAC cannot be checked first, because its key comes from the file key, which only a successful unwrap produces. Each stanza is 98 bytes of attacker-chosen header and buys one scalar multiplication per identity held, and the file is rejected only after every one of them has run. A caller reaches this through decrypt, decrypt_file or decrypt_filehandle whenever it decrypts a file it did not write.
Title Crypt::Age versions before 0.004 for Perl allow CPU exhaustion via an unbounded number of recipient stanzas, each costing an X25519 scalar multiplication in unwrap_file_key
Weaknesses CWE-405
CWE-770
References

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-10-30T13:01:33.954Z

Reserved: 2026-09-04T16:29:19.634Z

Link: CVE-2026-85783

cve-icon Vulnrichment

Updated: 2026-10-21T00:17:19.299Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-20T22:20:05.470

Modified: 2026-10-30T13:20:15.720

Link: CVE-2026-85783

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-30T15:00:15Z

Weaknesses
  • CWE-405

    Asymmetric Resource Consumption (Amplification)

  • CWE-770

    Allocation of Resources Without Limits or Throttling