Jenkins Security Advisory 2019-09-25

This advisory announces vulnerabilities in the following Jenkins deliverables:

Descriptions

Stored XSS vulnerability in expandable textbox form control

SECURITY-1498 / CVE-2019-10401

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.

XSS vulnerability in combobox form control

SECURITY-1525 / CVE-2019-10402

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.

Note

This might be a breaking change for plugins that relied on the previous, undocumented behavior to add formatting to f:combobox elements. This has been removed without replacement. Plugin developers are advised to only add plain text entries to f:combobox controls.

Stored XSS vulnerability in SCM tag action tooltip

SECURITY-1537 (1) / CVE-2019-10403

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.

Stored XSS vulnerability in queue item tooltip

SECURITY-1537 (2) / CVE-2019-10404

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.

Diagnostic web page exposed Cookie HTTP header

SECURITY-1505 / CVE-2019-10405

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.

XSS vulnerability in Jenkins URL setting

SECURITY-1471 / CVE-2019-10406

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.

Note

In case this results in problems, e.g. a valid URL unexpectedly being rejected, set the system property jenkins.model.JenkinsLocationConfiguration.disableUrlValidation to true to disable this restriction. Learn more about system properties in Jenkins.

Project Inheritance Plugin showed secret environment variables defined in Mask Passwords Plugin

SECURITY-351 / CVE-2019-10407

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.

CSRF vulnerability and missing permission check in Project Inheritance Plugin

SECURITY-401 / CVE-2019-10408 (CSRF), CVE-2019-10409 (permission check)

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.

Stored XSS vulnerability in Log Parser Plugin

SECURITY-732 / CVE-2019-10410

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 Plugin stored credentials in plain text

SECURITY-1504 / CVE-2019-10430

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 Plugin showed plain text credential in configuration form

SECURITY-1507 / CVE-2019-10427

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 Plugin showed plain text password in configuration form

SECURITY-1508 / CVE-2019-10428

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 Plugin Plugin showed plain text password in configuration form

SECURITY-1513 / CVE-2019-10411

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 Plugin Plugin showed plain text password in configuration form

SECURITY-1514 / CVE-2019-10412

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.

Data Theorem Mobile Security: CI/CD Plugin stored credentials in plain text

SECURITY-1557 / CVE-2019-10413

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 Plugin stored credentials in plain text

SECURITY-1574 / CVE-2019-10414

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 Plugin stored credentials in plain text

SECURITY-1575 / CVE-2019-10429

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 Plugin stored credentials in plain text

SECURITY-1577 / CVE-2019-10415 (global password), CVE-2019-10416 (job password)

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.

Script sandbox bypass vulnerability in Kubernetes Pipeline - Kubernetes Steps Plugin

SECURITY-920 (1) / CVE-2019-10417

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.

Script sandbox bypass vulnerability in Kubernetes Pipeline - Arquillian Steps Plugin

SECURITY-920 (2) / CVE-2019-10418

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.

vFabric Application Director Plugin stores credentials in plain text

SECURITY-1541 / CVE-2019-10419

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 Plugin stores credentials in plain text

SECURITY-1543 / CVE-2019-10420

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 Build Notifier Plugin stores credentials in plain text

SECURITY-1544 / CVE-2019-10421

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 stores credentials in plain text

SECURITY-1548 / CVE-2019-10422

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 Plugin stores credentials in plain text

SECURITY-1551 / CVE-2019-10423

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 Plugin stores credentials in plain text

SECURITY-1561 / CVE-2019-10424

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.

Google Calendar Plugin stores credentials in plain text

SECURITY-1572 / CVE-2019-10425

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 Plugin stores credentials in plain text

SECURITY-1573 / CVE-2019-10426

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.

Severity

