
CVE-2021-43297 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Hessian-Lite डिसीरियलाइज़ेशन के माध्यम से Apache Dubbo <= 2.7.13 में रिमोट कोड एक्ज़ीक्यूशन प्राप्त करता है।
Dubbo Hessian-Lite 3.2.11 और उससे पहले के संस्करणों में संभावित RCE हमले का जोखिम मौजूद है। जब Hessian-Lite को सीरियलाइज़ेशन अपवाद का सामना करना पड़ता है, तो यह संबंधित जानकारी आउटपुट करता है, जो कुछ दुर्भावनापूर्ण रूप से तैयार किए गए Bean के toString विधि को ट्रिगर कर सकता है, जिससे RCE हमला हो सकता है।
शुरुआती POC केवल Apache Dubbo<=2.7.8 पर RCE प्राप्त कर सकता था, सिद्धांत के लिए 先知 लेख देखें (समीक्षा पास होने के बाद वापस आकर संशोधित करें)। सबमिशन के बाद और शोध करने पर, Apache Dubbo<=2.7.13 पर RCE प्राप्त किया जा सकता है, सिद्धांत विश्लेषण के लिए मेरा ब्लॉग लेख देखें
प्रभाव निम्नलिखित है

POC उपयोग की शर्तें:
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
tar zxvf zookeeper-3.3.3.tar.gz
cd zookeeper-3.3.3
cp conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/पूर्ण_पथ/zookeeper-3.3.3/data
# the port at which the clients will connect
clientPort=2181
mkdir data
touch data/myid
cd /private/var/tmp/zookeeper-3.3.3/bin
./zkServer.sh start
git clone https://github.com/apache/dubbo-samples.git
cd dubbo-samples/dubbo-samples-api
<?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>org.example</groupId>
<artifactId>dubbomytest</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<source.level>1.8</source.level>
<target.level>1.8</target.level>
<dubbo.version>2.7.6</dubbo.version>
<junit.version>4.12</junit.version>
<docker-maven-plugin.version>0.30.0</docker-maven-plugin.version>
<jib-maven-plugin.version>1.2.0</jib-maven-plugin.version>
<maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
<maven-failsafe-plugin.version>2.21.0</maven-failsafe-plugin.version>
<image.name>${project.artifactId}:${dubbo.version}</image.name>
<java-image.name>openjdk:8</java-image.name>
<dubbo.port>20880</dubbo.port>
<zookeeper.port>2181</zookeeper.port>
<main-class>org.apache.dubbo.samples.provider.Application</main-class>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.3</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-naming</artifactId>
<version>4.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
provider पक्ष और स्थानीय दोनों पर स्थापित करना आवश्यक है, निर्भरता निम्नलिखित है
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-naming</artifactId>
<version>4.15</version>
</dependency>
IDEA में dubbo-samples-api जोड़ें, zookeeper और dubbo के पोर्ट संशोधित करने पर ध्यान दें, साथ ही Application.java में कोड संशोधित करें:
service.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":" + zookeeperPort+"/?timeout=250000"));
उच्च संस्करण के dubbo को zookeeper से कनेक्ट होने में धीमा होने और कनेक्शन विफल होने से रोकने के लिए
idea में dubbo-samples-api के Application.java प्रारंभ करें
प्रारंभ के बाद dubbo service started आउटपुट होने का मतलब है कि dubbo प्रारंभ हो गया है
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.3</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.51</version>
</dependency>
ExecTest.java संकलित करें, फिर HttpServer.java में ExecTest.class का पथ संशोधित करें, फिर HttpServer.main विधि निष्पादित करें, अंत में HessianLitePoc.main विधि निष्पादित करें