This advisory announces vulnerabilities in the following Jenkins deliverables:
Jenkins form controls include an expandable textbox that can transform from a single-line text box to a multi-line text area.
The implementation of this transformation interpreted the text content of the form field as HTML.
This resulted in a cross-site scripting vulnerability exploitable by attackers able to control the contents of such f:expandableTextbox
form controls.
Jenkins no longer interprets f:expandableTextbox
text content as HTML when transforming it.
Jenkins interpreted items added to f:combobox
form controls as HTML.
This resulted in a cross-site scripting vulnerability exploitable by attackers able to control the contents of f:combobox
form controls.
Jenkins no longer interprets items added to a combobox as HTML.
This might be a breaking change for plugins that relied on the previous, undocumented behavior to add formatting to |
Jenkins did not escape the tag name on the tooltip for tag actions shown in the build history. This resulted in a cross-site scripting vulnerability exploitable by attackers able to control the SCM tag name for these actions.
Jenkins now escapes the SCM tag action.
Jenkins did not escape the reason a queue item is blocked in tooltips. This resulted in a cross-site scripting vulnerability exploitable by attackers able to control the reason a queue item is blocked, for example a label expression that does not match idle executors.
Jenkins now escapes the reason a queue item is blocked in tooltips.
Jenkins shows various technical information about the current user on the /whoAmI
URL.
The information shown includes HTTP request headers.
This allowed attackers able to exploit another cross-site scripting vulnerability to obtain the Cookie
header’s value even if the HttpOnly
flag would prevent direct access via JavaScript.
Jenkins no longer shows the value of the Cookie
HTTP header on the /whoAmI
URL.
Jenkins did not validate or otherwise limit the possible values administrators could specify as Jenkins root URL.
This resulted in a cross-site scripting vulnerability exploitable by users with Overall/Administer permission.
Jenkins now prevents values other than HTTP/HTTPS URLs from being set as Jenkins root URL. Existing instances with invalid root URLs will behave as if no root URL was set.
In case this results in problems, e.g. a valid URL unexpectedly being rejected, set the system property |
project-inheritance
Mask Passwords Plugin allows users to define secret environment variables (typically passwords) to be passed to builds, both globally, and for specific jobs. These environment variables are expected to not be shown.
Project Inheritance Plugin showed the variable values on its Full Build Flow view and included them in the metadata download without masking.
Project Inheritance Plugin no longer shows variables contributed from Mask Password Plugin without masking.
project-inheritance
Project Inheritance Plugin allows the creation of projects based on templates defined in the plugin configuration.
A missing permission check in the HTTP endpoint triggering project creation allowed users with Overall/Read permission to create these projects. Additionally, the HTTP endpoint did not require POST requests, resulting in a CSRF vulnerability.
The HTTP endpoint triggering project creation now requires Item/Create permission and submission of requests via POST.
log-parser
Log Parser Plugin did not escape an error message shown when log parsing patterns are invalid. This resulted in a persisted cross-site scripting vulnerability exploitable by attackers able to control the log parsing rules configuration, typically users with Job/Configure permission.
Jenkins applies the missing escaping by default since 2.146 and LTS 2.138.2, so newer Jenkins releases are not affected by this vulnerability.
Log Parser Plugin now escapes all variables displayed in its views.
neuvector-vulnerability-scanner
NeuVector Vulnerability Scanner Plugin stored registry credentials unencrypted in its global configuration file io.jenkins.plugins.neuvector.NeuVectorBuilder.xml
on the Jenkins controller.
These credentials could be viewed by users with access to the Jenkins controller file system.
NeuVector Vulnerability Scanner Plugin now stores these credentials encrypted.
aqua-microscanner
Aqua MicroScanner Plugin stores a token credential in its global Jenkins configuration.
While the token is stored encrypted on disk, it was transmitted in plain text as part of the configuration form. This could result in exposure of the token through browser extensions, cross-site scripting vulnerabilities, and similar situations.
Aqua MicroScanner Plugin now encrypts the token transmitted to administrators viewing the global configuration form.
aqua-security-scanner
Aqua Security Scanner Plugin stores a password in its global Jenkins configuration.
While the password is stored encrypted on disk, it was transmitted in plain text as part of the configuration form. This could result in exposure of the password through browser extensions, cross-site scripting vulnerabilities, and similar situations.
Aqua Security Scanner Plugin now encrypts the password transmitted to administrators viewing the global configuration form.
inedo-buildmaster
Inedo BuildMaster Plugin Plugin stores a service password in its global Jenkins configuration.
While the password is stored encrypted on disk, it was transmitted in plain text as part of the configuration form. This could result in exposure of the password through browser extensions, cross-site scripting vulnerabilities, and similar situations.
Inedo BuildMaster Plugin Plugin now encrypts the password transmitted to administrators viewing the global configuration form.
inedo-proget
Inedo ProGet Plugin Plugin stores a service password in its global Jenkins configuration.
While the password is stored encrypted on disk, it was transmitted in plain text as part of the configuration form. This could result in exposure of the password through browser extensions, cross-site scripting vulnerabilities, and similar situations.
Inedo ProGet Plugin Plugin now encrypts the password transmitted to administrators viewing the global configuration form.
datatheorem-mobile-app-security
Data Theorem Mobile Security: CI/CD Plugin stored a proxy password unencrypted in job config.xml
files on the Jenkins controller.
This password could be viewed by users with Extended Read permission, or access to the Jenkins controller file system.
Data Theorem Mobile Security: CI/CD Plugin now stores the proxy password encrypted. Existing jobs need to have their configuration saved for existing plain text proxy passwords to be overwritten.
git-changelog
Git Changelog Plugin stored MediaWiki and Jira passwords unencrypted in job config.xml
files on the Jenkins controller.
These passwords could be viewed by users with Extended Read permission, or access to the Jenkins controller file system.
Git Changelog Plugin now stores these passwords encrypted. Existing jobs need to have their configuration saved for existing plain text passwords to be overwritten.
gitlab-logo
GitLab Logo Plugin stored a private token unencrypted in its global configuration file org.jenkinsci.plugins.gitlablogo.GitlabLogoProperty.xml
on the Jenkins controller.
This token could be viewed by users with access to the Jenkins controller file system.
GitLab Logo Plugin now stores the token encrypted.
violation-comments-to-gitlab
Violation Comments to GitLab Plugin stored API tokens unencrypted in job config.xml
files and its global configuration file org.jenkinsci.plugins.jvctgl.ViolationsToGitLabGlobalConfiguration.xml
on the Jenkins controller.
These credentials could be viewed by users with Extended Read permission, or access to the Jenkins controller file system.
Violation Comments to GitLab Plugin now stores these credentials encrypted. Existing jobs need to have their configuration saved for existing plain text credentials to be overwritten.
kubernetes-pipeline-steps
Kubernetes Pipeline - Kubernetes Steps Plugin defines a custom list of pre-approved signatures for all scripts protected by the Script Security sandbox.
This custom list of pre-approved signatures allows the use of methods that can be used to bypass Script Security sandbox protection. This results in arbitrary code execution on any Jenkins instance with this plugin installed.
As of publication of this advisory, there is no fix.
kubernetes-pipeline-arquillian-steps
Kubernetes Pipeline - Arquillian Steps Plugin defines a custom list of pre-approved signatures for all scripts protected by the Script Security sandbox.
This custom list of pre-approved signatures allows the use of methods that can be used to bypass Script Security sandbox protection. This results in arbitrary code execution on any Jenkins instance with this plugin installed.
As of publication of this advisory, there is no fix.
application-director-plugin
vFabric Application Director Plugin stores the Application Director password unencrypted in its global configuration file jfullam.vfabric.jenkins.plugin.ApplicationDirectorPostBuildDeployer.xml
on the Jenkins controller.
This password can be viewed by users with access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
assembla
Assembla Plugin stores the Assembla password unencrypted in its global configuration file jenkins.plugin.assembla.AssemblaProjectProperty.xml
on the Jenkins controller.
This password can be viewed by users with access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
azure-event-grid-notifier
Azure Event Grid Build Notifier Plugin stores the Azure Event Grid secret key unencrypted in job config.xml
files on the Jenkins controller.
This key can be viewed by users with Extended Read permission, or access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
call-remote-job-plugin
Call Remote Job Plugin stores a password unencrypted in job config.xml
files on the Jenkins controller.
This password can be viewed by users with Extended Read permission, or access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
codescan
CodeScan Plugin stores an API key unencrypted in its global configuration file com.villagechief.codescan.jenkins.CodeScanBuilder.xml
on the Jenkins controller.
This API key can be viewed by users with access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
elOyente
elOyente Plugin stores a password unencrypted in its global configuration file com.technicolor.eloyente.ElOyente.xml
on the Jenkins controller.
This password can be viewed by users with access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
gcal
Google Calendar Plugin stores a calendar password unencrypted in job config.xml
files on the Jenkins controller.
This password can be viewed by users with Extended Read permission, or access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
gem-publisher
Gem Publisher Plugin stores an API key unencrypted in its global configuration file net.arangamani.jenkins.gempublisher.GemPublisher.xml
on the Jenkins controller.
This API key can be viewed by users with access to the Jenkins controller file system.
As of publication of this advisory, there is no fix.
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: