https://bz.apache.org/bugzilla/show_bug.cgi?id=69762

            Bug ID: 69762
           Summary: Integer overflow in HPACK integer decoding
           Product: Tomcat 9
           Version: 9.0.107
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Connectors
          Assignee: dev@tomcat.apache.org
          Reporter: jeppe.b.wei...@gmail.com
  Target Milestone: -----

The HPACK varint decoding function 'decodeInteger' in Apache Tomcat contains an
integer overflow. 

https://github.com/apache/tomcat/blob/main/java/org/apache/coyote/http2/Hpack.java#L146-177

Tomcat allows 8 encoded octets and stores the result in a (32-bit signed) int.
Since 8 encoded HPACK variable-length integer bytes can exceed the maximum
value that can be represented by a 32-bit int, this leads to an integer
overflow when decoding very large varints.

It's possible that this overflow could be have a security impact, i.e. by
causing desynchronization of dynamic tables and thus causing connection
confusion (e.g. when the overflowing integer is used as a header table index).

I believe the best way to fix this issue is by simply setting
'MAX_INTEGER_OCTETS' to 4 instead of 8 here:

https://github.com/apache/tomcat/blob/main/java/org/apache/coyote/http2/Hpack.java#L29

This will ensure that it won't be possible to overflow the int.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to