Skip to main content

Crypt::Argon2 CVE-2026-8463

| EUVDEUVD-2026-29956 MEDIUM
Buffer Over-read (CWE-126)
2026-05-13 CPANSec GHSA-3p6c-7qjr-35x9
5.3
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Target account with empty stored hash
  2. Delivery
    Application fetches empty hash from storage
  3. Exploit
    argon2_verify called with zero-length encoded string
  4. Execution
    size_t underflow passes SIZE_MAX to memchr
  5. Persist
    OOB heap read occurs
  6. Impact
    Process crash (DoS) or heap byte position leaked

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Buffer over-read prevention
Exploitation Conditions

The triggering condition is precise: argon2_verify must receive a zero-length (empty string) value as its encoded hash argument. This arises when a caller does not validate that the hash retrieved from storage is non-empty before invoking verify - for example, when a database column storing hashes permits NULL values and the ORM or DBI layer materializes NULL as an empty string, or when placeholder/seed records exist in the credential store. CVSS AV:N/AC:L/PR:N/UI:N indicates the vulnerable code path can be reached over the network without authentication if argon2_verify is called within an unauthenticated login handler; however, the attacker cannot directly supply the encoded hash argument - they can only influence whether the application fetches and passes an empty hash. Exploitation is limited by: (1) the attacker must induce the application to call argon2_verify with an empty hash (typically by targeting an account whose stored hash is empty, not by controlling the argument directly); (2) there is no attacker control over which heap bytes are read, making reliable information extraction non-trivial; (3) impact is process crash or incidental heap byte leakage, not arbitrary code execution; (4) non-default deployment - applications that validate hash non-emptiness before verification are unaffected.

Impact

The CVSS 5.3 Medium vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L) describes a network-reachable, unauthenticated path to partial availability impact. However, multiple converging signals indicate this is lower real-world priority than the network-vector score alone suggests. EPSS sits at 0.03% (9th percentile), SSVC rates exploitation as 'none' and automatable as 'no', and no public proof-of-concept or KEV listing exists. SSVC's 'Automatable: no' likely reflects that reliable exploitation requires the application to present an empty string to argon2_verify - an edge case dependent on specific storage or input-validation patterns rather than a universally triggerable code path. One potential discrepancy worth noting: CVSS rates confidentiality impact C:N, but the CVE description explicitly mentions leakage of a '$' byte position from adjacent heap allocations. Whether this constitutes an exploitable information disclosure beyond process crash is not independently confirmed by vendor or NVD, so it should be treated as a theoretical risk inferred from the description rather than a confirmed impact.

Exploit ScenarioDerived

An application with a user authentication endpoint retrieves a stored Argon2 hash from a database; a placeholder, newly-created, or improperly initialized account row contains an empty string rather than a valid hash. The application passes this empty string directly to argon2_verify for comparison, triggering the size_t underflow. memchr scans up to SIZE_MAX bytes of adjacent heap memory: in the best case for the attacker this crashes the Perl process (denial of service against the authentication service), and in an information-disclosure scenario the position of a '$' byte in adjacent heap allocations is returned to the parser, which may influence subsequent parsing behavior. No public proof-of-concept has been identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jun 08, 2026

Heap out-of-bounds read in Crypt::Argon2 for Perl (versions 0.017 through 0.030) exposes applications to process crash or heap memory leakage when argon2_verify is called with an empty encoded hash string. The defect is a size_t integer underflow: the auto-detect variant of argon2_verify subtracts 1 from encoded_len without a zero-check, wrapping to SIZE_MAX and causing memchr to scan up to SIZE_MAX bytes of adjacent heap memory. No public exploit has been identified and no CISA KEV listing exists; EPSS is 0.03% (9th percentile), consistent with the SSVC assessment of exploitation status 'none'.

RemediationAI

Upgrade Crypt::Argon2 to version 0.031 or later via CPAN using 'cpan install Crypt::Argon2' or 'cpanm Crypt::Argon2'. Version 0.031 is confirmed as the vendor-released patched release per the changelog at https://metacpan.org/release/LEONT/Crypt-Argon2-0.031/changes and the patch commit at https://github.com/Leont/crypt-argon2/commit/92eac03ce63d541e0ead7ea5a89b9b67ce0c0e64.patch. As a compensating control before patching, applications should add an explicit non-empty check on the encoded hash string before calling argon2_verify - for example, rejecting any stored hash that is undef, NULL, or zero-length at the application layer before it reaches the XS function. This can be enforced with a simple Perl length() or defined-and-length guard at no performance cost and eliminates the triggering condition entirely. Applications using ORMs or database abstractions that may silently coerce NULL columns to empty strings are particularly advised to audit this call path.

