Skip to content

GHSA-4cch-wxpw-8p28 CVE-2020-26258

Server-Side Forgery Request can be activated unmarshalling with XStream

Medium Maven
Severity
6.3 / 10
Medium · CVSS 3.1
Exploit chance (EPSS)
81.82%
Chance of exploitation in the next 30 days. Higher than 99.65% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-918 Server-Side Request Forgery (SSRF)
Fix
1.4.15
Upgrade com.thoughtworks.xstream:xstream to this version or later

Description

Impact

The vulnerability may allow a remote attacker to request data from internal resources that are not publicly available only by manipulating the processed input stream.

Patches

If you rely on XStream's default blacklist of the Security Framework, you will have to use at least version 1.4.15.

Workarounds

The reported vulnerability does not exist running Java 15 or higher.

No user is affected, who followed the recommendation to setup XStream's Security Framework with a whitelist! Anyone relying on XStream's default blacklist can immediately switch to a whilelist for the allowed types to avoid the vulnerability.

Users of XStream 1.4.14 or below who still insist to use XStream default blacklist - despite that clear recommendation - can use a workaround depending on their version in use.

Users of XStream 1.4.14 can simply add two lines to XStream's setup code:

xstream.denyTypes(new String[]{ "jdk.nashorn.internal.objects.NativeString" });
xstream.denyTypesByRegExp(new String[]{ ".*\\.ReadAllStream\\$FileStream" });

Users of XStream 1.4.14 to 1.4.13 can simply add three lines to XStream's setup code:

xstream.denyTypes(new String[]{ "javax.imageio.ImageIO$ContainsFilter", "jdk.nashorn.internal.objects.NativeString" });
xstream.denyTypes(new Class[]{ java.lang.ProcessBuilder.class });
xstream.denyTypesByRegExp(new String[]{ ".*\\.ReadAllStream\\$FileStream" });

Users of XStream 1.4.12 to 1.4.7 who want to use XStream with a black list will have to setup such a list from scratch and deny at least the following types: javax.imageio.ImageIO$ContainsFilter, java.beans.EventHandler, java.lang.ProcessBuilder, jdk.nashorn.internal.objects.NativeString.class, java.lang.Void and void and deny several types by name pattern.

xstream.denyTypes(new String[]{ "javax.imageio.ImageIO$ContainsFilter", "jdk.nashorn.internal.objects.NativeString" });
xstream.denyTypes(new Class[]{ java.lang.ProcessBuilder.class, "jdk.nashorn.internal.objects.NativeString", java.beans.EventHandler.class, java.lang.ProcessBuilder.class, java.lang.Void.class, void.class });
xstream.denyTypesByRegExp(new String[]{ ".*\\$LazyIterator", "javax\\.crypto\\..*", ".*\\.ReadAllStream\\$FileStream" });

Users of XStream 1.4.6 or below can register an own converter to prevent the unmarshalling of the currently know critical types of the Java runtime. It is in fact an updated version of the workaround for CVE-2013-7285:

xstream.registerConverter(new Converter() {
  public boolean canConvert(Class type) {
    return type != null && (type == java.beans.EventHandler.class || type == java.lang.ProcessBuilder.class
        || type.getName().equals("javax.imageio.ImageIO$ContainsFilter") || type.getName().equals("jdk.nashorn.internal.objects.NativeString")
        || type == java.lang.Void.class || void.class || Proxy.isProxy(type))
        || type.getName().startsWith("javax.crypto.") || type.getName().endsWith("$LazyIterator") || type.getName().endsWith(".ReadAllStream$FileStream"));
  }

  public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
    throw new ConversionException("Unsupported type due to security reasons.");
  }

  public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
    throw new ConversionException("Unsupported type due to security reasons.");
  }
}, XStream.PRIORITY_LOW);

For more information

If you have any questions or comments about this advisory:

Affected versions

Maven

PackageVulnerableFixed in
com.thoughtworks.xstream:xstream
< 1.4.15
1.4.15

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

com.thoughtworks.xstream:xstream Maven → 1.4.15

maven
<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.15</version></dependency>
gradle
implementation("com.thoughtworks.xstream:xstream:1.4.15")

Severity breakdown

CVSS 3.1 6.3

CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N

Attack vector
Network
Attack complexity
High
Privileges required
Low
User interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

Weakness

CWE-918: Server-Side Request Forgery (SSRF)

The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
CVE-2021-39144
XStream is vulnerable to a Remote Command Execution attack
High Known exploited Also affects com.thoughtworks.xstream:xstream
GHSA-hfq9-hggm-c56q
XStream is vulnerable to a Denial of Service attack due to stack overflow from a manipulated binary input stream
High Also affects com.thoughtworks.xstream:xstream
GHSA-f8cc-g7j8-xxpm
XStream can cause a Denial of Service by injecting deeply nested objects raising a stack overflow
High Also affects com.thoughtworks.xstream:xstream
GHSA-j563-grx4-pjpv
XStream can cause Denial of Service via stack overflow
High Also affects com.thoughtworks.xstream:xstream
GHSA-rmr5-cpv2-vgjf
Denial of Service by injecting highly recursive collections or maps in XStream
High Also affects com.thoughtworks.xstream:xstream
GHSA-64xx-cq4q-mf44
XStream is vulnerable to an Arbitrary Code Execution attack
High Also affects com.thoughtworks.xstream:xstream
GHSA-6wf9-jmg9-vxcc
XStream can cause a Denial of Service
Medium Also affects com.thoughtworks.xstream:xstream
GHSA-g5w6-mrj7-75h2
XStream is vulnerable to an Arbitrary Code Execution attack
High Also affects com.thoughtworks.xstream:xstream
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor