Jenkins Security Advisory 2018-03-26

This advisory announces vulnerabilities in the following Jenkins deliverables:

Descriptions

GitHub Pull Request Builder Plugin stores GitHub access tokens in build.xml

SECURITY-261 / CVE-2018-1000142

GitHub Pull Request Builder Plugin stored serialized objects in build.xml files that contained the credential used to poll Jenkins. This can be used by users with Jenkins controller file system access to obtain GitHub credentials.

Since 1.40.0, the plugin no longer stores serialized objects containing the credential on disk.

Builds started before the plugin was updated to 1.40.0 will retain the encoded credentials on disk. We strongly recommend revoking old GitHub credentials used in Jenkins. We’re providing a script for use in the Script Console that will attempt to remove old stored credentials from build.xml files.

GitHub Pull Request Builder Plugin stores webhook secret in plain text

SECURITY-262 / CVE-2018-1000143

GitHub Pull Request Builder Plugin stored the webhook secret shared between Jenkins and GitHub in plain text.

This allowed users with Jenkins controller local file system access and Jenkins administrators to retrieve the stored password. The latter could result in exposure of the passwords through browser extensions, cross-site scripting vulnerabilities, and similar situations.

GitHub Pull Request Builder Plugin 1.32.1 and newer stores the webhook secret encrypted on disk.

Cucumber Living Documentation Plugin disabled Content-Security-Policy for archived and workspace files

SECURITY-308 / CVE-2018-1000144

Jenkins 1.641 and 1.625.3 introduced Content-Security-Policy HTTP headers as protection against Cross-Site Scripting attacks using workspace files and archived artifacts served using DirectoryBrowserSupport (SECURITY-95).

Cucumber Living Documentation Plugin disabled this XSS protection until Jenkins was restarted whenever a Cucumber Report was viewed by any user to work around the Content-Security-Policy limitations.

While disabling this protection mechanism temporarily may be necessary to make plugins work that haven’t been adapted to work with the Content-Security-Policy restriction, this should only be done by administrators, as doing so may result in a security issue (see Configuring Content Security Policy).

This has been addressed in version 1.1.0 of the plugin, and it will now request that users change the Content-Security-Policy option in Jenkins.

Perforce Plugin uses ineffective credentials encryption

SECURITY-373 / CVE-2018-1000145

Perforce Plugin encrypts its credentials using DES and an encryption key stored in its public source code, so it only serves as basic obfuscation. This allowed users with Jenkins controller local file system access and Jenkins administrators to retrieve the stored password. The latter could result in exposure of the passwords through browser extensions, cross-site scripting vulnerabilities, and similar situations.

As of publication of this advisory, there is no fix. The plugin has been removed from publication at the request of its former maintainers. We recommend that users of Perforce Plugin use the P4 Plugin instead.

vSphere Plugin does not validate SSL/TLS certificates

SECURITY-504 / CVE-2018-1000151

vSphere Plugin disabled SSL/TLS certificate validation unconditionally, allowing potential man-in-the-middle attacks.

vSphere Plugin 2.17 now has SSL/TLS certificate validation enabled by default.

CSRF vulnerability and missing permission checks in vSphere Plugin form validation allowed enumerating credentials IDs, capturing credentials, and denial of service

SECURITY-745 / CVE-2018-1000152 and CVE-2018-1000153

vSphere Plugin did not perform permission checks on methods implementing form validation. This allowed users with Overall/Read access to Jenkins to perform various actions such as:

  • Connect to an attacker-specified vSphere server using attacker-specified credentials IDs obtained through another method, capturing credentials stored in Jenkins

  • Connect to configured vSphere servers and looking up information, potentially resulting in denial of service

Additionally, these form validation methods did not require POST requests, resulting in a CSRF vulnerability.

These form validation methods now require POST requests and appropriate user permissions.

Liquibase Runner Plugin allows users to load arbitrary Java code into controller JVM

SECURITY-519 / CVE-2018-1000146

Liquibase Runner Plugin allows users with Job/Configure permission to configure its build step in a way that loads arbitrary class files into the Jenkins controller JVM, resulting in arbitrary code execution.

As of publication of this advisory, there is no fix.

Perforce Plugin credentials can be obtained by users with Job/Extended Read permission

SECURITY-536 / CVE-2018-1000147

Jenkins prevents users with Extended Read permission from obtaining secrets such as credentials stored in job configurations.

Perforce Plugin implements its own credential encryption using DES and an encryption key stored in its public source code. This is not considered a secret by Jenkins, resulting in potential exposure of Perforce credentials stored in job configurations to users with Extended Read permission. While these are encrypted, this can only be considered basic obfuscation due to the hard-coded public encryption key used.

As of publication of this advisory, there is no fix. The plugin has been removed from publication at the request of its maintainers. We recommend that users of Perforce Plugin use the P4 Plugin instead.

Copy To Slave Plugin allows access to arbitrary files on the Jenkins controller file system

SECURITY-545 / CVE-2018-1000148

Copy To Slave Plugin allows users with Job/Configure permissions to configure it in such a way that it allows obtaining arbitrary files accessible to the Jenkins controller process from the Jenkins controller file system.

As of publication of this advisory, there is no fix.

Ansible Plugin disabled host key verification by default

SECURITY-630 / CVE-2018-1000149

Ansible Plugin disabled host key verification by default, having it only as an opt-in option.

Ansible Plugin 1.0 now enables host key verification by default, adding options allowing users to opt out.

Existing configurations that previously did not opt into host key verification will have host key verification enabled after update, possibly resulting in failures.

Reverse Proxy Auth persisted authorities cache on disk

SECURITY-736 / CVE-2018-1000150

Reverse Proxy Auth Plugin persisted a cache of granted authorities (group memberships) on disk.

This could allow users with local Jenkins controller file system access to obtain group membership information of Jenkins users.

Reverse Proxy Auth Plugin 1.6.0 and newer no longer store the cache of granted authorities on disk.

Mailer Plugin allowed unauthorized users to send test emails

SECURITY-774 / CVE-2018-8718

A missing permission check in Mailer Plugin allowed users with Overall/Read access to Jenkins to have it connect to a user-specified mail server with user-specified credentials to send a test email to a user-specified email address. The email subject and body could not be changed. This could result in DoS if, for example, specifying a valid mail server but invalid credentials.

As the same URL did not require POST to be used, it also was vulnerable to cross-site request forgery.

The URL handling test emails now requires POST to protect from CSRF, and performs an Overall/Administer permission check.

Severity

Affected Versions

  • Ansible Plugin up to and including 0.8
  • Copy To Slave Plugin up to and including 1.4.4
  • Cucumber Living Documentation Plugin up to and including 1.0.12
  • GitHub Pull Request Builder Plugin up to and including 1.39.0
  • Liquibase Runner Plugin up to and including 1.3.0
  • Mailer Plugin up to and including 1.20
  • Perforce Plugin up to and including 1.3.36
  • Reverse Proxy Auth Plugin up to and including 1.5
  • vSphere Plugin up to and including 2.16

Fix

  • Ansible Plugin should be updated to version 1.0
  • Cucumber Living Documentation Plugin should be updated to version 1.1.0
  • GitHub Pull Request Builder Plugin should be updated to version 1.40.0
  • Mailer Plugin should be updated to version 1.21
  • Reverse Proxy Auth Plugin should be updated to version 1.6.0
  • vSphere Plugin should be updated to version 2.17

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:

  • Copy To Slave Plugin
  • Liquibase Runner Plugin
  • Perforce Plugin

Credit

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

  • Daniel Beck, CloudBees, Inc. for SECURITY-308, SECURITY-630, SECURITY-745
  • Hyoungwook Jang, SKinfosec, Inc. for SECURITY-774
  • Jesse Glick, CloudBees, Inc. for SECURITY-545
  • Oleg Nenashev, CloudBees, Inc. for SECURITY-536, SECURITY-736
  • Peter Adkins for SECURITY-504
  • Steve Marlowe <smarlowe@cisco.com> of Cisco ASIG for SECURITY-261, SECURITY-262, SECURITY-373
  • Yoann Dubreuil, CloudBees, Inc. for SECURITY-519