
CVE-2021-30180용 익스플로잇으로, Apache Dubbo RPC 프레임워크를 대상으로 하며, 취약한 버전에서 조작된 RPC 요청을 통해 원격 코드 실행을 가능하게 합니다.
저희는 Dubbo를 더욱 개선하기 위해 Dubbo 사용자 정보를 수집하고 있습니다. issue#1012: Wanted: who's using 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);
}
GitHub에서 api/GreetingsService.java를 확인하세요.
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;
}
}
GitHub에서 provider/GreetingsServiceImpl.java를 확인하세요.
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();
}
}
GitHub에서 provider/Application.java를 확인하세요.
# 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);
}
}
GitHub에서 consumer/Application.java를 확인하세요.
# 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
패치 제출 및 기여 워크플로에 대한 자세한 내용은 CONTRIBUTING을 참조하세요.
Good first issue 또는 Help wanted 태그가 붙은 이슈를 살펴보세요.문제를 보고할 때는 template을 따라주세요.
보안 취약점은 저희에게 비공개로 신고해 주세요.
dubboApache Dubbo 소프트웨어는 Apache License Version 2.0에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.