Authen::SASL::Perl::DIGEST_MD5 versions before 2.2100 for Perl accept replayed authentication responses via unverified nonce in server_step
Authen::SASL::Perl::DIGEST_MD5 versions before 2.2100 for Perl accept replayed authentication responses via unverified nonce in server_step. server_start generates a fresh nonce and sends it in the challenge, and nothing later compares that value against the nonce the client returns. server_step derives the expected digest from the client's own parameters, so a response verifies whenever its digest matches the nonce it carries. The count table it also checks is keyed on the client-supplied nonce and starts empty in each new server object, so a captured first response, carrying `nc=00000001`, passes that too. RFC 2831 defines the nonce in the response as the value the server sent in the preceding challenge. An attacker who observes one successful `qop=auth` exchange can replay the captured response against a later session for the same service, host, realm and user, and authenticate as that user without knowing the password.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-86219
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 3 Nov 2026, 06:13 UTC · Revision 1
Source evidence
Authen::SASL::Perl::DIGEST_MD5 versions before 2.2100 for Perl accept replayed authentication responses via unverified nonce in server_step
core-osv · Original sourcePublished 6 Sept 2026, 17:46 UTC
Authen::SASL::Perl::DIGEST_MD5 versions before 2.2100 for Perl accept replayed authentication responses via unverified nonce in server_step. server_start generates a fresh nonce and sends it in the challenge, and nothing later compares that value against the nonce the client returns. server_step derives the expected digest from the client's own parameters, so a response verifies whenever its digest matches the nonce it carries. The count table it also checks is keyed on the client-supplied nonce and starts empty in each new server object, so a captured first response, carrying `nc=00000001`, passes that too. RFC 2831 defines the nonce in the response as the value the server sent in the preceding challenge. An attacker who observes one successful `qop=auth` exchange can replay the captured response against a later session for the same service, host, realm and user, and authenticate as that user without knowing the password.
osv:CVE-2026-86219
Complete source record
{
"id": "78895fa4bf00d4cbc1bc0569f90e4ce0651fc0c8a3bbbb68b6ce6dbda4dd046d",
"url": "https://osv.dev/vulnerability/CVE-2026-86219",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Authen::SASL::Perl::DIGEST_MD5 versions before 2.2100 for Perl accept replayed authentication responses via unverified nonce in server_step",
"summary": "Authen::SASL::Perl::DIGEST_MD5 versions before 2.2100 for Perl accept replayed authentication responses via unverified nonce in server_step. server_start generates a fresh nonce and sends it in the challenge, and nothing later compares that value against the nonce the client returns. server_step derives the expected digest from the client's own parameters, so a response verifies whenever its digest matches the nonce it carries. The count table it also checks is keyed on the client-supplied nonce and starts empty in each new server object, so a captured first response, carrying `nc=00000001`, passes that too. RFC 2831 defines the nonce in the response as the value the server sent in the preceding challenge. An attacker who observes one successful `qop=auth` exchange can replay the captured response against a later session for the same service, host, realm and user, and authenticate as that user without knowing the password.",
"evidence": "osv:CVE-2026-86219",
"products": [],
"severity": "critical",
"structured": {
"id": "CVE-2026-86219",
"aliases": [
"CVE-2026-86219"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/perl-authen-sasl/perl-authen-sasl",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "57a740d54087fa822d8660a0c7d823ca5b1217ae"
},
{
"fixed": "94337367030612842924f697cead29964a96448d"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "0"
},
{
"fixed": "2.2100"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"range": [
{
"fixed": "94337367030612842924f697cead29964a96448d"
}
],
"source": "REFERENCES_COMMIT"
}
]
}
}
],
"versions": [
"v2.2000",
"v2.1900",
"v2.1800",
"v2.1700",
"v2.16",
"v2.15",
"v2.14",
"v2.13",
"v2.12",
"v2.11"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-86219.json"
}
}
],
"modified": "2026-10-28T02:30:26.272490548Z",
"provider": "osv",
"references": [
"https://cpan.org/modules",
"https://datatracker.ietf.org/doc/html/rfc2831#section-2.1.2",
"https://metacpan.org/release/EHUELS/Authen-SASL-2.2000/source/lib/Authen/SASL/Perl/DIGEST_MD5.pm#L203-222",
"https://metacpan.org/release/EHUELS/Authen-SASL-2.2000/source/lib/Authen/SASL/Perl/DIGEST_MD5.pm#L410-414",
"https://www.cve.org/CVERecord?id=CVE-2025-40918",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/86xxx/CVE-2026-86219.json",
"https://metacpan.org/release/EHUELS/Authen-SASL-2.2100/changes",
"https://nvd.nist.gov/vuln/detail/CVE-2026-86219",
"https://github.com/perl-authen-sasl/perl-authen-sasl/commit/94337367030612842924f697cead29964a96448d.patch",
"https://github.com/perl-authen-sasl/perl-authen-sasl"
],
"provider_metadata": {
"cwe_ids": [
"CWE-294"
],
"cna_assigner": "CPANSec",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/86xxx/CVE-2026-86219.json"
}
},
"related_cves": [
{
"value": "CVE-2026-86219",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 492966,
"published_at": "2026-09-06T17:46:30.34+00:00"
}