This advisory announces vulnerabilities in the following Jenkins deliverables:
Jenkins uses the Remoting library (typically agent.jar or remoting.jar) for communication between the controller and agents via serialized Java objects.
To protect against deserialization vulnerabilities, Jenkins enforces the JEP-200 class filter during deserialization of objects received over a Remoting channel on the controller.
In Remoting 3384.v60d89463d9e0 and earlier, except 3355.3357.v931d3c992987, included in Jenkins 2.575 and earlier, LTS 2.568.1 and earlier, the JEP-200 class filter is not applied to classes resolved via a fallback path in the Remoting deserialization implementation. This allows agent processes, code running on agents, and attackers with Agent/Connect permission to bypass the JEP-200 deserialization filter for classes on the Jenkins core classpath, which could be leveraged to execute code on the Jenkins controller.
| This is limited to classes on the Jenkins core classpath (i.e., bundled with Jenkins or part of the Java platform) that are not on the pre-JEP-200 deserialization denylist. Dependencies bundled with plugins will not be deserialized. |
The Remoting library in Jenkins 2.576, LTS 2.568.2 also applies the class filter on the fallback code path.
| A workaround for this vulnerability is available in case updating to a fixed version is not possible. See this GitHub repository for details. |
| This vulnerability has been reported through the Jenkins Bug Bounty Program sponsored by the European Commission. |
Jenkins 2.575 and earlier, LTS 2.568.1 and earlier does not safely handle symbolic links with effectively empty names during the extraction of .tar and .tar.gz archives.
This allows attackers able to control agent processes to provide crafted archives to the controller to write files to arbitrary locations on the file system, restricted only by file system access permissions of the user running Jenkins.
This can result in code execution by, e.g., writing malicious scripts to the JENKINS_HOME/init.groovy.d/ directory (feature documentation), or deploying plugins to JENKINS_HOME/plugins/.
| This is due to an incomplete fix of SECURITY-3657. |
Jenkins 2.576, LTS 2.568.2 refuses to extract files from .tar and .tar.gz archives that contain symbolic links with effectively empty names.
| A workaround for this vulnerability is available in case updating to a fixed version is not possible. See this GitHub repository for details. |
| This vulnerability has been reported through the Jenkins Bug Bounty Program sponsored by the European Commission. |
Jenkins 2.575 and earlier, LTS 2.568.1 and earlier improperly identifies file paths attempting path traversal in file parameter names.
This allows attackers with Item/Configure and Item/Build permission to write files to arbitrary locations on the controller file system, restricted only by file system access permissions of the user running Jenkins.
This can result in code execution by, e.g., writing malicious scripts to the JENKINS_HOME/init.groovy.d/ directory (feature documentation), or deploying plugins to JENKINS_HOME/plugins/.
Jenkins 2.576, LTS 2.568.2 improves the identification of file paths attempting path traversal in file parameter names, preventing writing files to arbitrary locations on the file system.
| This vulnerability has been reported through the Jenkins Bug Bounty Program sponsored by the European Commission. |
Jenkins 2.575 and earlier, LTS 2.568.1 and earlier handles case-insensitivity in user names and group names inconsistently.
While the canonical ID for a case-insensitive user or group name is created by lowercasing the name, comparisons of user names and group names are done using String#equalsIgnoreCase.
The latter considers some Unicode characters to be equal to other characters, while the former does not (e.g., the letter "dotless i" ı being equal to regular lowercase i).
This allows attackers able to create new users or groups with names that case-insensitively match other characters to impersonate other users or be granted their permissions.
| This requires a security realm that allows these characters in user names or group names, and allows creation of users or groups that case-insensitively match existing users or groups. The Jenkins user database does not allow users to sign up with usernames outside of the ASCII range. |
Jenkins 2.576, LTS 2.568.2 compares usernames and group names using their canonical form and only considers them equal if their canonical forms are equal.
| This vulnerability has been reported through the Jenkins Bug Bounty Program sponsored by the European Commission. |
Jenkins 2.575 and earlier, LTS 2.568.1 and earlier does not restrict the types of objects that can be instantiated as part of the project naming strategy configuration. This allows attackers with Overall/Manage permission to instantiate arbitrary types related to configuration, including those intended for configuration only by administrators.
Jenkins 2.576, LTS 2.568.2 restricts the types of objects that can be instantiated as part of the project naming strategy configuration to those related to that feature.
| This vulnerability has been reported through the Jenkins Bug Bounty Program sponsored by the European Commission. |
jenkins-multijob-plugin
Multijob Plugin 669.v9d96a_d9c71b_0 and earlier provides Groovy scripting features that do not integrate with Script Security Plugin.
This vulnerability allows attackers with Item/Create or Item/Configure permission to execute arbitrary code in the context of the Jenkins controller JVM.
Multijob Plugin 677.v7ffc23d6a_4c2 integrates with Script Security Plugin to enforce sandboxing of Groovy scripts.
jenkins-multijob-plugin
Multijob Plugin 669.v9d96a_d9c71b_0 and earlier does not require POST requests for a form validation endpoint, resulting in a cross-site request forgery (CSRF) vulnerability.
This vulnerability allows attackers to execute arbitrary code in the context of the Jenkins controller JVM.
Multijob Plugin 677.v7ffc23d6a_4c2 requires POST requests for the affected form validation endpoint.
appscan
HCL AppScan Plugin 1.8.3 and earlier does not perform permission checks in multiple HTTP endpoints.
This allows attackers with Overall/Read permission to enumerate credentials IDs of credentials stored in Jenkins. Those can be used as part of an attack to capture the credentials using another vulnerability.
HCL AppScan Plugin 1.8.4 requires appropriate permissions in the affected HTTP endpoints.
scm-manager
SCM-Manager Plugin 1.11.1 and earlier does not perform permission checks in several HTTP endpoints.
This allows attackers with Overall/Read permission to connect to an attacker-specified HTTP URL using attacker-specified credentials IDs obtained through another method, capturing credentials stored in Jenkins.
Additionally, these endpoints do not require POST requests, resulting in a cross-site request forgery (CSRF) vulnerability.
SCM-Manager Plugin 1.12.1 requires POST requests and Item/Configure permission for these endpoints.
external-workspace-manager
External Workspace Manager Plugin 1.4.1 and earlier does not perform a permission check (1.4.0 and earlier) or performs an improper permission check (1.4.1) when providing access to externally-managed workspaces through the workspace browser.
This allows attackers with Overall/Read permission to read files in workspaces they are not authorized to access.
External Workspace Manager Plugin 1.4.2 performs the expected permission check before providing access to externally-managed workspaces through the workspace browser.
webhook-secret-credentials-provider
Webhook Secret Credentials Provider Plugin 16.v0cfa_f0215cf5 and earlier does not use a constant-time comparison function when checking whether the provided and expected webhook bearer token are equal.
This could potentially allow attackers to use statistical methods to obtain a valid webhook bearer token.
Webhook Secret Credentials Provider Plugin 32.v09c9b_522f0a_8 uses a constant-time comparison when validating the webhook bearer token.
Parameterized-Remote-Trigger
Parameterized Remote Trigger Plugin 3.2.2 and earlier does not perform permission checks in HTTP endpoints.
This allows attackers with Overall/Read permission to enumerate credentials IDs of credentials stored in Jenkins. Those can be used as part of an attack to capture the credentials using another vulnerability.
As of publication of this advisory, there is no fix. Learn why we announce this.
xml-job-to-job-dsl
XML Job to Job DSL Plugin 0.1.13 and earlier does not perform permission checks, and makes its functionality available to users lacking Overall/Read permission. While only jobs the user has Item/Read permission for will be accessible, it does not require Item/Extended Read permission to convert their configuration.
Additionally, the plugin allows any user to invoke the conversion functionality, replacing any previously generated output in userContent.
As of publication of this advisory, there is no fix. Learn why we announce this.
qualys-cs
Qualys Container Scanning Connector Plugin 1.8.0.5 and earlier does not escape user-controlled field values in a JavaScript context.
This results in a stored cross-site scripting (XSS) vulnerability exploitable by attackers with Item/Configure permission.
As of publication of this advisory, there is no fix. Learn why we announce this.
summary_report
Summary Display Plugin 1.15 and earlier does not escape the job name in a JavaScript context in build report pages.
This results in a stored cross-site scripting (XSS) vulnerability exploitable by attackers with Item/Create or Item/Configure permission.
As of publication of this advisory, there is no fix. Learn why we announce this.
google-chat-notification
Google Chat Notification Plugin 166.ve6b_de280f2e8 and earlier does not set the appropriate context for credentials lookup, allowing the use of System-scoped credentials otherwise reserved for the global configuration.
This allows attackers with Item/Configure permission to access and capture credentials they are not entitled to use.
As of publication of this advisory, there is no fix. Learn why we announce this.
horreum
Horreum Plugin 0.16.162.v33b_4a_a_b_5f828 and earlier does not set the appropriate context for credentials lookup, allowing the use of System-scoped credentials otherwise reserved for the global configuration.
This allows attackers with Item/Configure permission to have Jenkins send credentials they are not entitled to use to the administrator-configured Horreum URL.
As of publication of this advisory, there is no fix. Learn why we announce this.
violation-comments-to-gitlab
Violation Comments to GitLab Plugin 2.62.0 and earlier does not perform a permission check in an HTTP endpoint.
This allows attackers with Overall/Read permission to enumerate credentials IDs of credentials stored in Jenkins. Those can be used as part of an attack to capture the credentials using another vulnerability.
As of publication of this advisory, there is no fix. Learn why we announce this.
sauce-ondemand
Sauce OnDemand Plugin 2.2.0 and earlier does not perform permission checks in several HTTP endpoints.
This allows attackers with Overall/Read permission to enumerate credentials IDs of credentials stored in Jenkins. Those can be used as part of an attack to capture the credentials using another vulnerability.
As of publication of this advisory, there is no fix. Learn why we announce this.
codesonar
CodeSonar Plugin 3.6.0 and earlier does not perform permission checks in several HTTP endpoints.
This allows attackers with Overall/Read permission to enumerate credentials IDs of credentials stored in Jenkins. Those can be used as part of an attack to capture the credentials using another vulnerability.
As of publication of this advisory, there is no fix. Learn why we announce this.
aws-codebuild
AWS CodeBuild Plugin 0.59 and earlier does not perform permission checks in several HTTP endpoints.
This allows attackers with Overall/Read permission to enumerate credentials IDs of credentials stored in Jenkins. Those can be used as part of an attack to capture the credentials using another vulnerability.
As of publication of this advisory, there is no fix. Learn why we announce this.
ivy-report
Ivy Report Plugin 1.2 and earlier does not configure its XML parser to prevent XML external entity (XXE) attacks.
This allows attackers able to control workspace contents to have Jenkins parse a crafted Ivy report XML file that uses external entities for extraction of secrets from the Jenkins controller or server-side request forgery.
As of publication of this advisory, there is no fix. Learn why we announce this.
These versions include fixes to the vulnerabilities described above. All prior versions are considered to be affected by these vulnerabilities unless otherwise indicated.
As of publication of this advisory, no fixes are available for the following plugins:
Learn why we announce these issues.
The Jenkins project would like to thank the reporters for discovering and reporting these vulnerabilities: