Description
CryptX versions before 0.088 for Perl do not reseed the Crypt::PK PRNG state after forking.

The Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::DH, Crypt::PK::ECC, Crypt::PK::Ed25519 and Crypt::PK::X25519 modules seed a per-object PRNG state in their constructors and reuse it without fork detection. A Crypt::PK::* object created before `fork()` shares byte-identical PRNG state with every child process, and any randomized operation they perform can produce identical output, including key generation. Two ECDSA or DSA signatures from different processes are enough to recover the signing private key through nonce-reuse key recovery.

This affects preforking services such as the Starman web server, where a Crypt::PK::* object loaded at startup is inherited by every worker process.
Published: 2026-04-23
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Predictable Randomness Leading to Key Compromise
Action: Immediate Patch
AI Analysis

Impact

CryptX versions prior to 0.088 for Perl do not reseed the state of the Crypt::PK pseudo‑random number generator after a process fork. The Crypt::PK::* classes seed a dedicated PRNG during construction and then reuse that state without detecting forking, meaning a Crypt::PK::* object created before fork shares an identical PRNG state with every child process. Operations that rely on this PRNG, such as key generation or signature creation, can thus produce identical outcomes across processes. This nonce‑reuse flaw enables an attacker who can obtain distinct ECDSA or DSA signatures from separate processes to recover the signing private key, resulting in full key compromise.

Affected Systems

The vulnerability impacts any Perl application that loads CryptX before version 0.088, specifically the Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::DH, Crypt::PK::ECC, Crypt::PK::Ed25519, and Crypt::PK::X25519 modules. Commonly affected environments include preforking web servers such as Starman that instantiate Crypt::PK::* objects at startup and inherit them in worker processes.

Risk and Exploitability

The CVSS score of 7.5 indicates a high severity, while the EPSS score of less than 1% suggests a low probability of exploitation. The vulnerability is not listed in CISA KEV, implying it has not been widely confirmed as actively exploited. An attacker would need the ability to trigger cryptographic operations in separate forked processes, which can be achieved through a preforking service that exposes signature or key‑generation functions, or by collecting executions from existing keys that were created before fork. Once two distinct signatures from different processes are available, key recovery is straightforward. The attack is considered local or requires out‑of‑band access unless the application publicly exposes the cryptographic functions. Because the flaw allows key material reuse across workers, the risk extends to all users of a preforking application that does not reseed the PRNG after fork.

Generated by OpenCVE AI on April 28, 2026 at 14:57 UTC.

Remediation

Vendor Solution

Upgrade to CryptX 0.088 or later, or apply the upstream patch. Applying the fix does not retroactively protect keys that may already have been exposed. On an affected version, any private key used with or generated by a Crypt::PK::* object created before `fork()` should be assessed for rotation.


OpenCVE Recommended Actions

  • Upgrade CryptX to version 0.088 or later, or apply the upstream patch provided by the maintainer.
  • Rotate any private key or key material that was created or used by a Crypt::PK::* object before forking; the fix does not protect keys that may already have been exposed.
  • Modify preforking services so that Crypt::PK::* objects are instantiated after fork or reinitialize the PRNG state in each child process to prevent state sharing.

Generated by OpenCVE AI on April 28, 2026 at 14:57 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 12 May 2026 13:45:00 +0000

Type Values Removed Values Added
First Time appeared Dcit
Dcit cryptx
CPEs cpe:2.3:a:dcit:cryptx:*:*:*:*:*:perl:*:*
Vendors & Products Dcit
Dcit cryptx

Tue, 28 Apr 2026 09:45:00 +0000

Type Values Removed Values Added
First Time appeared Mik
Mik cryptx
Vendors & Products Mik
Mik cryptx

Thu, 23 Apr 2026 13:15:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N'}

ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 23 Apr 2026 10:30:00 +0000

Type Values Removed Values Added
References

Thu, 23 Apr 2026 08:00:00 +0000

Type Values Removed Values Added
Description CryptX versions before 0.088 for Perl do not reseed the Crypt::PK PRNG state after forking. The Crypt::PK::RSA, Crypt::PK::DSA, Crypt::PK::DH, Crypt::PK::ECC, Crypt::PK::Ed25519 and Crypt::PK::X25519 modules seed a per-object PRNG state in their constructors and reuse it without fork detection. A Crypt::PK::* object created before `fork()` shares byte-identical PRNG state with every child process, and any randomized operation they perform can produce identical output, including key generation. Two ECDSA or DSA signatures from different processes are enough to recover the signing private key through nonce-reuse key recovery. This affects preforking services such as the Starman web server, where a Crypt::PK::* object loaded at startup is inherited by every worker process.
Title CryptX versions before 0.088 for Perl do not reseed the Crypt::PK PRNG state after forking
Weaknesses CWE-335
CWE-338
References

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-04-23T13:05:22.853Z

Reserved: 2026-04-21T12:45:20.132Z

Link: CVE-2026-41564

cve-icon Vulnrichment

Updated: 2026-04-23T09:33:41.857Z

cve-icon NVD

Status : Analyzed

Published: 2026-04-23T08:16:01.243

Modified: 2026-05-12T13:39:52.800

Link: CVE-2026-41564

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-04-28T15:00:14Z

Weaknesses