• 公司动态
  • 行业资讯
  • 新宝gg官网下载观点
  • 威胁情报
  • 新宝gg官网下载研究
  • java反序列化漏洞

    时间:2016-05-19 来源:海丰科技

    2015年的1月28号,国外的新宝gg官网下载研究员Gabriel Lawrence和Chris Frohoff在AppSecCali上给出了一个报告,报告中已经指出Java反序列化漏洞可以利用Apache Commons Collections这个常用的Java库来实现任意代码执行。

    ‍‍Java反序列漏洞简介

    ‍‍序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复的样例代码:

    public static void main(String args[]) throws Exception {

    String obj = "hello world!";

    // 将序列化对象写入文件object.db中

    FileOutputStream fos = new FileOutputStream("object.db");

    ObjectOutputStream os = new ObjectOutputStream(fos);

    os.writeObject(obj); os.close();

    // 从文件object.db中读取数据

    FileInputStream fis = new FileInputStream("object.db");

    ObjectInputStream ois = new ObjectInputStream(fis);

    // 通过反序列化恢复对象obj String obj2 = (String)ois.readObject();

    ois.close();

    }

    问题在于,如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。

    所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。

    地址:甘肃省兰州市城关区南滨河东路66号

    电话:0931-8278968

    传真:0931-8814250-8027

    邮编:730000

    官网:http://www.gshfns.com/