Impact
ServerFilters.GZip and RequestFilters.GunZip (and the underlying Gzip functions used to decompress request bodies) did not impose any cap on the decompressed size. A small malicious gzip-encoded request body (on the order of kilobytes) could decompress to gigabytes, exhausting the JVM heap and denying service to other clients.
Who is affected: any http4k server that accepts gzip-encoded requests via ServerFilters.GZip or RequestFilters.GunZip. Exploitable by any unauthenticated client. The vulnerability was introduced on 2017-08-01 (commit 2618fe08f9) and was present for ~9 years.
Patches
The fix caps decompression at 10MB by default; oversized requests through ServerFilters.GZip / RequestFilters.GunZip now return 413 Request Entity Too Large, and decompressing elsewhere throws SizeLimitExceededException. The keyed hmacSHA256 helper and other safe paths are unaffected.
Workarounds
For deployments that cannot upgrade immediately:
- Replace the
GZip / GunZip filters with custom versions that wrap the decompressed InputStream in a size-limited reader, or
- Strip gzip-encoded request support at the edge (CDN, reverse proxy, or load balancer).
References
References
Impact
ServerFilters.GZipandRequestFilters.GunZip(and the underlyingGzipfunctions used to decompress request bodies) did not impose any cap on the decompressed size. A small malicious gzip-encoded request body (on the order of kilobytes) could decompress to gigabytes, exhausting the JVM heap and denying service to other clients.Who is affected: any http4k server that accepts gzip-encoded requests via
ServerFilters.GZiporRequestFilters.GunZip. Exploitable by any unauthenticated client. The vulnerability was introduced on 2017-08-01 (commit2618fe08f9) and was present for ~9 years.Patches
The fix caps decompression at 10MB by default; oversized requests through
ServerFilters.GZip/RequestFilters.GunZipnow return413 Request Entity Too Large, and decompressing elsewhere throwsSizeLimitExceededException. The keyedhmacSHA256helper and other safe paths are unaffected.Workarounds
For deployments that cannot upgrade immediately:
GZip/GunZipfilters with custom versions that wrap the decompressedInputStreamin a size-limited reader, orReferences
2618fe08f9References