CVE-2020-2094
Description
A missing permission check in the Jenkins Health Advisor by CloudBees Plugin allows attackers with Overall/Read access to send a fixed email to an attacker-specific recipient.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
A missing permission check in the Jenkins Health Advisor by CloudBees Plugin allows attackers with Overall/Read access to send a fixed email to an attacker-specific recipient.
Vulnerability
Details
The Jenkins Health Advisor by CloudBees Plugin, versions 3.0 and earlier, contains a missing permission check in its doTestSendEmail method. This method is responsible for sending a test email to a specified recipient. The vulnerability stems from the fact that this method did not verify whether the user had the required ADMINISTER permission before executing the email sending functionality [1][4].
Attack
Vector
An attacker with only Overall/Read permission on a Jenkins instance can exploit this flaw. By crafting a request to the doTestSendEmail endpoint, the attacker can trigger the plugin to send a fixed email to a recipient email address that the attacker controls. The attack does not require any additional authentication or special privileges beyond the basic read access [1][2]. The fix, implemented in the plugin's source code, adds both a @POST annotation and an explicit permission check: Jenkins.get().checkPermission(Jenkins.ADMINISTER) [4].
Impact
Successful exploitation allows the attacker to send a predefined email message to an email address of their choice. The content of the email is fixed by the plugin and cannot be modified by the attacker, but the action could be used for limited harassment, social engineering, or to test for valid email addresses on the Jenkins infrastructure. The CVSS score for this vulnerability is Medium (4.3) [1][3].
Mitigation
Users should upgrade the Jenkins Health Advisor by CloudBees Plugin to version 3.0.1 or later, which includes the missing permission check and enforces the ADMINISTER permission for the doTestSendEmail endpoint [1]. Administrators can also review and restrict Overall/Read permissions as a temporary workaround, though upgrading is the recommended solution.
AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
org.jenkins-ci.plugins:cloudbees-jenkins-advisorMaven | < 3.0.1 | 3.0.1 |
Affected products
2- Range: unspecified
Patches
1f53fe8a41a15[SECURITY-1708]
2 files changed · +7 −0
src/main/java/com/cloudbees/jenkins/plugins/advisor/AdvisorGlobalConfiguration.java+3 −0 modified@@ -32,6 +32,7 @@ import org.kohsuke.stapler.QueryParameter; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.interceptor.RequirePOST; +import org.kohsuke.stapler.verb.POST; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -394,8 +395,10 @@ public FormValidation doCheckEmail(@QueryParameter String value) { return EmailValidator.validateEmail(value); } + @POST public FormValidation doTestSendEmail(@QueryParameter("email") final String value, @QueryParameter("acceptToS") final boolean acceptToS) { + Jenkins.get().checkPermission(Jenkins.ADMINISTER); return EmailValidator.testSendEmail(value,acceptToS); }
src/main/java/com/cloudbees/jenkins/plugins/advisor/client/model/Recipient.java+4 −0 modified@@ -6,8 +6,10 @@ import hudson.model.AbstractDescribableImpl; import hudson.model.Descriptor; import hudson.util.FormValidation; +import jenkins.model.Jenkins; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; +import org.kohsuke.stapler.verb.POST; public class Recipient extends AbstractDescribableImpl<Recipient> { @@ -40,8 +42,10 @@ public FormValidation doCheckEmail(@QueryParameter String value) { return EmailValidator.validateEmail(value); } + @POST public FormValidation doTestSendEmail(@QueryParameter("email") final String value, @RelativePath("..") @QueryParameter("acceptToS") final boolean acceptToS) { + Jenkins.get().checkPermission(Jenkins.ADMINISTER); return EmailValidator.testSendEmail(value, acceptToS); }
Vulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
4- github.com/advisories/GHSA-h72v-652w-xv64ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2020-2094ghsaADVISORY
- github.com/jenkinsci/cloudbees-jenkins-advisor-plugin/commit/f53fe8a41a1566fdd7d2996779f6c5684ef3e2dfghsaWEB
- jenkins.io/security/advisory/2020-01-15/ghsax_refsource_CONFIRMWEB
News mentions
1- Jenkins Security Advisory 2020-01-15Jenkins Security Advisories · Jan 15, 2020