Description
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.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| LEONT | Crypt::Argon2 | 0.017 – < 0.031 | 0.031 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | libcrypt-argon2-perl | 0.031-1 | — |
| Debian 13 | libcrypt-argon2-perl | No fix yet | — |
| Debian 12 | libcrypt-argon2-perl | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 26.10 | libcrypt-argon2-perl | No fix yet | — |
| Ubuntu 26.04 LTS | libcrypt-argon2-perl | No fix yet | — |
| Ubuntu 25.10 | libcrypt-argon2-perl | No fix yet | — |
| Ubuntu 24.04 LTS | libcrypt-argon2-perl | No fix yet | — |
Alpine
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Alpine v3.24 | perl-crypt-argon2 | 0.031-r0 | — |