Valentin Valchev created FELIX-4660:
---------------------------------------

             Summary: Security problem in WebConsoleUtil.getParameter() method
                 Key: FELIX-4660
                 URL: https://issues.apache.org/jira/browse/FELIX-4660
             Project: Felix
          Issue Type: Bug
          Components: Web Console
    Affects Versions: webconsole-4.2.2
            Reporter: Valentin Valchev


The mentioned method is used to get simple parameters as well FileItems, if the 
request is multipart.

If a big file has been uploaded Apache File Upload will store the file in a 
temporary folder, instead of keeping it in memory. That folder is specified by 
system property 'java.io.tmpdir'.

When running with security the file upload will require the bundle to have the 
following permission:
(java.util.PropertyPermission "java.io.tmpdir" "read")

But in order to read/write/delete to that folder the bundle will require
(java.io.FilePermission "<<ALL FILES>>" "read,write,delete")

Because we don't know where the file will be stored and cannot express that 
using system properties, we need to give permission to read any file on system 
and that is well .. bad.

In OSGi however, it's guaranteed that the bundle will have permission to 
read/write/delete files in it's data folder. So all we need is to set the 
repository path:
{code}
DiskFileItemFactory factory
factory.setRepository( 256000 );
{code}


To keep compatibility with existing version(s) I suggest that we add a new 
constant:
AbstractWebConsolePlugin.ATTR_FILEUPLOAD_DIR

The value of that attribute is a File object - a folder, which plugins obtain 
using BundleContext.getDataFile().

So if the attribute is set, the getParameter() method will set that file as 
repository to the DiskFileItemFactory. That wouldn't require any changes to the 
API, though any plugins, that use FileUpload are recommended to update their 
code and set that attribute.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to