CVE-2026-86219
Critical · 9.8CVSS
9.8
EPSS
0.5%
Published
Sep 6, 2026
CISA due date
—
Cloudanix analysis
A login library used by some Perl-based services can be tricked with a copied earlier login message so an outsider can get in as someone else without knowing their password.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- Library
- Class
- Authentication Bypass
- Remediation
- Upgrade
- Effort
- Low
- Patch risk
- Low
What it actually does
Authen::SASL::Perl::DIGEST_MD5 before 2.2100 fails to bind the client DIGEST-MD5 response to the nonce the server issued in server_start. server_step computes the expected response digest from client-supplied parameters, so a captured response verifies whenever its digest matches the nonce it carries. The nonce-count table is keyed on that client-supplied nonce and starts empty in each new server object, so a captured first response with nc=00000001 also passes the count check. The result is a complete SASL authentication bypass: a replay authenticates as the original user without the password.
Why it matters to the business
Any service authenticating users with this Perl DIGEST-MD5 SASL implementation can be accessed as a legitimate user by anyone who previously observed a successful login, enabling account takeover, unauthorized data access, and integrity loss without stealing credentials. CVSS 9.8 reflects network reachability with no privileges or user interaction. The issue is not in CISA KEV, has no reported ransomware use, and exploit maturity is currently none, but it has been public for about 30 days—treat it as a high-priority patch wherever Perl SASL DIGEST-MD5 is in the authentication path.
How an attack unfolds
An attacker who can observe a successful SASL DIGEST-MD5 exchange with qop=auth records the client’s authentication response. Later they open a new session to the same service, host, realm, and user and submit that captured response. Because the server never compares the returned nonce to the challenge it generated, and because nonce-count state does not persist across server objects, the replay is accepted and the attacker is authenticated as the victim without knowing the password.
How to fix it
Upgrade Authen::SASL so Authen::SASL::Perl::DIGEST_MD5 is 2.2100 or later, which is the version that enforces nonce verification per RFC 2831. Inventory Perl applications, mail, LDAP, XMPP, and other SASL clients/servers that pull in this module. If an immediate upgrade is not possible, disable the DIGEST-MD5 SASL mechanism and prefer modern mechanisms such as SCRAM; terminate SASL only inside TLS and add compensating authentication controls until the patched module is deployed.
How to confirm the fix worked
Confirm the installed Authen::SASL / DIGEST_MD5 module version is 2.2100 or newer on every host that performs SASL DIGEST-MD5. Review SASL mechanism lists to ensure DIGEST-MD5 is not offered on unpatched instances. After upgrade, verify that a client response whose nonce does not match the server challenge is rejected and that nonce-count state is not accepted solely from client-supplied values. Search dependency lockfiles and CPAN/OS packages for Authen::SASL versions below 2.2100.
Typical attack path
- Observe a successful SASL DIGEST-MD5 (qop=auth) exchange for a target user, service, host, and realm
- Capture the client authentication response (nonce, nonce-count, digest, and related parameters)
- Open a new SASL DIGEST-MD5 session to the same service, host, realm, and user
- Submit the captured response in the client authentication step
- Obtain an authenticated session as that user without the password
How to detect it
This is a credential-replay authentication bypass, so look for evidence of the same DIGEST-MD5 client response succeeding more than once rather than a new implant. Review SASL, application, mail, LDAP, and XMPP authentication logs for DIGEST-MD5 successes where the nonce is reused across sessions or where nc=00000001 appears with a nonce previously seen for that user, realm, and host. Correlate multiple successful authentications for one user from different source addresses or session IDs with identical digest-response fields. On hosts, identify processes still loading Authen/SASL/Perl/DIGEST_MD5.pm from a package older than 2.2100. There are no named threat actors or public exploit artifacts associated with this CVE at publication plus 30 days; absence of malware IOCs does not rule out silent replays.
- Authen::SASL::Perl::DIGEST_MD5
- Authen/SASL/Perl/DIGEST_MD5.pm
- SASL mechanism=DIGEST-MD5
- qop=auth
- nc=00000001
- DIGEST-MD5 nonce reuse across sessions
What your security team should do
- Patch Authen::SASL::Perl::DIGEST_MD5 to 2.2100 or later on all SASL-authenticating Perl services as a priority, despite no KEV listing or known public exploit
- Inventory and disable DIGEST-MD5 where the module cannot be upgraded immediately; prefer SCRAM or other non-DIGEST mechanisms over TLS
- Hunt authentication logs for reused DIGEST-MD5 nonces and repeated nc=00000001 responses for the same user/realm across distinct sessions
- Require TLS for SASL and review privileged accounts that authenticated via DIGEST-MD5 in the last 30 days
- Track CPAN and OS package updates and add version pinning so the module cannot regress below 2.2100
The record
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.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-87952 Authentication Bypass by Capture-replay vulnerability in Drupal SAML SSO - Service… CWE-294
- CVE-2026-88278 GeoVision GV-LPC2211 V1.13 fails to enforce WS-Security UsernameToken freshness or nonce… CWE-294
- CVE-2026-55250 Maravel, a PHP framework oriented towards dependency injection, prior to version 10.74.0… CWE-294
- CVE-2026-73312 XenForo before 2.3.13 contains a refresh token replay vulnerability that allows attackers… CWE-294
- CVE-2026-73311 XenForo before 2.3.13 contains an OAuth2 authorization code reuse vulnerability that… CWE-294
- CVE-2026-53636 Open edX Platform enables the authoring and delivery of online learning at any scale. CWE-294
- CVE-2026-12704 When SAML IdP-initiated login is enabled in Grafana Enterprise, the SAML library skips… CWE-294
- CVE-2026-84306 Filament is a collection of full-stack components for accelerated Laravel development. CWE-294