[rfc][icedtea-web] Fix for PR1198, JSObject passed incorrectly to Javascript

Jiri Vanek jvanek at redhat.com
Tue Jan 15 05:27:55 PST 2013


I think this one (3)  is little bit better.

J.

ps: ignore my previous  email. Its answer should be to this one.

On 01/07/2013 06:38 PM, Adam Domurad wrote:
> On 01/07/2013 11:44 AM, Jiri Vanek wrote:
>> On 01/07/2013 04:47 PM, Adam Domurad wrote:
>>> On 01/07/2013 09:53 AM, Jiri Vanek wrote:
>>>>> [.. rest snipped..]
>>>> Isn't missing updated  junit patch here?
>>>
>>> Sorry, was awaiting your advice -- if you did not like this security-manager-in-constructor change
>>> than the unit test would not be valid, a quite different approach would have to be used.
>>>
>>>>
>>>> Thanx for looking into it.
>>>> J.
>>>>
>>>
>>>
>>> patch attached,
>>> -Adam
>>>
>>> jsfix-unittest2.patch
>>>
>>>
>>> diff --git a/plugin/icedteanp/java/netscape/javascript/JSObjectUnboxPermission.java
>>> b/plugin/icedteanp/java/netscape/javascript/JSObjectUnboxPermission.java
>>> new file mode 100644
>>> --- /dev/null
>>> +++ b/plugin/icedteanp/java/netscape/javascript/JSObjectUnboxPermission.java
>>> @@ -0,0 +1,49 @@
>>> +/* JSObjectUnboxPermission.java
>>> +   Copyright (C) 2012  Red Hat
>>> +
>>> +This file is part of IcedTea.
>>> +
>>> +IcedTea is free software; you can redistribute it and/or modify
>>> +it under the terms of the GNU General Public License as published by
>>> +the Free Software Foundation; either version 2, or (at your option)
>>> +any later version.
>>> +
>>> +IcedTea is distributed in the hope that it will be useful, but
>>> +WITHOUT ANY WARRANTY; without even the implied warranty of
>>> +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>>> +General Public License for more details.
>>> +
>>> +You should have received a copy of the GNU General Public License
>>> +along with IcedTea; see the file COPYING.  If not, write to the
>>> +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>>> +02110-1301 USA.
>>> +
>>> +Linking this library statically or dynamically with other modules is
>>> +making a combined work based on this library.  Thus, the terms and
>>> +conditions of the GNU General Public License cover the whole
>>> +combination.
>>> +
>>> +As a special exception, the copyright holders of this library give you
>>> +permission to link this library with independent modules to produce an
>>> +executable, regardless of the license terms of these independent
>>> +modules, and to copy and distribute the resulting executable under
>>> +terms of your choice, provided that you also meet, for each linked
>>> +independent module, the terms and conditions of the license of that
>>> +module.  An independent module is a module which is not derived from
>>> +or based on this library.  If you modify this library, you may extend
>>> +this exception to your version of the library, but you are not
>>> +obligated to do so.  If you do not wish to do so, delete this
>>> +exception statement from your version. */
>>> +
>>> +package netscape.javascript;
>>> +
>>> +import java.security.BasicPermission;
>>> +
>>> +/**
>>> + * Permission to access internal reference of JSObject
>>> + */
>>> +public class JSObjectUnboxPermission extends BasicPermission {
>>> +    public JSObjectUnboxPermission() {
>>> +        super("JSObjectUnbox");
>>> +    }
>>> +}
>>> diff --git a/plugin/icedteanp/java/sun/applet/PluginAppletSecurityContext.java
>>> b/plugin/icedteanp/java/sun/applet/PluginAppletSecurityContext.java
>>> --- a/plugin/icedteanp/java/sun/applet/PluginAppletSecurityContext.java
>>> +++ b/plugin/icedteanp/java/sun/applet/PluginAppletSecurityContext.java
>>> @@ -53,7 +53,6 @@ import java.security.Permissions;
>>>   import java.security.PrivilegedAction;
>>>   import java.security.ProtectionDomain;
>>>   import java.util.ArrayList;
>>> -import java.util.Arrays;
>>>   import java.util.Hashtable;
>>>   import java.util.List;
>>>   import java.util.Map;
>>> @@ -241,16 +240,6 @@ public class PluginAppletSecurityContext
>>>       public PluginAppletSecurityContext(int identifier) {
>>>           this.identifier = identifier;
>>>
>>> -        // We need a security manager.. and since there is a good chance that
>>> -        // an applet will be loaded at some point, we should make it the SM
>>> -        // that JNLPRuntime will try to install
>>> -        if (System.getSecurityManager() == null) {
>>> -            JNLPRuntime.initialize(/* isApplication */false);
>>> -            JNLPRuntime.setDefaultLaunchHandler(new DefaultLaunchHandler(System.err));
>>> -        }
>>> -
>>> -        JNLPRuntime.disableExit();
>>> -
>>>           URL u = null;
>>>           try {
>>>               u = new URL("file://");
>>> diff --git a/plugin/icedteanp/java/sun/applet/PluginMain.java
>>> b/plugin/icedteanp/java/sun/applet/PluginMain.java
>>> --- a/plugin/icedteanp/java/sun/applet/PluginMain.java
>>> +++ b/plugin/icedteanp/java/sun/applet/PluginMain.java
>>> @@ -73,6 +73,7 @@ import java.net.ProxySelector;
>>>   import java.util.Enumeration;
>>>   import java.util.Properties;
>>>
>>> +import net.sourceforge.jnlp.DefaultLaunchHandler;
>>>   import net.sourceforge.jnlp.config.DeploymentConfiguration;
>>>   import net.sourceforge.jnlp.runtime.JNLPRuntime;
>>>   import net.sourceforge.jnlp.security.JNLPAuthenticator;
>>> @@ -106,6 +107,15 @@ public class PluginMain {
>>>               // must be called before JNLPRuntime.initialize()
>>>               JNLPRuntime.setRedirectStreams(redirectStreams);
>>>
>>> +            // We need a security manager for PluginAppletSecurityContext,
>>> +            // so we ensure it is initialized
>>> +            if (System.getSecurityManager() == null) {
>>> +                JNLPRuntime.initialize(/* isApplication */false);
>>> +                JNLPRuntime.setDefaultLaunchHandler(new DefaultLaunchHandler(System.err));
>>> +            }
>>> +
>>> +            JNLPRuntime.disableExit();
>>> +
>>>               PluginAppletSecurityContext sc = new PluginAppletSecurityContext(0);
>>>               sc.prePopulateLCClasses();
>>
>> Well, I'm still not comfortable with this change.
>> I'm not sure which security parts can be affected:-/ I really would like to know Jana's opinion here.
>> Do you mind to move it to separate method?
>
> I have attached a patch that is more refactoring-proof. It is based on bypassing installation via
> package-private constructor. Note there is no security risk if this is 'bypassed' once it has
> already occurred.
>> [.. snip ..]
>>>
>>
> Thanks,
> -Adam
>




More information about the distro-pkg-dev mailing list