
Эксплойт для CVE-2021-30180, нацеленный на фреймворк RPC Apache Dubbo, позволяющий удаленно выполнять код через специально созданные RPC-запросы в уязвимых версиях.
Apache Dubbo - это высокопроизводительный, основанный на Java, открытый RPC-фреймворк. Пожалуйста, посетите официальный сайт для быстрого старта и документации, а также вики для новостей, часто задаваемых вопросов и заметок о релизах.
Сейчас мы собираем информацию о пользователях Dubbo, чтобы помочь нам улучшить Dubbo. Пожалуйста, поддержите нас, добавив свою информацию в issue#1012: Разыскиваются: кто использует dubbo, спасибо :)

Следующий фрагмент кода взят из Dubbo Samples. Вы можете клонировать пример проекта и перейти в подкаталог dubbo-samples-api перед продолжением.
# git clone https://github.com/apache/dubbo-samples.git
# cd dubbo-samples/java/dubbo-samples-api
В каталоге dubbo-samples-api есть файл README. Мы рекомендуем ознакомиться с примерами в этом каталоге, следуя приведенным ниже инструкциям:
<properties>
<dubbo.version>2.7.8</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
package org.apache.dubbo.samples.api;
public interface GreetingsService {
String sayHi(String name);
}
См. api/GreetingsService.java на GitHub.
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.samples.api.GreetingsService;
public class GreetingsServiceImpl implements GreetingsService {
@Override
public String sayHi(String name) {
return "hi, " + name;
}
}
См. provider/GreetingsServiceImpl.java на GitHub.
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.samples.api.GreetingsService;
import java.util.concurrent.CountDownLatch;
public class Application {
private static String zookeeperHost = System.getProperty("zookeeper.address", "127.0.0.1");
public static void main(String[] args) throws Exception {
ServiceConfig<GreetingsService> service = new ServiceConfig<>();
service.setApplication(new ApplicationConfig("first-dubbo-provider"));
service.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
service.setInterface(GreetingsService.class);
service.setRef(new GreetingsServiceImpl());
service.export();
System.out.println("dubbo service started");
new CountDownLatch(1).await();
}
}
См. provider/Application.java на GitHub.
# mvn clean package
# mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.samples.provider.Application exec:java
package org.apache.dubbo.samples.client;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
private static String zookeeperHost = System.getProperty("zookeeper.address", "127.0.0.1");
public static void main(String[] args) {
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
reference.setApplication(new ApplicationConfig("first-dubbo-consumer"));
reference.setRegistry(new RegistryConfig("zookeeper://" + zookeeperHost + ":2181"));
reference.setInterface(GreetingsService.class);
GreetingsService service = reference.get();
String message = service.sayHi("dubbo");
System.out.println(message);
}
}
См. consumer/Application.java на GitHub.
# mvn clean package
# mvn -Djava.net.preferIPv4Stack=true -Dexec.mainClass=org.apache.dubbo.samples.client.Application exec:java
Потребитель выведет hi, dubbo на экран.
Если вы хотите попробовать новейшие функции, вы можете выполнить сборку с помощью следующих команд. (Для сборки ветки master требуется Java 1.8)
mvn clean install