Rapid7 Nexpose Weak Keystore Entropy Credential Decryption — CVE-2026-1814
by pbrass · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-1814
- Category
- misc
- Affected product
- Rapid7 Nexpose (vulnerability management platform) credential export/keystore mechanism
- Affected versions
- Versions using the affected low-entropy PKCS12 keystore scheme (per source repository)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | pbrass |
| CVE / Advisory | CVE-2026-1814 |
| Category | misc |
| Severity | High |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | rapid7, nexpose, credential-disclosure, weak-keystore, pkcs12, aes-cbc, offline-decryption |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Rapid7 Nexpose (vulnerability management platform) credential export/keystore mechanism |
| Versions Affected | Versions using the affected low-entropy PKCS12 keystore scheme (per source repository) |
| Language / Platform | Python 3 |
| Authentication Required | Local-only (requires access to exported XML + keystore file) |
| Network Access Required | No |
Summary
Rapid7 Nexpose stores site/scan credentials in an exported XML file, with each <credentials> element holding a hex-encoded salt, RSA-wrapped AES key, and AES-CBC-encrypted blob. The private key needed to unwrap the AES key lives in a PKCS12 keystore whose protection is weak enough that it can be brute-forced or cracked offline in realistic time. Once an attacker obtains (or cracks) the keystore, this PoC parses the XML, extracts the salt/key/blob GUID-tagged hex fields, unwraps the AES key using RSA decryption via the private key, and then performs AES-CBC/PKCS5 decryption to recover the underlying plaintext credentials. The tool essentially demonstrates full recovery of stored scan credentials from an exported Nexpose configuration once the keystore has been broken.
Vulnerability Details
Root Cause
The Nexpose keystore protecting the RSA private key used for credential unwrapping has low entropy / weak protection, making it feasible to crack the keystore password offline (e.g., via hashcat) and thereby recover the RSA key that unlocks all encrypted credential blobs in an exported XML.
Attack Vector
- Obtain an exported Nexpose site/credentials XML file and its associated PKCS12 keystore (e.g., via backup access, misconfigured file share, or insider access).
- If the keystore is password protected, convert it and run an offline hash-cracking attack (e.g.,
JksPrivkPrepare.jar+ hashcat mode 15500) to recover the passphrase, exploiting its weak entropy. - Load the recovered PKCS12 keystore and extract the RSA private key.
- Run the PoC against the exported XML: it locates the salt, encrypted AES key, and ciphertext blob per
<credentials>entry using fixed GUID markers, uses the RSA private key to unwrap the AES key, then AES-CBC/PKCS5-decrypts the blob. - Recover plaintext scan/site credentials in cleartext.
Impact
An attacker who obtains an exported Nexpose configuration and keystore can fully recover all stored scanning credentials (usernames/passwords for scanned assets), enabling lateral movement across every system Nexpose was configured to scan.
Environment / Lab Setup
Target: Rapid7 Nexpose exported credentials XML + associated PKCS12 keystore
Attacker: Python 3 with `cryptography` and `pycryptodome` libraries; optional hashcat/JksPrivkPrepare for keystore cracking
Proof of Concept
PoC Script
See
r7creds.pyin this folder.
| |
The script opens the PKCS12 keystore to extract the RSA private key, parses the given XML for <credentials> elements, extracts the salt/key/blob hex fields by GUID markers, derives the AES key via RSA decryption, and prints the recovered plaintext strings found in the decrypted blob.
Detection & Indicators of Compromise
Signs of compromise:
- Unexpected copies or transfers of Nexpose configuration/credential XML exports and keystore files.
- Evidence of offline hash-cracking tooling (hashcat, JksPrivkPrepare) run against a Nexpose keystore.
- Scanned-asset credentials appearing in use from unfamiliar source hosts shortly after a keystore/export leak.
Remediation
| Action | Detail |
|---|---|
| Primary fix | No vendor patch confirmed as of 2026-07-05 — monitor for advisory; upgrade keystore protection scheme if Rapid7 issues a fix |
| Interim mitigation | Restrict access to Nexpose configuration exports and keystore files, use strong high-entropy keystore passwords, and rotate all scan credentials if a keystore/export leak is suspected |
References
Notes
Mirrored from https://github.com/pbrass/CVE-2026-1814 on 2026-07-05.
| |