← Back to CVE Explorer

CVE-2026-13577

Full vulnerability record from the local CVENow database.

Description

Dancer2 versions before 2.2.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.

Severity
HIGH
CVSS score
8.2 (v3.1)
Vulnerability status
Deferred
Source identifier
9b29abf9-4ab0-4765-b253-1875cd9b441e
Published
2026-07-20 08:16:28.987000
Last modified
2026-10-24 20:10:00.137000
View original CVE JSON
{
  "id": "CVE-2026-13577",
  "sourceIdentifier": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
  "published": "2026-07-20T08:16:28.987",
  "lastModified": "2026-10-24T20:10:00.137",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "Dancer2 versions before 2.2.0 for Perl generate insecure session ids when required CSPRNG modules are unavailable.\n\nDancer2::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.\n\nThe 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).\n\nThese are all low-entropy and easily guessed sources.\n\nThe built-in rand() function is seeded with 32-bits and considered unsuitable for security applications.\n\nPredictable session ids could allow an attacker to gain access to systems."
    },
    {
      "lang": "es",
      "value": "Las versiones de Dancer2 hasta la 2.1.0 para Perl generan identificadores de sesión inseguros cuando los módulos CSPRNG requeridos no están disponibles.\n\nDancer2::Core::Role::SessionFactory::generate_id recurre silenciosamente a un identificador de sesión derivado de la función ’rand’ incorporada a menos que Math::Random::ISAAC::XS y Crypt::URandom estén ambos disponibles.\n\nEl identificador de sesión de respaldo se genera a partir de un hash SHA-1 de una llamada a la función ’rand’ incorporada, la ruta absoluta del módulo Dancer2::Core::Role::SessionFactory, un contador interno, el ID del proceso, la dirección de memoria de la instancia del módulo y una cadena de caracteres mezclada (utilizando la función List::Util::shuffle, que también usa la función ’rand’ incorporada).\n\nTodas estas son fuentes de baja entropía y fácilmente predecibles.\n\nLa función ’rand()’ incorporada se inicializa con 32 bits y se considera inadecuada para aplicaciones de seguridad.\n\nLos identificadores de sesión predecibles podrían permitir a un atacante obtener acceso a los sistemas."
    }
  ],
  "affected": [
    {
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
      "affectedData": [
        {
          "defaultStatus": "unaffected",
          "collectionURL": "https://cpan.org/modules",
          "packageName": "Dancer2",
          "modules": [
            "Dancer2"
          ],
          "programFiles": [
            "lib/Dancer2/Core/Role/SessionFactory.pm"
          ],
          "programRoutines": [
            {
              "name": "Dancer2::Core::Role::SessionFactory::generate_id"
            }
          ],
          "repo": "https://github.com/PerlDancer/Dancer2",
          "packageURL": "pkg:cpan/Dancer2",
          "versions": [
            {
              "version": "0",
              "lessThan": "2.2.0",
              "versionType": "custom",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H",
          "baseScore": 8.2,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "NONE",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 4.2
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-07-20T13:05:03.182340Z",
          "id": "CVE-2026-13577",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-338"
        },
        {
          "lang": "en",
          "value": "CWE-340"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/PerlDancer/Dancer2/blob/v2.1.0/lib/Dancer2/Core/Role/SessionFactory.pm#L142",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://github.com/PerlDancer/Dancer2/issues/1807",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://github.com/PerlDancer/Dancer2/pull/1804",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://metacpan.org/release/CROMEDOME/Dancer2-2.2.0/changes",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    },
    {
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-5080",
      "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"
    }
  ]
}