On 13 July 2011 14:28,  <ma...@apache.org> wrote:
> Author: markt
> Date: Wed Jul 13 13:28:24 2011
> New Revision: 1146005
>
> URL: http://svn.apache.org/viewvc?rev=1146005&view=rev
> Log:
> When running under a security manager and using sendfile, validate sendfile 
> attributes to prevent sendfile being used to bypass the security manager.
> Part of the fix for CVE-2011-2526
>
> Modified:
>    tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties
>    tomcat/trunk/java/org/apache/catalina/connector/Request.java
>
> Modified: 
> tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties?rev=1146005&r1=1146004&r2=1146005&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties 
> (original)
> +++ tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties 
> Wed Jul 13 13:28:24 2011
> @@ -66,6 +66,7 @@ coyoteRequest.noLoginConfig=No authentic
>  coyoteRequest.authenticate.ise=Cannot call authenticate() after the reponse 
> has been committed
>  coyoteRequest.uploadLocationInvalid=The temporary upload location [{0}] is 
> not valid
>  coyoteRequest.sessionEndAccessFail=Exception triggered ending access to 
> session while recycling request
> +coyoteRequest.sendfileNotCanonical=Unable to determine canonical name of 
> file [{0}] specified for use with sendfile
>
>  requestFacade.nullRequest=The request object has been recycled and is no 
> longer associated with this facade
>
>
> Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1146005&r1=1146004&r2=1146005&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
> +++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Wed Jul 13 
> 13:28:24 2011
> @@ -1525,6 +1525,26 @@ public class Request
>             return;
>         }
>
> +        // Do the security check before any updates are made
> +        if (Globals.IS_SECURITY_ENABLED &&
> +                name.equals("org.apache.tomcat.sendfile.filename")) {

IMO this "magic string" should be a constant - as is done earlier in the file:

 ... name.equals(Globals.DISPATCHER_REQUEST_PATH_ATTR) ...


> +            // Use the canonical file name to avoid any possible symlink and
> +            // relative path issues
> +            String canonicalPath;
> +            try {
> +                canonicalPath = new 
> File(value.toString()).getCanonicalPath();
> +            } catch (IOException e) {
> +                throw new SecurityException(sm.getString(
> +                        "coyoteRequest.sendfileNotCanonical", value), e);
> +            }
> +            // Sendfile is performed in Tomcat's security context so need to
> +            // check if the web app is permitted to access the file while 
> still
> +            // in the web app's security context
> +            System.getSecurityManager().checkRead(canonicalPath);
> +            // Update the value so the canonical path is used
> +            value = canonicalPath;
> +        }
> +
>         oldValue = attributes.put(name, value);
>         if (oldValue != null) {
>             replaced = true;
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to