Affected Versions

  • Jenkins weekly up to and including 2.196
  • Jenkins LTS up to and including 2.176.3
  • Aqua MicroScanner Plugin up to and including 1.0.7
  • Aqua Security Scanner Plugin up to and including 3.0.17
  • Assembla Plugin up to and including 1.4
  • Azure Event Grid Build Notifier Plugin up to and including 0.1
  • Call Remote Job Plugin up to and including 1.0.21
  • CodeScan Plugin up to and including 0.11
  • Data Theorem Mobile Security: CI/CD Plugin up to and including 1.3
  • elOyente Plugin up to and including 1.3
  • Gem Publisher Plugin up to and including 1.0
  • Git Changelog Plugin up to and including 2.17
  • GitLab Logo Plugin up to and including 1.0.3
  • Google Calendar Plugin up to and including 0.4
  • Inedo BuildMaster Plugin Plugin up to and including 2.4.0
  • Inedo ProGet Plugin Plugin up to and including 1.2
  • Kubernetes Pipeline - Arquillian Steps Plugin up to and including 1.6
  • Kubernetes Pipeline - Kubernetes Steps Plugin up to and including 1.6
  • Log Parser Plugin up to and including 2.0
  • NeuVector Vulnerability Scanner Plugin up to and including 1.5
  • Project Inheritance Plugin up to and including 19.08.01
  • vFabric Application Director Plugin up to and including 1.3
  • Violation Comments to GitLab Plugin up to and including 2.28

Fix

  • Jenkins weekly should be updated to version 2.197
  • Jenkins LTS should be updated to version 2.176.4 or 2.190.1
  • Aqua MicroScanner Plugin should be updated to version 1.0.8
  • Aqua Security Scanner Plugin should be updated to version 3.0.18
  • Data Theorem Mobile Security: CI/CD Plugin should be updated to version 1.4.0
  • Git Changelog Plugin should be updated to version 2.18
  • GitLab Logo Plugin should be updated to version 1.0.4
  • Inedo BuildMaster Plugin Plugin should be updated to version 2.5.0
  • Inedo ProGet Plugin Plugin should be updated to version 1.3
  • Log Parser Plugin should be updated to version 2.1
  • NeuVector Vulnerability Scanner Plugin should be updated to version 1.6
  • Project Inheritance Plugin should be updated to version 19.08.02
  • Violation Comments to GitLab Plugin should be updated to version 2.29

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:

  • Assembla Plugin
  • Azure Event Grid Build Notifier Plugin
  • Call Remote Job Plugin
  • CodeScan Plugin
  • elOyente Plugin
  • Gem Publisher Plugin
  • Google Calendar Plugin
  • Kubernetes Pipeline - Arquillian Steps Plugin
  • Kubernetes Pipeline - Kubernetes Steps Plugin
  • vFabric Application Director Plugin

Credit

The Jenkins project would like to thank the reporters for discovering and reporting these vulnerabilities:

  • Daniel Beck, CloudBees, Inc. for SECURITY-401
  • James Holderness, IB Boost for SECURITY-1507, SECURITY-1508, SECURITY-1513, SECURITY-1514, SECURITY-1541, SECURITY-1543, SECURITY-1544, SECURITY-1548, SECURITY-1551, SECURITY-1557, SECURITY-1561, SECURITY-1572, SECURITY-1573, SECURITY-1574, SECURITY-1575, SECURITY-1577
  • Jesse Glick, CloudBees, Inc. for SECURITY-920 (1), SECURITY-920 (2)
  • Jonathan Leitschuh for SECURITY-1505
  • Katherine Hough <khough2@gmu.edu> and Jonathan Bell <bellj@gmu.edu> for SECURITY-1471
  • Matt Sicker, CloudBees Inc. and Wadeck Follonier, CloudBees Inc. for SECURITY-1498, SECURITY-1525
  • Oleg Nenashev, CloudBees, Inc. for SECURITY-732
  • Wadeck Follonier, CloudBees, Inc. for SECURITY-1537 (1), SECURITY-1537 (2)