← Back to Feed CACHED · 2026-11-03 01:02:03 · CACHE_KEY CVE-2026-92122
CVE-2026-92122 · CWE-693 · Disclosed 2026-09-16

Jenkins Script Security Plugin sandbox bypass via interface proxy method collision

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

A bouncer checks IDs at the door but lets you in wearing someone else's jacket because the name tag matches

Jenkins Script Security Plugin implements a Groovy sandbox that intercepts method calls to prevent untrusted scripts from invoking dangerous operations. This flaw occurs when a sandboxed script coerces a value to an interface, and the resulting proxy does not verify methods inherited with the same name. An attacker who can define and run a sandboxed Pipeline can craft a type collision that slips through the proxy and executes arbitrary code directly in the Jenkins controller JVM. Affected versions are Script Security Plugin 1415.v9a_f9b_3a_c253d and earlier; Jenkins bundles the plugin by default.

Vendor labels this HIGH 8.8, but that undersells the role. Jenkins controllers are CI/CD orchestrators—they hold deployment credentials, source control tokens, and artifact signing keys. Code execution on the controller is a supply-chain pivot, not just a single host compromise. The only friction is that the attacker needs a low-privileged Jenkins account with script/Pipeline permissions; in many enterprise Jenkins installations that is every developer. The vendor score is a fair starting point for a generic authenticated RCE, but the noisgate deployment-role analysis floors this at CRITICAL.

"Sandbox bypass gives Jenkins pipeline authors a direct path to controller JVM — treat as CRITICAL."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Authenticate to Jenkins with script/Pipeline permissions

The attacker needs a valid Jenkins user account with permission to define or run sandboxed scripts, typically Job/Build or Job/Configure. This can be achieved with stolen credentials, a low-privilege internal account, or via SSO misconfiguration. Public Jenkins instances may offer self-registration in some configurations, but most are internal.
Conditions required:
  • Valid Jenkins credentials
  • Overall/Read plus Job/Build or Job/Configure
  • Ability to create or edit a Pipeline job or commit to a Jenkinsfile source repo
Where this breaks in practice:
  • Jenkins controllers are usually behind VPN or SSO, not public
  • Org policies may restrict Pipeline creation to admins
  • Account lockout / MFA can block credential stuffing
Detection/coverage: Jenkins access logs and SSO logs show account logins; monitor for new job creation from known low-priv users.
STEP 02

Define a malicious sandboxed Pipeline

The attacker creates a Pipeline job with a crafted Groovy payload that exploits the interface proxy flaw. If using a Jenkinsfile from SCM, they need commit access to the repository that Jenkins checks out. If using inline script, they need Job/Configure.
Conditions required:
  • Path to define a Pipeline: Job/Configure or SCM commit access
  • Sandbox mode enabled (often default for Pipeline)
Where this breaks in practice:
  • Many jobs use declarative Pipeline with limited Groovy; malicious script must be in script step
  • Code review or branch protections on Jenkinsfile repos can catch injection
  • Some orgs disable inline Pipeline scripts
Detection/coverage: SCM audit logs show the commit; Jenkins config history stores job changes.
STEP 03

Trigger interface coercion and proxy method collision

The script coerces a value to an interface that inherits a method with the same name as an interface method. The vulnerable Script Security Plugin does not verify the target method through the proxy, so the attacker can call an arbitrary inherited method normally blocked by the sandbox. This is deterministic and does not require user interaction.
Conditions required:
  • Vulnerable Script Security Plugin version ≤ 1415.v9a_f9b_3a_c253d
  • A crafted combination of Groovy value and interface with matching method names
Where this breaks in practice:
  • No public PoC lowers immediate mass exploitation
  • Not all interface/type pairs work; attacker must understand the exact proxy behavior
Detection/coverage: Script Security plugin may not log bypassed method calls; monitor controller JVM for unexpected class loads.
STEP 04

Execute arbitrary code in the Jenkins controller JVM

The bypassed method call allows arbitrary code execution in the context of the Jenkins controller process, which may run as SYSTEM (Windows) or a service account (Linux). This yields full control of the controller, including all stored credentials, build histories, and connected agents.
Conditions required:
  • Controller JVM has a service account with privileged access
  • No additional network movement needed—the JVM is already on the controller host
Where this breaks in practice:
  • Containerized Jenkins controllers limit host breakout but not credential theft
  • EDR on the controller host may detect child process or memory tampering
Detection/coverage: Endpoint EDR, Sysmon, and JVM monitoring can detect abnormal child processes or network connections.
STEP 05

Pivot to source repos, cloud, and deployment targets

From the controller, the attacker extracts Jenkins credential stores, SCM tokens, cloud keys, and artifact credentials. They can modify existing Pipelines to inject malicious steps, push backdoored artifacts, and move laterally to any system Jenkins can reach.
Conditions required:
  • Jenkins credential stores contain secrets for production systems
  • Pipeline definitions are editable and trigger on future runs
Where this breaks in practice:
  • Secrets may be scoped to folders, limiting blast radius
  • Credential store may be external Vault with short-lived tokens
  • GitOps/SBOM controls may detect unexpected artifacts
Detection/coverage: SIEM alerting on unusual credential usage or deploy activity; code signing validation.
03 · Compensating Control

1
CRITICAL 9.0→MEDIUM 5.0
SEVERITY REDUCED
Restrict Job/Build and Job/Configure to trusted engineers immediately — This removes the initial permission required to define and run sandboxed scripts. Apply within 3 days (noisgate mitigation SLA for CRITICAL). On Jenkins, deny these permissions to broad developer groups and audit existing users.
2
CRITICAL 9.0→HIGH 7.0
SEVERITY REDUCED
Disable inline Pipeline script definitions and enforce pipeline-as-code from reviewed SCM — Prevents attackers with only Job/Build from injecting arbitrary Groovy; changes require SCM commit and code review. Deploy within 3 days.
3
CRITICAL 9.0→HIGH 7.0
SEVERITY REDUCED
Monitor controller JVM process and enable shell/EDR detections — Catch post-exploitation: unexpected child processes, unusual class loads, or network connections from the Jenkins process. Deploy within 3 days.
4
CRITICAL 9.0→IGNORE 0.0
SEVERITY REDUCED
Apply the Jenkins Security Advisory patch when released — The noisgate remediation SLA for CRITICAL is ≤ 90 days, but patch as soon as available because no workaround fully restores sandbox integrity.
What doesn't work
  • Relying on the Groovy sandbox — it is exactly what is bypassed.
  • WAF or network segmentation alone — does not stop authenticated HTTP requests to Jenkins job creation.
  • Disabling script approval — the vulnerability bypasses method checks, so approval lists won't block the proxy issue.
04 · Intelligence Metadata

The supporting signals.

KEV statusNot listed in CISA KEV; no active exploitation evidence as of 2026-09-21.
In-the-wild statusNo known campaigns; the flaw is a sandbox bypass and would be used post-authentication.
Public PoCNone observed on pocindex.io, GitHub, or ExploitDB as of 2026-09-21; exploitation is a custom Groovy sandbox escape.
EPSS0.00632 (0.63% likelihood of exploitation in next 30 days).
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 8.8 HIGH.
Affected versionsScript Security Plugin ≤ 1415.v9a_f9b_3a_c253d; Jenkins core bundles the plugin by default.
Fixed versionsNone publicly available as of 2026-09-21; track the Jenkins Security Advisory for the patched plugin.
ExposureJenkins controllers should not be internet-facing; no specific Shodan/Censys telemetry was provided, but most installs are internal CI/CD.
Disclosure date2026-09-16 (CVE published).
ReporterNot disclosed in the CVE record or available search results.

Sources.

  1. CVE.org Record
  2. VulDB
  3. INCIBE
  4. OpenCVE
  5. Alpine Security Tracker
  6. NVD
05 · The Call

Final Verdict
↑ UPGRADED to CRITICAL (9.0/10)

Why this verdict

  • Role multiplier: Jenkins controllers are canonical CI/CD orchestrators; successful RCE on the controller JVM yields credential theft, source repo access, and supply-chain pivot across pipelines and artifacts. This meets the CRITICAL floor for high-value-role components.
  • Privilege level is misleading: CVSS 8.8 assumes low privileges, but typical enterprise Jenkins gives hundreds of developers Job/Build or Job/Configure, making the attacker population large once credentials are obtained.
  • No patch available: No vendor fix was published as of 2026-09-21, so mitigation must rely on permission lockdown, which is a temporary and imperfect control for a CRITICAL severity.

Why not higher?

The chain requires a valid Jenkins account with script/Pipeline permissions; it is not unauthenticated and cannot be scripted into an internet-wide worm. No public PoC or active exploitation has been observed as of 2026-09-21, so a 9.5+ score is not warranted.

Why not lower?

The vulnerable component is the Jenkins controller, not a sandboxed agent or worker. Complete sandbox bypass to arbitrary code in the controller JVM can exfiltrate CI/CD secrets and modify artifact pipelines across the fleet. Only the pre-authentication requirement stops this from being a 10.0.

06 · Verification

Crowdsourced verification payload.

Run this bash script on the Jenkins controller host with read access to $JENKINS_HOME. Invoke with the Jenkins home directory as the only argument: ./check_cve-2026-92122.sh /var/lib/jenkins. Requires filesystem read permission, not root unless Jenkins home is restricted. Outputs VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
set -euo pipefail
vulnerable='1415.v9a_f9b_3a_c253d'
jenkins_home=${1:-/var/lib/jenkins}
manifest=$jenkins_home/plugins/script-security/META-INF/MANIFEST.MF
if [[ ! -f $manifest ]]; then
  echo UNKNOWN; exit 3
fi
version=$(grep -E '^Plugin-Version:' $manifest | head -n1 | awk '{print $2}' | tr -d '\r')
if [[ -z $version ]]; then
  echo UNKNOWN; exit 3
fi
if [[ $version == $vulnerable ]]; then
  echo VULNERABLE; exit 1
fi
if command -v sort >/dev/null && sort --version 2>/dev/null | grep -q GNU; then
  if [[ $(printf '%s\n' $vulnerable $version | sort -V | head -n1) != $vulnerable ]]; then
    echo VULNERABLE; exit 1
  else
    echo PATCHED; exit 0
  fi
else
  vuln_num=${vulnerable%%.*}
  ver_num=${version%%.*}
  if (( 10#$ver_num <= 10#$vuln_num )); then
    if (( 10#$ver_num < 10#$vuln_num )); then
      echo VULNERABLE; exit 1
    fi
    vuln_suffix=${vulnerable#*.}
    ver_suffix=${version#*.}
    if [[ $(printf '%s\n' $vuln_suffix $ver_suffix | sort | head -n1) != $vuln_suffix ]]; then
      echo VULNERABLE; exit 1
    else
      echo PATCHED; exit 0
    fi
  else
    echo PATCHED; exit 0
  fi
fi