> LGTM. Thanks for seeing this through.

Awesome, no problem :)

On Wed, Feb 8, 2017 at 2:46 PM, Mark Thomas <ma...@apache.org> wrote:
> On 08/02/17 19:42, Coty Sutherland wrote:
>>
>> Thanks for the suggestions; I implemented them in
>> http://svn.apache.org/r1782240
>
>
> LGTM. Thanks for seeing this through.
>
> Mark
>
>
>
>>
>> On Tue, Feb 7, 2017 at 7:13 PM, Mark Thomas <ma...@apache.org> wrote:
>>>
>>> On 07/02/17 18:13, csuth...@apache.org wrote:
>>>>
>>>>
>>>> Author: csutherl
>>>> Date: Tue Feb  7 18:13:40 2017
>>>> New Revision: 1782037
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1782037&view=rev
>>>> Log:
>>>> Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=60594
>>>> Adding implementation of whitelist patch
>>>>
>>>> Modified:
>>>>     tomcat/tc8.5.x/trunk/conf/catalina.properties
>>>>
>>>>
>>>> tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/http/parser/HttpParser.java
>>>>     tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
>>>>     tomcat/tc8.5.x/trunk/webapps/docs/config/systemprops.xml
>>>>
>>>> Modified: tomcat/tc8.5.x/trunk/conf/catalina.properties
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/conf/catalina.properties?rev=1782037&r1=1782036&r2=1782037&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> --- tomcat/tc8.5.x/trunk/conf/catalina.properties (original)
>>>> +++ tomcat/tc8.5.x/trunk/conf/catalina.properties Tue Feb  7 18:13:40
>>>> 2017
>>>> @@ -146,3 +146,6 @@ tomcat.util.buf.StringCache.byte.enabled
>>>>  #tomcat.util.buf.StringCache.char.enabled=true
>>>>  #tomcat.util.buf.StringCache.trainThreshold=500000
>>>>  #tomcat.util.buf.StringCache.cacheSize=5000
>>>> +
>>>> +# Allow for changes to HTTP request validation
>>>
>>>
>>>
>>> I'd add here:
>>>
>>> # WARNING: Using this option will expose the server to CVE-2016-6816
>>>
>>>
>>>> +#tomcat.util.http.parser.HttpParser.requestTargetAllow=|
>>>>
>>>> Modified:
>>>>
>>>> tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/http/parser/HttpParser.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/http/parser/HttpParser.java?rev=1782037&r1=1782036&r2=1782037&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/http/parser/HttpParser.java
>>>> (original)
>>>> +++
>>>>
>>>> tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/http/parser/HttpParser.java
>>>> Tue Feb  7 18:13:40 2017
>>>> @@ -19,6 +19,9 @@ package org.apache.tomcat.util.http.pars
>>>>  import java.io.IOException;
>>>>  import java.io.StringReader;
>>>>
>>>> +import org.apache.juli.logging.Log;
>>>> +import org.apache.juli.logging.LogFactory;
>>>> +
>>>>  /**
>>>>   * HTTP header value parser implementation. Parsing HTTP headers as per
>>>> RFC2616
>>>>   * is not always as simple as it first appears. For headers that only
>>>> use
>>>> tokens
>>>> @@ -34,6 +37,8 @@ import java.io.StringReader;
>>>>   */
>>>>  public class HttpParser {
>>>>
>>>> +    private static final Log log = LogFactory.getLog(HttpParser.class);
>>>> +
>>>>      private static final int ARRAY_SIZE = 128;
>>>>
>>>>      private static final boolean[] IS_CONTROL = new
>>>> boolean[ARRAY_SIZE];
>>>> @@ -42,8 +47,22 @@ public class HttpParser {
>>>>      private static final boolean[] IS_HEX = new boolean[ARRAY_SIZE];
>>>>      private static final boolean[] IS_NOT_REQUEST_TARGET = new
>>>> boolean[ARRAY_SIZE];
>>>>      private static final boolean[] IS_HTTP_PROTOCOL = new
>>>> boolean[ARRAY_SIZE];
>>>> +    private static final boolean[] REQUEST_TARGET_ALLOW = new
>>>> boolean[ARRAY_SIZE];
>>>>
>>>>      static {
>>>> +        String prop =
>>>>
>>>> System.getProperty("tomcat.util.http.parser.HttpParser.requestTargetAllow");
>>>> +        if (prop != null) {
>>>> +            for (int i = 0; i < prop.length(); i++) {
>>>> +                char c = prop.charAt(i);
>>>> +                if (c == '{' || c == '}' || c == '|') {
>>>> +                    REQUEST_TARGET_ALLOW[c] = true;
>>>> +                } else {
>>>> +                    log.warn("HttpParser: Character '" + c + "' is not
>>>> allowed and will continue "
>>>> +                        + "being rejected.");
>>>
>>>
>>>
>>> This should use the StringManager for i18n support.
>>>
>>> Also "... will continue to be rejected." sounds better.
>>>
>>>
>>>> +                }
>>>> +            }
>>>> +        }
>>>> +
>>>>          for (int i = 0; i < ARRAY_SIZE; i++) {
>>>>              // Control> 0-31, 127
>>>>              if (i < 32 || i == 127) {
>>>> @@ -74,7 +93,9 @@ public class HttpParser {
>>>>              if (IS_CONTROL[i] || i > 127 ||
>>>>                      i == ' ' || i == '\"' || i == '#' || i == '<' || i
>>>> ==
>>>> '>' || i == '\\' ||
>>>>                      i == '^' || i == '`'  || i == '{' || i == '|' || i
>>>> ==
>>>> '}') {
>>>> -                IS_NOT_REQUEST_TARGET[i] = true;
>>>> +                if (!REQUEST_TARGET_ALLOW[i]) {
>>>> +                    IS_NOT_REQUEST_TARGET[i] = true;
>>>> +                }
>>>>              }
>>>>
>>>>              // Not valid for HTTP protocol
>>>>
>>>> Modified: tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml?rev=1782037&r1=1782036&r2=1782037&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> --- tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml (original)
>>>> +++ tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml Tue Feb  7 18:13:40
>>>> 2017
>>>> @@ -103,6 +103,12 @@
>>>>          Ensure that executor thread pools used with connectors,
>>>> pre-start
>>>> the
>>>>          configured minimum number of idle threads. (markt)
>>>>        </fix>
>>>> +      <add>
>>>> +        <bug>60594</bug>: Allow some invalid characters that were
>>>> recently
>>>> +        restricted to be processed in requests by using the system
>>>> property
>>>> +
>>>> <code>tomcat.util.http.parser.HttpParser.requestTargetAllow</code>.
>>>> +        (csutherl)
>>>> +      </add>
>>>>      </changelog>
>>>>    </subsection>
>>>>    <subsection name="Jasper">
>>>>
>>>> Modified: tomcat/tc8.5.x/trunk/webapps/docs/config/systemprops.xml
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/config/systemprops.xml?rev=1782037&r1=1782036&r2=1782037&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> --- tomcat/tc8.5.x/trunk/webapps/docs/config/systemprops.xml (original)
>>>> +++ tomcat/tc8.5.x/trunk/webapps/docs/config/systemprops.xml Tue Feb  7
>>>> 18:13:40 2017
>>>> @@ -639,6 +639,14 @@
>>>>        <p>If not specified, the default value of <code>3</code> will be
>>>> used.</p>
>>>>      </property>
>>>>
>>>> +    <property
>>>> name="tomcat.util.http.parser.HttpParser.requestTargetAllow">
>>>> +      <p>A string comprised of characters the server should allow even
>>>> when they are not encoded.
>>>> +      These characters would normally result in a 400 status.</p>
>>>> +      <p>The acceptable characters for this property are:
>>>> <code>|</code>,
>>>> <code>{</code>
>>>> +      , and <code>}</code></p>
>>>> +      <p>If not specified, the default value of <code>null</code> will
>>>> be
>>>> used.</p>
>>>
>>>
>>>
>>> Again, I'd add something along the lines of:
>>>
>>> <strong>WARNING</strong>: Use of this option will expose the server to
>>> CVE-2016-6816.
>>>
>>>
>>>> +    </property>
>>>> +
>>>>    </properties>
>>>>
>>>>  </section>
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> 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
>>>
>>
>> ---------------------------------------------------------------------
>> 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
>

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

Reply via email to