Description
Dancer2 versions through 2.1.0 for Perl generate insecure session ids when required CSPRNG modules are unavailable.

Dancer2::Core::Role::SessionFactory::generate_id silently falls back to a built-in rand-derived session id unless both Math::Random::ISAAC::XS and Crypt::URandom are available.

The fallback session id is generated from a SHA-1 hash of a call to the built-in rand function, the absolute path of the Dancer2::Core::Role::SessionFactory module, an internal counter, the process id, the module instance memory address, and a shuffled string of characters (using the List::Util::shuffle function, which also uses the built-in rand function).

These are all low-entropy and easily guessed sources.

The built-in rand() function is seeded with 32-bits and considered unsuitable for security applications.

Predictable session ids could allow an attacker to gain access to systems.
Published: 2026-07-20
Score: 8.2 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Dancer2 versions through 2.1.0 generate session identifiers using an insecure fallback when the required cryptographically secure random number generator modules are not available. The fallback relies on a SHA‑1 hash of low‑entropy data such as a seeded rand() call, module paths, counters, and process identifiers, which are predictable. This weakness is a misuse of weak randomness and corresponds to CWE‑338 and CWE‑340. The result is that session IDs can be guessed, enabling an attacker to hijack sessions and gain unauthorized access to a system that uses the vulnerable framework.

Affected Systems

The vendor is CROMEDOME, providing the Dancer2 Perl framework. All releases up to and including version 2.1.0 are impacted when the optional Math::Random::ISAAC::XS and Crypt::URandom modules are missing from the application’s PERL5LIB path. Users deploying Dancer2 without these modules will receive insecure session IDs.

Risk and Exploitability

The CVSS score of 8.2 classifies this vulnerability as high severity, while the EPSS score of <1% indicates a very low current exploitation likelihood. The vulnerability is not listed in the CISA KEV catalog. Based on the description, the likely attack vector is that an adversary with access to a running Dancer2 application lacking the CSPRNG modules can predict session identifiers by recreating the deterministic fallback hash process. This allows session hijacking without special privileges, presenting a system‑wide risk for any user exposed to the vulnerable framework.

Generated by OpenCVE AI on August 4, 2026 at 18:00 UTC.

Remediation

Vendor Workaround

Ensure Crypt::URandom and Math::Random::ISAAC::XS modules are installed in the application PERL5LIB path.


OpenCVE Recommended Actions

  • Install the Crypt::URandom and Math::Random::ISAAC::XS modules into the application’s PERL5LIB path so that Dancer2 loads a secure random source.
  • Configure the PERL5LIB environment variable to include the directories containing these modules before the application starts, ensuring the secure random source is used.
  • Upgrade to a Dancer2 release beyond 2.1.0 or patch the generate_id method to replace the insecure rand‑based fallback with a cryptographically secure random generator.

Generated by OpenCVE AI on August 4, 2026 at 18:00 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 23 Jul 2026 21:45:00 +0000

Type Values Removed Values Added
First Time appeared Cromedome
Cromedome dancer2
Vendors & Products Cromedome
Cromedome dancer2

Wed, 22 Jul 2026 12:15:00 +0000

Type Values Removed Values Added
Description Dancer2 versions through 2.1.0 for Perl generate insecure session ids when CSPRNG modules are unavailable. Dancer2::Core::Role::SessionFactory::generate_id silently falls back to a built-in rand-derived session id when both Math::Random::ISAAC::XS and Crypt::URandom are unavailable. The fallback session id is generated from a SHA-1 hash of a call to the built-in rand function, the absolute path of the Dancer2::Core::Role::SessionFactory module, an internal counter, the process id, the module instance memory address, and a shuffled string of characters (using the List::Util::shuffle function, which also uses the built-in rand function). These are all low-entropy and easily guessed sources. The built-in rand() function is seeded with 32-bits and considered unsuitable for security applications. Predictable session ids could allow an attacker to gain access to systems. Dancer2 versions through 2.1.0 for Perl generate insecure session ids when required CSPRNG modules are unavailable. Dancer2::Core::Role::SessionFactory::generate_id silently falls back to a built-in rand-derived session id unless both Math::Random::ISAAC::XS and Crypt::URandom are available. The fallback session id is generated from a SHA-1 hash of a call to the built-in rand function, the absolute path of the Dancer2::Core::Role::SessionFactory module, an internal counter, the process id, the module instance memory address, and a shuffled string of characters (using the List::Util::shuffle function, which also uses the built-in rand function). These are all low-entropy and easily guessed sources. The built-in rand() function is seeded with 32-bits and considered unsuitable for security applications. Predictable session ids could allow an attacker to gain access to systems.
Title Dancer2 versions through 2.1.0 for Perl generate insecure session ids when CSPRNG modules are unavailable Dancer2 versions through 2.1.0 for Perl generate insecure session ids when required CSPRNG modules are unavailable

Mon, 20 Jul 2026 13:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

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

ssvc

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


Mon, 20 Jul 2026 08:15:00 +0000

Type Values Removed Values Added
Description Dancer2 versions through 2.1.0 for Perl generate insecure session ids when CSPRNG modules are unavailable. Dancer2::Core::Role::SessionFactory::generate_id silently falls back to a built-in rand-derived session id when both Math::Random::ISAAC::XS and Crypt::URandom are unavailable. The fallback session id is generated from a SHA-1 hash of a call to the built-in rand function, the absolute path of the Dancer2::Core::Role::SessionFactory module, an internal counter, the process id, the module instance memory address, and a shuffled string of characters (using the List::Util::shuffle function, which also uses the built-in rand function). These are all low-entropy and easily guessed sources. The built-in rand() function is seeded with 32-bits and considered unsuitable for security applications. Predictable session ids could allow an attacker to gain access to systems.
Title Dancer2 versions through 2.1.0 for Perl generate insecure session ids when CSPRNG modules are unavailable
Weaknesses CWE-338
CWE-340
References

Subscriptions

Cromedome Dancer2
cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-07-22T12:00:11.288Z

Reserved: 2026-06-28T20:59:07.978Z

Link: CVE-2026-13577

cve-icon Vulnrichment

Updated: 2026-07-20T13:04:57.336Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-04T18:15:03Z

Weaknesses
  • CWE-338

    Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)

  • CWE-340

    Generation of Predictable Numbers or Identifiers