CVE-2026-8700 Overview
CVE-2026-8700 affects the Crypt::DSA Perl module in versions before 1.20. The module generates Digital Signature Algorithm (DSA) key seeds using Perl's built-in rand function. Perl's rand is a pseudo-random number generator unsuitable for cryptographic use, producing predictable output. An attacker who can predict or reproduce the seed can recover or forge DSA keys generated by the affected versions. The flaw is classified as [CWE-331: Insufficient Entropy].
Critical Impact
DSA keys generated by Crypt::DSA before version 1.20 rely on a predictable random source, undermining the confidentiality and integrity guarantees of any signatures or keys produced by the module.
Affected Products
- Crypt::DSA Perl module versions before 1.20
- Perl applications and tooling that depend on Crypt::DSA for key generation
- Distributions bundling vulnerable releases of Crypt-DSA from CPAN
Discovery Timeline
- 2026-05-15 - CVE-2026-8700 published to the National Vulnerability Database (NVD)
- 2026-05-15 - Issue discussed publicly via the OpenWall oss-security mailing list
- 2026-05-18 - Last updated in NVD database
Technical Details for CVE-2026-8700
Vulnerability Analysis
The Crypt::DSA module implements the Digital Signature Algorithm for Perl. DSA key generation requires a high-entropy seed to produce the prime parameters and private key value x. In versions before 1.20, the KeyChain.pm component calls Perl's built-in rand function to generate this seed. Perl's rand is backed by a non-cryptographic pseudo-random number generator. Its internal state is small and its output can be reproduced by an attacker who can guess or recover the seed value, which is often derived from process start time or similar low-entropy sources. Any DSA key, signature nonce, or seed produced through this path therefore lacks the entropy required by the DSA specification. Patch details are available in the MetaCPAN release diff for Crypt-DSA 1.20.
Root Cause
The root cause is the use of a non-cryptographic random number generator for security-sensitive operations. Perl's rand does not provide the unpredictability required for key material. This maps directly to [CWE-331: Insufficient Entropy]. A cryptographically secure source such as /dev/urandom or Crypt::URandom is required for seed generation.
Attack Vector
An attacker who obtains a DSA public key or signature generated by an affected version can attempt to reproduce the seed used during key generation. Because Perl's rand state space is limited and often seeded from predictable values, the attacker can enumerate candidate seeds offline and reconstruct the private key. The attacker does not need network access to the victim system to perform this recovery once a public artifact is available. Subsequent signatures forged with the recovered key will validate against the legitimate public key.
No verified public exploit code is available for CVE-2026-8700. Refer to the MetaCPAN release changes for Crypt-DSA 1.20 for the upstream fix.
Detection Methods for CVE-2026-8700
Indicators of Compromise
- DSA key pairs generated by Perl tooling that imports Crypt::DSA at versions earlier than 1.20
- Build manifests, cpanfile, or Makefile.PL files pinning Crypt-DSA to 1.19 or earlier
- Long-lived DSA signing keys whose creation predates deployment of the patched module
Detection Strategies
- Inventory installed Perl modules across hosts and identify any Crypt::DSA version below 1.20 using cpan -l or corelist style tooling.
- Scan source repositories and CI pipelines for direct or transitive dependencies on vulnerable Crypt-DSA releases.
- Flag applications that invoke Crypt::DSA::KeyChain for key generation and correlate with deployment timelines to identify potentially weak keys.
Monitoring Recommendations
- Track CPAN dependency changes through software composition analysis and alert on installations of Crypt-DSA below 1.20.
- Monitor authentication and signature verification logs for anomalies on services that rely on DSA keys produced by Perl tooling.
- Audit certificate and key stores for DSA keys generated on systems known to have run vulnerable versions and schedule them for rotation.
How to Mitigate CVE-2026-8700
Immediate Actions Required
- Upgrade Crypt::DSA to version 1.20 or later on all systems that use the module.
- Treat any DSA key, seed, or signature produced by an affected version as untrusted and rotate it.
- Replace existing DSA keys with new keys generated by patched software, preferably using a modern algorithm such as Ed25519 where feasible.
Patch Information
The maintainer released Crypt-DSA 1.20, which replaces the use of Perl's rand with a cryptographically secure entropy source in lib/Crypt/DSA/KeyChain.pm. Review the MetaCPAN release diff and the release changes for the upstream fix. Distribution package maintainers should rebuild and republish dependent packages against the fixed release.
Workarounds
- Where immediate upgrade is not possible, replace direct calls to Crypt::DSA key generation with code that supplies entropy from Crypt::URandom or /dev/urandom.
- Restrict key generation to hosts running the patched 1.20 release and distribute keys to other systems out of band.
- Migrate signature workflows away from DSA to algorithms supported by actively maintained Perl crypto modules.
# Upgrade Crypt::DSA to the patched release via cpanm
cpanm Crypt::DSA@1.20
# Verify the installed version
perl -MCrypt::DSA -E 'say $Crypt::DSA::VERSION'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


