CVE-2023-42820
Executive Summary
CVE-2023-42820 is a cryptographic weakness in JumpServer, an open-source bastion host (privileged access management platform), caused by leaking the random number seed to API consumers. By recovering this seed, an unauthenticated or low-privileged attacker can predict the PRNG output used to generate verification codes for password reset flows, enabling account takeover via replay of predictable one-time codes. Affected deployments include all JumpServer versions prior to 2.28.19 (legacy release branch) and prior to 3.6.5 (current release branch), specifically those using local password-based authentication without MFA enabled. The vulnerability carries a CVSS score of 7.0 (High severity) and has moderate exploit probability with an EPSS percentile of 92.0%; however, it is not listed on CISA's Known Exploited Vulnerabilities catalog and no public working exploit has been confirmed to date.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Vulnerability mechanism. The CNA title "Random seed leakage in Jumpserver" indicates that the PRNG seed used by the application is exposed through an API endpoint. In most programming language runtimes (particularly those using libc srand()/rand() or similar constructs), the output sequence of a PRNG is fully determined by its seed value. If an attacker obtains the seed — either directly via API response or indirectly via a weak seeding procedure — the subsequent sequence of pseudo-random numbers becomes fully predictable. JumpServer uses these random values to generate time-based verification codes (e.g., 6-digit codes) for password-reset workflows. With a known seed, an attacker can compute the current and future verification codes offline, rendering the "randomly generated" code entirely deterministic.
Attack surface. The API surface of JumpServer includes both authenticated (session-based) and unauthenticated endpoints. Password reset typically triggers a code delivery via email or SMS; the API endpoint that generates or validates this code is the only attack vector of concern. Notably, the NVD description states: "If MFA is enabled users are not affected" and "Users not using local authentication are also not affected." This narrows the attack surface to deployments using the built-in local user store with password reset enabled but without MFA. Because JumpServer is a bastion host (i.e., a gateway to otherwise segregated internal infrastructure), the exposed API surface is usually internet-facing or at least accessible from a corporate network segment. No specific endpoint, function, or parameter names were published in the description, so precise technical paths cannot be enumerated.
Code-level detail. No code-level information is present in the NVD data. The mechanism is attributable to the PRNG seed being inserted into an API response (e.g., a JSON field) or being derivable from one. Given that the description explicitly mentions "exposing the random number seed to the API," the most plausible implementation flaw is an improper return of the seed value within a response body during the password-reset code request flow. This is consistent with CWE-335 (Use of a Predictable Seed in a Pseudo-Random Number Generator).
Patch rationale. Two independent sources (CNA, OSV) confirmed that versions 2.28.19 and 3.6.5 contain the fix. The fix likely involves either: (a) removing the seed from all API responses, (b) migrating from rand() to a cryptographically secure PRNG (CSPRNG like getrandom() or dedicated token libraries), or (c) requiring MFA or an out-of-band cryptographic challenge for password reset flows.
Exploitation Scenarios
No public PoC exists; the attack chain is inferred from the vulnerability class and NVD description. The chain is as follows:
Reconnaissance / Target identification. An attacker identifies a JumpServer deployment via Shodan query (e.g.,
title:"JumpServer") or through port scanning for known bastion-host ports (SSH, HTTPS). The attacker enumerates the login page and the password-reset flow without authentication.Triggering the flaw. The attacker initiates a password reset for a known or guessed username on the local authentication realm. The application generates a random verification code using a PRNG seeded with a value that is — unlike a correct implementation — accessible to the client. The attacker submits the password-reset request via the API and inspects the HTTP response (or a related API call) for the PRNG seed. Depending on the implementation, the seed might be present in a dedicated field, in a response header, or in a debug/verbose error message; exact endpoint names are not in the description and remain unknown. This step corresponds to CWE-335: the attacker extracts a secret parameter from the application's output stream.
Payload / code generation at the vulnerability-class level. With the seed recovered, the attacker replicates the PRNG algorithm (e.g., a simple linear congruential generator or the language-specific
rand()used by JumpServer) locally. Any programming language capable of exposing the same PRNG (C, Pythonrandommodule, etc.) suffices. The attacker then generates the sequence of verification codes for the current time window and simply presents the correct one to the password-reset API.Post-exploitation impact. A successful password reset grants the attacker full account takeover of the target user. Because JumpServer manages access to backend infrastructure (SSH sessions, database connections, web consoles), a compromised administrator account can lead to lateral movement into the whole protected enterprise network. Even a non-privileged JumpServer user account could expose internal credentials or allow pivot into internal systems.
Limitations. The NVD description notes MFA and non-local authentication modes are not affected. Therefore, environments enforcing MFA or integrating with external identity providers (LDAP/AD) are rescued from this flaw. The affected population is limited to local-auth-only deployments with password reset enabled.
Impact Assessment
Severity (CVSS 7.0). The exact vector string was not published, but based on the description the impact is best approximated as: Attack Vector Network (AV:N) — the API endpoint is remotely reachable; Attack Complexity Low (AC:L) — no special conditions required; Privileges Required None (PR:N) — password reset endpoint is typically unauthenticated; User Interaction None (UI:N); Scope Unchanged (S:U); Confidentiality Impact None (C:N) — no data disclosure beyond the seed (which is itself a cryptographic secret but not user PII); Integrity Impact High (I:H) — full account takeover changes user credentials and subsequent actions; Availability Impact Low (A:L) — an attacker could lock out legitimate users by changing passwords.
Business impact. 1) Credential compromise: all local accounts become resetable; 2) Privilege escalation: targeting admins grants access to all proxied assets; 3) Basiton-host compromise: JumpServer acts as a central gateway, so a takeover blurs the line between perimeter compromise and internal network breach; 4) Regulatory exposure: audit trails and session logs on the bastion are falsifiable once admin is taken over.
Blast radius. All tenants sharing the affected JumpServer versions. Version-2.x deployments (long-term support branch) are widely used in enterprise; the 3.x branch is adopted by newer installs. No OSV package denylist for affected versions is provided, but the OSV entries reference Git commit ranges — implying all builds between unpublished commit hashes are unfixed.
Detection Guidance
Detection strategy. Because the vulnerability involves a predictable PRNG, detection should center on (a) access to password-reset endpoints, (b) repeated password-reset attempts for the same account within a short window, (c) anomalous API responses that contain random-looking long integers (the seed) in responses not expected to carry such data, and (d) abnormal password-reset success patterns (e.g., success without corresponding email/SMS verifications that would normally leave application logs).
Sigma Rule
title: JumpServer Password Reset - Multiple Reset Attempts Without MFA
id: 8f0d9e22-2e2a-4eaa-9e41-1f43d2b1b942
status: experimental
description: Detects repeated password-reset requests to JumpServer API in a short timeframe, a prerequisite for exploiting PRNG seed leakage (CVE-2023-42820).
logsource:
category: application
product: jumpserver
detection:
selection:
event.action: 'password_reset_requested'
user.name: '*'
timeframe: 5m
condition: selection | count() by user.name > 5
level: high
tags:
- attack.credential_access
- attack.t1555
- cve.2023-42820
This rule focuses on volume-based anomaly: the exploit requires predicting the code, so an attacker typically submits several reset requests to harvest seeds and/or codes.
YARA Rule
rule JumpServer_Seed_Leak_Suspect
{
meta:
author = "valtersit.com TIR"
description = "Detects network payloads or logs containing raw integer seeds adjacent to password reset JSON."
cve = "CVE-2023-42820"
strings:
$reset = "reset_password"
$seed1 = /seed[":= ]+\d{1,20}/
$seed2 = /random_seed[":= ]+\d{1,20}/
$code = "verification_code"
condition:
any of ($seed*) and any of ($reset, $code)
}
Suricata IDS Rule
alert http any any -> any any (msg:"JumpServer Potential PRNG Seed Leakage (CVE-2023-42820)"; flow:to_server,established; http.method; content:"POST"; http.uri; content:"/api"; pcre:"/(seed|random_seed)[":= ]+[0-9]{6,20}/i"; sid:30004282; rev:1; classtype:attempted-admin; metadata:attack_target Web_Server, created_at 2024_01_15, cve CVE-2023-42820;)
Rule checks for POST requests to an /api endpoint containing a seed or random_seed parameter with a long numeric value, indicating potential seed leakage in either request or response payloads.
Elastic Detection
// Detect repeated password-reset events for the same user (EQL on web access logs)
authentication
| where event.action == "reset-password-request"
| keep user.name, timestamp
| in 5-min window by user.name
count() >= 5
| scenario: "CVE-2023-42820 — mass PRNG seed harvesting for predictable OTP"
Splunk SPL Query
index=jumpserver sourcetype="api_audit"
| where like(uri, "%reset%")
| eval seed_found = if(match(_raw, "(?i)(seed|random_seed).{0,20}\d{6,}"), "yes", "no")
| search seed_found=yes
| stats count by user, src_ip, uri
| where count > 3
| table _time, src_ip, user, uri, count
| sort - count
This query hunts for reset attempts containing numeric seed fields AND manifests as a volume-based anomaly.
Wazuh OSSEC Rule
<group name="jumpserver,">
<rule id="100483" level="10">
<decoded_as>json</decoded_as>
<match>reset_password</match>
<regex>seed|random_seed</regex>
<description>JumpServer: Possible PRNG seed leak in API response (CVE-2023-42820).</description>
<group>authentication_failures,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 3/4 (LIKELY — 2 independent sources confirm fix — CNA & OSV).
- Immediate mitigations (0–72 hours):
- Enable MFA on all user profiles. The NVD description explicitly states that MFA users are not affected. If possible, force MFA globally.
- Disable local authentication — integrate JumpServer with LDAP/AD/OAuth/SAML (NVD confirms users not using local auth are unaffected).
- Restrict network access to the JumpServer web/API endpoints via firewall allow-lists (internal-only access).
- Monitor audit logs for massive password-reset attempts (see Detection Guidance).
- Patch / upgrade steps:
- Upgrade to 2.28.19 (legacy branch) or 3.6.5 (current branch). Official upgrade documentation is available via JumpServer's installation guide. The fix removes the seed exposure; no rollback to previous versions is advised due to lack of workarounds ("There are no known workarounds for this issue").
- After upgrade, verify no residual exposure by issuing a password-reset request and checking API response has no
seed/random_seedfield (YARA rule above can be used for QA).
- Long-term hardening:
- Implement segmentation — bastion host must be isolated on a dedicated AD-joined VLAN, with SIEM export of all audit logs.
- Use hardware security modules (HSM) or KMS-backed cryptographic token generation for all OTP/reset codes.
- Conduct regular penetration testing of the JumpServer API; incorporate the YARA and Suricata signatures into continuous security validation pipelines.
- Subscribe to CVE-2023-42820 monitoring (OSV/NVD) for updates on potential exploit-in-the-wild declarations; this CVE is not on the CISA KEV as of the report date, implying lower immediate urgency but EPSS percentile of 92% suggests imminent weaponization risk.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-42820 — Official CVE description, CVSS score, and reference list.
- JumpServer Official GitHub (releases): https://github.com/jumpserver/jumpserver/releases/tag/v3.6.5 — Patched version, confirmation of commit history (cross-referenced via OSV).
- OSV.dev entry: https://osv.dev/vulnerability/CVE-2023-42820 — Second independent source confirming vulnerable-and-fixed version ranges (commit-specific details).
- CISA KEV Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog — Confirms NO KEV listing as of this writing (no exploit-in-the-wild declaration).
- JumpServer Project Page / Documentation: https://www.jumpserver.org — For installation and upgrade instructions.
As of this report, no threat actors have been publicly attributed to exploiting this CVE. The EPSS score (0.05404; 92.0% percentile) predicts a moderate-to-high likelihood of exploitation within the next 30 days for exposed, MFA-less deployments. No public PoC is available; exploitability remains theoretical but is highly plausible given the clarity of the root cause.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.