CVE-2025-68701
Java vulnerability analysis and mitigation

Overview

CVE-2025-68701 is a cryptographic weakness vulnerability in the Jervis library — a Groovy library used for Job DSL plugin scripts and shared Jenkins pipeline libraries — caused by deterministic AES Initialization Vector (IV) derivation from a passphrase. All versions of Jervis prior to 2.2 are affected. The vulnerability was disclosed on January 13, 2026, via a GitHub Security Advisory. It carries a CVSS v3.1 score of 7.5 (High) and a CVSS v4.0 score of 8.7 (High) (GitHub Advisory, Feedly).

Technical details

The root cause lies in the encryptWithAES256 and decryptWithAES256 methods in SecurityIO.groovy, where the AES IV is derived deterministically by taking the first 16 bytes of the SHA-256 hash of the passphrase (salt.substring(0, 16).getBytes('UTF-8')). This means the same passphrase always produces the same IV, violating a fundamental requirement of secure symmetric encryption (CWE-327: Use of a Broken or Risky Cryptographic Algorithm; CWE-340: Generation of Predictable Numbers or Identifiers). Because the IV never changes for a given passphrase, encrypting the same plaintext with the same passphrase always yields identical ciphertext, enabling pattern analysis attacks. The fix in version 2.2 migrates to AES-256-GCM with a randomly generated nonce prepended to each ciphertext, eliminating IV reuse (GitHub Advisory, Patch Commit).

Impact

The deterministic IV derivation significantly weakens the AES-256 encryption scheme by making ciphertext patterns predictable: identical plaintext encrypted with the same passphrase always produces identical ciphertext, enabling pattern analysis and potentially facilitating decryption of sensitive data. The confidentiality impact is rated High, with no integrity or availability impact. The severity is considered low for internal library uses but escalates to high for any external consumer directly invoking the affected encryptWithAES256 or decryptWithAES256 methods, such as Jenkins pipeline scripts or Job DSL configurations that rely on these encryption functions for secrets management (GitHub Advisory, Feedly).

Exploitation steps

  1. Identify target: Determine that the target Jenkins environment uses Jervis prior to version 2.2 and that secrets are encrypted using the encryptWithAES256 or decryptWithAES256 methods directly with a passphrase.
  2. Collect ciphertext samples: Obtain multiple ciphertext outputs produced by the vulnerable library — for example, from stored Jenkins credentials, pipeline configuration files, or CipherMap serialized data at rest.
  3. Perform pattern analysis: Because the IV is deterministic (derived from the SHA-256 hash of the passphrase), identical plaintext encrypted with the same passphrase produces identical ciphertext. Compare ciphertext blocks across samples to identify repeated patterns, revealing which encrypted values share the same plaintext.
  4. Exploit IV reuse: Using known-plaintext or chosen-plaintext techniques applicable to AES-CBC with a fixed IV, attempt to recover plaintext from ciphertext blocks, particularly for short or structured secrets (e.g., API tokens, passwords).
  5. Access sensitive data: Use recovered plaintext secrets to authenticate to downstream systems (e.g., GitHub App tokens, API keys) managed by the Jenkins/Jervis environment (GitHub Advisory).

Mitigation and workarounds

Upgrade Jervis to version 2.2 or later, which replaces the deterministic IV derivation with AES-256-GCM authenticated encryption using a randomly generated nonce per encryption operation. No workarounds are available for the vulnerable versions. Note that upgrading to 2.2 introduces a breaking change: existing CipherMap encrypted data will be discarded and new tokens will be issued (e.g., GitHub App tokens will be re-issued). Organizations using Jervis in Jenkins pipelines or Job DSL scripts that directly call the affected encryption methods should prioritize patching and re-encrypt any sensitive data that was protected using the vulnerable scheme (GitHub Advisory, Patch Commit).

Community reactions

The vulnerability received limited public attention, consistent with its niche scope as a Jenkins/Job DSL library. A Mastodon post was noted on infosec.exchange shortly after disclosure, and the advisory was indexed by several vulnerability tracking platforms including VulnDB, CIRCL, and GitLab Advisories. No major media coverage or notable researcher commentary beyond the GitHub advisory itself has been identified (Feedly).

Additional resources


SourceThis report was generated using AI

Related Java vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-p279-2cqp-84jgCRITICAL9.6
  • Java logoJava
  • org.openidentityplatform.opendj:opendj-server-legacy
NoYesJul 24, 2026
GHSA-fp43-vj7g-pg92HIGH7.5
  • Java logoJava
  • org.omnifaces:omnifaces
NoYesJul 24, 2026
GHSA-7ppr-r889-mcf2HIGH7.5
  • Java logoJava
  • org.http4s:http4s-blaze-server_2.12
NoYesJul 24, 2026
GHSA-mhvj-jhpq-885vHIGH7.4
  • Java logoJava
  • org.http4s:http4s-blaze-server_2.13
NoYesJul 24, 2026
GHSA-46q4-43ph-c6frHIGH7.4
  • Java logoJava
  • org.http4s:blaze-http_2.12
NoYesJul 24, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management