jdk紧急漏洞,XMLDecoder反序列化攻击

jdk紧急漏洞,XMLDecoder反序列化攻击_第1张图片

昨天在公司发现了一个jdk中的XMLDecoder反序列化的漏洞,看起来很危险!下面通过两个示例来看看这个漏洞的危害!

示例1:利用XmlDecoder删除本地文件

首先来看这个xmldecoder.xml文件内容:



    
        
            
                cmd
            
            
                /c
            
            
                del
            
            
                e:\1.txt
                     
        
        
    

再来看利用XMLDecoder解析这个xml文件的示例代码:

private static void byXmlFile() {
    File file = new File("E:\\xmldecoder.xml");
    XMLDecoder xd = null;
    try {
        xd = new XMLDecoder(new BufferedInputStream(new FileInputStream(file)));
    } catch (Exception e) {
        e.printStackTrace();
    }
    Object s2 = xd.readObject();
    xd.close();
}

这段代码执行后,直接删除了本地的e:\1.txt文件,相当于在命令行调用了cmd /c del e:\1.txt命令,直接删除了本地文件,相当恐怖!

示例2:利用XmlDecoder调用本地程序

private static void byXmlString() {
    String xml = new StringBuilder().append("")
            .append("")
            .append("    ")
            .append("        ")
            .append("            ")
            .append("                calc")
            .append("            ")
            .append("        ")
            .append("        ")
            .append("    ")
            .append("").toString();
    XMLDecoder xd = null;
    try {
        xd = new XMLDecoder(new ByteArrayInputStream(xml.getBytes()));
    } catch (Exception e) {
        e.printStackTrace();
    }
    Object s2 = xd.readObject();
    xd.close();
}

这段代码改成了用String输入源的形式,这不重要,重要的是还是利用了jdk中的XmlDecoder类来解析xml字符串。这段代码执行后,会调用出本地的计算器程序。

jdk紧急漏洞,XMLDecoder反序列化攻击_第2张图片

其中ProcessBuilder.start()的方法和Runtime.exec()方法一样,都可以被用来创建一个操作系统进程,可用来控制进程状态并获得相关信息。

ProcessBuilder的构造方法接受一个命令列表。

public ProcessBuilder(List command) {
    if (command == null)
        throw new NullPointerException();
    this.command = command;
}

总结

Jdk中的XmlDecoder反序列化存在安全漏洞,能调用本地的应用,也能执行系统支持的命令,一旦黑客组织成命令列表攻击系统,后果不堪设想!

我只是用ProcessBuilder类演示了调用系统程序这两种案例,当然还有其他,远不止这一种攻击手段。作者看了下,这个漏洞在jdk8_0_151版本中还存在。

建议不要用JDK中的XmlDeocder类,寻求其它更安全的xml解析工具类。

求转发,紧急扩散,避免更大程度的损失!~

推荐阅读


个人珍藏最全Spring Boot全套视频教程

分享一套高级视频教程:Dubbo+Zookeeper+ActiveMQ+Redis系列

分享一套分布式架构设计高级视频教程

分享一套Hadoop全套视频教程系列

去BAT面试完的Mysql面试题总结(55道,带完整答案)

阿里高级Java面试题(首发,70道,带详细答案)

2017派卧底去阿里、京东、美团、滴滴带回来的面试题及答案

Spring面试题(70道,史上最全)

通往大神之路,百度Java面试题前200页。

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。


你可能感兴趣的:(jdk紧急漏洞,XMLDecoder反序列化攻击)