Affected VersionsENISA

Crypt::Argon2 0.017 <0.031

Affected Packages

euvd crypt_argon2 fix: 0.031

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Crypt::Argon2 is a Perl XS (C extension) module wrapping the Argon2 password hashing algorithm, distributed via CPAN under author LEONT (CPE: cpe:2.3:a:leont:crypt::argon2:*:*:*:*:*:*:*:*). The flaw resides in Argon2.xs in the auto-detect form of argon2_verify, which must identify the Argon2 variant (2d, 2i, 2id) by scanning for a '$' separator byte. The root cause is CWE-126 (Buffer Over-Read): the expression encoded_len - 1 is computed as a size_t (unsigned) argument to memchr without first checking that encoded_len is non-zero. On 64-bit systems this underflow produces SIZE_MAX (2^64-1), causing memchr to scan nearly unbounded adjacent heap memory. The fix confirmed in the commit diff is a single conditional guard - encoded_len ? memchr(encoded_raw + 1, '$', encoded_len - 1) : NULL - followed by an explicit Perl exception if the separator is absent, preventing the out-of-bounds scan entirely.

Know when Crypt gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

NVD PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

Primary rating from NVD · only source for this CVE.

CVSS VectorNVD

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

Lifecycle Timeline

2
CVSS changed
May 13, 2026 - 18:22 NVD
5.3 (MEDIUM)
CVE Published
May 13, 2026 - 12:40 nvd
UNKNOWN (no severity yet)

DescriptionCVE.org

Crypt::Argon2 versions from 0.017 before 0.031 for Perl perform a heap out-of-bounds read in argon2_verify on empty encoded input.

The auto-detect form of argon2_verify passes encoded_len - 1 as the length argument to memchr without checking that encoded_len is non-zero. When the encoded string is empty, the size_t subtraction underflows to SIZE_MAX and memchr scans adjacent heap memory looking for a '$' separator byte.

A caller that invokes argon2_verify against a stored hash that may legitimately be empty (for example a placeholder row or a NULL column materialised as an empty string) reads out-of-bounds heap memory, which can crash the process or leak the position of an adjacent '$' byte into subsequent parsing.

Threat Intelligence Overview

EPSS Score
0.0%
Top 91% exploitable
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

More in Crypt

View all
CVE-2026-16235 CRITICAL
9.8 Jul 20

Predictable salt generation in Crypt::Password through version 0.28 for Perl weakens the security of stored password has

CVE-2026-30909 CRITICAL
9.8 Mar 08

Perl Crypt::NaCl::Sodium module through 2.002 has potential integer overflows in cryptographic operations that could wea

CVE-2025-15444 CRITICAL
9.8 Jan 06

Crypt::Sodium::XS for Perl bundles a vulnerable version of libsodium (<= 1.0.20) that has a signature verification flaw.

CVE-2026-9265 CRITICAL
9.1 Jun 20

Heap out-of-bounds read in the Perl module Crypt::OpenSSL::PKCS12 before version 1.96 lets a crafted PKCS#12 file leak a

CVE-2026-58102 CRITICAL
9.1 Jul 13

Heap out-of-bounds read in the Crypt::OpenSSL::X509 Perl module (versions before 2.1.3) lets a crafted X.509 certificate

CVE-2026-2588 CRITICAL
9.1 Feb 23

Integer overflow in Crypt::NaCl::Sodium Perl module through version 2.001 on 32-bit systems. The Sodium.xs binding casts

CVE-2026-14570 HIGH
7.5 Jul 05

Private-key recovery in the Crypt::DSA Perl module (all versions before 1.22) stems from a biased random number generato

CVE-2026-17510 HIGH
7.5 Aug 09

NULL pointer dereference in Crypt::OpenSSL::PKCS12 before version 1.98 for Perl enables process crashes when any caller

CVE-2026-6656 HIGH
7.5 Jul 20

Timing side-channel in the Crypt::Password Perl module (versions through 0.28) allows attackers to incrementally guess a

CVE-2026-58101 HIGH
7.5 Jul 13

Denial of service in the Crypt::OpenSSL::X509 Perl module before 2.1.3 lets a malformed X.509 certificate crash any Perl

CVE-2026-2597 HIGH
7.5 Feb 27

Heap buffer overflow in Crypt::SysRandom::XS before version 0.010 allows denial of service through negative length param

CVE-2026-2474 HIGH
7.5 Feb 16

Heap buffer overflow in Perl's Crypt::URandom module (versions 0.41-0.54) allows denial of service through integer wrapa

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy