High severityNVD Advisory· Published Dec 17, 2019· Updated Aug 5, 2024
CVE-2019-16550
CVE-2019-16550
Description
A cross-site request forgery vulnerability in a connection test form method in Jenkins Maven Release Plugin 0.16.1 and earlier allows attackers to have Jenkins connect to an attacker specified web server and parse XML documents.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
org.jenkins-ci.plugins.m2release:m2releaseMaven | < 0.16.2 | 0.16.2 |
Affected products
1- Range: unspecified
Patches
11e4d6fee2eab[SECURITY-1681] fix the issue
3 files changed · +20 −16
pom.xml+6 −0 modified@@ -252,6 +252,12 @@ </exclusion> </exclusions> </dependency> + <dependency> + <!-- TODO remove when baseline > 2.179 --> + <groupId>org.kohsuke</groupId> + <artifactId>access-modifier-suppressions</artifactId> + <version>${access-modifier-annotation.version}</version> + </dependency> </dependencies> <build>
src/main/java/org/jvnet/hudson/plugins/m2release/M2ReleaseBuildWrapper.java+2 −0 modified@@ -62,6 +62,7 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.verb.POST; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -475,6 +476,7 @@ public boolean isNexusSupport() { /** * Checks if the Nexus URL exists and we can authenticate against it. */ + @POST public FormValidation doUrlCheck(@QueryParameter String urlValue, final @QueryParameter String usernameValue, final @QueryParameter Secret passwordValue) {
src/main/java/org/jvnet/hudson/plugins/m2release/nexus/StageClient.java+12 −16 modified@@ -23,36 +23,33 @@ */ package org.jvnet.hudson.plugins.m2release.nexus; -import hudson.util.IOUtils; - import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; - import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathException; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; - import org.apache.commons.codec.binary.Base64; +import org.kohsuke.accmod.restrictions.suppressions.SuppressRestrictedWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; - +import hudson.util.IOUtils; +import jenkins.util.xml.XMLUtils; /** * The Stage client acts as the interface to Nexus Pro staging via the Nexus REST APIs. A single StageClient * is not thread safe. @@ -466,17 +463,19 @@ else if (response == HttpURLConnection.HTTP_NOT_FOUND) { * @return the parsed Document. * @throws StageException if there was an issue obtaining or parsing the document. */ + @SuppressRestrictedWarnings(XMLUtils.class) // TODO remove when baseline > 2.179 protected Document getDocument(URL url) throws StageException { try { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); addAuthHeader(conn); conn.setRequestProperty("Accept", "application/xml"); int status = conn.getResponseCode(); if (status == HttpURLConnection.HTTP_OK) { - DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Document doc = builder.parse(conn.getInputStream()); - conn.disconnect(); - return doc; + try (InputStream is = conn.getInputStream(); InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8)) { + Document doc = XMLUtils.parse(isr); + conn.disconnect(); + return doc; + } } else { drainOutput(conn); @@ -494,9 +493,6 @@ else if (status == HttpURLConnection.HTTP_NOT_FOUND) { catch (IOException ex) { throw createStageExceptionForIOException(nexusURL, ex); } - catch (ParserConfigurationException ex) { - throw new StageException(ex); - } catch (SAXException ex) { throw new StageException(ex); }
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/advisories/GHSA-g2x8-xw86-vpq3ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2019-16550ghsaADVISORY
- www.openwall.com/lists/oss-security/2019/12/17/1ghsamailing-listx_refsource_MLISTWEB
- github.com/jenkinsci/m2release-plugin/commit/1e4d6fee2eab16e7a396b6d3d5f10a87e5c29cc2ghsaWEB
- jenkins.io/security/advisory/2019-12-17/ghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.