首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

cve-2012-4681的分析记要

2013-11-18 
cve-2012-4681的分析记录一、简介cve-2012-4681是去年8月份爆出的java沙盒的漏洞。漏洞是利用java的特性,从

cve-2012-4681的分析记录
一、简介

       cve-2012-4681是去年8月份爆出的java沙盒的漏洞。
       漏洞是利用java的特性,从受限制的沙盒代码中调用系统信任的代码,间接修改了java.beans.Statement类的参数  
      


      
二、poc
       该漏洞的poc如下:
   

         于是这个问题就化简成两点:1、获取sun.awt.SunToolkit实例。 2、调用该实例的getField方法。(跟doPrivileged没啥关系)
            "reflection with a trusted immediate caller",这个java特性帮我们解决了这两个问题。  

             http://www.oracle.com/technetwork/java/seccodeguide-139067.html 这篇文章的9-8解释了这个问题。  
            http://security.stackexchange.com/questions/19565/why-do-some-java-apis-bypass-standard-securitymanager-checks/37920#37920
            这篇提问的答案则解释了为什么会有"reflection with a trusted immediate caller"这个特性
  
      
四、修补方式
       查看源码可以知道修补方式 
       http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/2c58f14f60c7
   
--- a/src/share/classes/com/sun/beans/finder/MethodFinder.java  Mon Aug 13 14:20:05 2012 -0700+++ b/src/share/classes/com/sun/beans/finder/MethodFinder.java  Tue Jun 19 20:06:56 2012 +0400@@ -1,5 +1,5 @@ /*- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.+ * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.  *  * This code is free software; you can redistribute it and/or modify it@@ -33,6 +33,8 @@ import java.lang.reflect.Type; import java.lang.reflect.Type; import java.util.Arrays;        +import static sun.reflect.misc.ReflectUtil.isPackageAccessible;+ /**  * This utility class provides {@code static} methods  * to find a public method with specified name and parameter types@@ -120,7 +122,7 @@ public final class MethodFinder extends       */     public static Method findAccessibleMethod(Method method) throws NoSuchMethodException {         Class<?> type = method.getDeclaringClass();-        if (Modifier.isPublic(type.getModifiers())) {+        if (Modifier.isPublic(type.getModifiers()) && isPackageAccessible(type)) {             return method;         }         if (Modifier.isStatic(method.getModifiers())) {     

      添加了isPackageAccessible(type)这个校验,这样就没有办法在低权限的代码中调用高权限的方法了。  

五、其他
       该漏洞的补丁其实只补了ConstructorFinder/FieldFinder/MethodFinder三个类,但是并没有涉及到ClassFinder,有意思的是下一次更改就修补了ClassFinder(http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/dfffff29f870),修补说明是XMLDecoder security issue via ClassFinder.
       这个漏洞被定义为CVE-2012-1682,目前为止我还没有找到poc.。

热点排行