GHSA-4cch-wxpw-8p28 CVE-2020-26258
Server-Side Forgery Request can be activated unmarshalling with XStream
- 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:
- Open an issue in XStream
- Contact us at XStream Google Group
Affected versions
Maven
| Package | Vulnerable | Fixed 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
Advisories
Packages
Other links
- github.com/x-stream/xstream/security/advisories/GHSA-4cch-wxpw-8p28
- lists.apache.org/thread.html/r97993e3d78e1f5389b7b172ba9f308440830ce5f051ee62714a0aa3…
- lists.apache.org/thread.html/r97993e3d78e1f5389b7b172ba9f308440830ce5f051ee62714a0aa3…
- lists.debian.org/debian-lts-announce/2020/12/msg00042.html
- lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/22K…
- lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/PVP…
- lists.fedoraproject.org/archives/list/package-announce%40lists.fedoraproject.org/message/QGX…
- lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/22KVR…
- lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/PVPHZ…
- lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/QGXIU…
- security.netapp.com/advisory/ntap-20210409-0005
- debian.org/security/2021/dsa-4828
- x-stream.github.io/CVE-2020-26258.html
Timeline
- Published
- Last updated by the source
- Latest EPSS score
Related advisories
| Advisory | Severity | Why 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 |
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