CVE-2023-3635
High · 7.5CVSS
7.5
EPSS
1.3%
Published
Jul 12, 2023
CISA due date
—
Cloudanix analysis
A malformed compressed file or message can cause affected applications to crash or stop handling work until they are updated.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This flaw is an unauthenticated denial-of-service condition in Okio's GzipSource handling of malformed gzip data. When an application uses GzipSource to parse a crafted gzip buffer or archive, an exception can be raised during gzip header/body parsing and may not be handled safely by the affected Okio code path. In vulnerable applications, this can terminate the current parsing operation, crash a worker thread, fail a request, or destabilize the process if the exception propagates to application-level control flow. The issue does not provide confidentiality or integrity impact, but it can cause high availability impact for services, clients, or background jobs that process attacker-controlled gzip content.
Why it matters to the business
Applications that accept, fetch, or process gzip-compressed data using vulnerable Okio versions may be made unreliable or unavailable by malformed compressed input. This can cause failed API calls, service errors, processing backlogs, mobile/client crashes, degraded customer experience, and operational noise from repeated restarts or incident response. The vulnerability has a network-accessible, low-complexity attack profile and public exploit information is available, but it is not currently listed in CISA KEV and the provided EPSS score is low, so prioritization should be highest for internet-facing or externally integrated systems that process untrusted gzip content.
How an attack unfolds
An attacker identifies an application or client workflow that uses Okio GzipSource to decompress gzip data from an untrusted source, such as an uploaded archive, HTTP request body, HTTP response, proxy-fed payload, file import, or message attachment. The attacker then supplies a specially malformed gzip buffer that violates expected gzip structure or metadata. When the vulnerable application passes that buffer to GzipSource, the parser raises an exception during processing. Because the affected implementation does not safely handle the exception in that path, the exception may escape to higher-level application code, causing the request handler, worker, job, or client process to fail. Repeating the malformed input can keep the affected component in a degraded or unavailable state.
How to fix it
Upgrade Okio to a version that includes the upstream fix. For source-based consumers of square/okio, ensure the codebase includes commit 81bce1a30af244550b0324597720e4799281da7b or a later release containing that change. Remove duplicate or transitive vulnerable Okio versions from dependency graphs so the patched implementation is the one actually loaded at runtime. Where immediate upgrade is not possible, reduce exposure by rejecting malformed or unexpected compressed inputs before decompression, enforcing strict request and archive size limits, wrapping gzip parsing in robust exception handling, isolating decompression in failure-contained workers, disabling gzip processing for untrusted sources where feasible, and rate-limiting endpoints that accept compressed content. These mitigations reduce impact but should not be treated as a substitute for upgrading.
How to confirm the fix worked
Confirm remediation by checking dependency manifests, lockfiles, build outputs, and runtime dependency trees for Okio versions or source revisions that include commit 81bce1a30af244550b0324597720e4799281da7b or later. For JVM builds, inspect Gradle or Maven dependency resolution output to ensure no vulnerable transitive Okio artifact remains. For source-based or vendored copies, verify the patched GzipSource implementation is present. Perform a negative test by feeding malformed gzip buffers to application paths that use GzipSource and confirm the application returns a controlled error without crashing, restarting, leaking unhandled exceptions, or leaving worker threads unhealthy. Validate observability by confirming malformed gzip attempts produce expected application errors, metrics, or security events without availability impact.
Typical attack path
- Find an application, API, job, or client feature that accepts or retrieves gzip-compressed content and processes it with Okio GzipSource.
- Craft a malformed gzip buffer or archive designed to trigger an exception during GzipSource parsing.
- Deliver the payload through an exposed upload, import, API request, message, or attacker-controlled HTTP response consumed by the application.
- Trigger decompression of the malformed gzip content in the vulnerable Okio code path.
- Cause the parsing exception to propagate, resulting in failed requests, crashed workers, application errors, or client instability.
- Repeat delivery of the crafted gzip payload to sustain service degradation or denial of service.
How to detect it
To assess possible prior exploitation, review application logs, API gateway logs, reverse proxy logs, crash reports, job-runner logs, mobile/client telemetry, and container or process supervisor events for repeated failures correlated with gzip processing. Look for stack traces or exceptions containing Okio GzipSource frames, malformed gzip parsing messages, unexpected EOF errors during decompression, and bursts of failed requests or worker restarts after compressed payloads are received. In network and access logs, correlate 4xx/5xx spikes with requests containing gzip-related headers such as Content-Encoding: gzip, uploads with gzip file signatures, unusually small or malformed compressed bodies, or repeated attempts from the same source. For client-side use cases, review outbound HTTP telemetry for attacker-controlled or unusual servers returning gzip-encoded content shortly before client crashes. Because this is a denial-of-service flaw rather than a code-execution issue, evidence will usually appear as crashes, unhandled exceptions, failed jobs, service restarts, and availability anomalies rather than persistent files or post-exploitation artifacts.
- okio.GzipSource
- okio.GzipSource.read
- okio.GzipSource.consumeHeader
- okio.GzipSource.consumeTrailer
- java.io.EOFException
- java.io.IOException: ID1ID2
- Content-Encoding: gzip
- Accept-Encoding: gzip
- malformed gzip
- unexpected end of stream
- Exception while parsing gzip
- GzipSource
What your security team should do
- Inventory applications, services, clients, and batch jobs that use square/okio and process gzip content from users, partners, external APIs, message queues, or file imports.
- Prioritize patching internet-facing systems and high-volume ingestion paths first, especially where unauthenticated users can submit compressed data.
- Upgrade to an Okio release or source revision containing commit 81bce1a30af244550b0324597720e4799281da7b, and verify transitive dependencies do not reintroduce a vulnerable version.
- Add or verify defensive exception handling around gzip decompression so malformed content fails closed with a controlled error rather than destabilizing the process.
- Apply request-size, decompressed-size, timeout, and rate limits to gzip-processing endpoints and workers.
- Search historical logs for repeated GzipSource-related exceptions, malformed gzip parsing errors, spikes in 5xx responses, worker crashes, or process restarts around compressed-content processing paths.
- Add regression tests with malformed gzip samples to prevent future dependency or parser changes from reintroducing unhandled decompression failures.
The record
GzipSource does not handle an exception that might be raised when parsing a malformed gzip buffer. This may lead to denial of service of the Okio client when handling a crafted GZIP archive, by using the GzipSource class.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | com.squareup.okio:okio | 0 | 1.17.6 |
| Maven | com.squareup.okio:okio | 2.0.0-RC1 | 3.4.0 |
| Maven | com.squareup.okio:okio-jvm | 2.0.0-RC1 | 3.4.0 |
| Chainguard | docker-selenium | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-base | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-compat | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-distributor | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-event-bus | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-hub | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-jre-bcfips | 0 | 4.29.0.20250303-r0 |
| Chainguard | docker-selenium-jre-bcfips-supervisor-config | 0 | 4.29.0.20250303-r0 |
| Chainguard | docker-selenium-node-base | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-node-chromium | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-node-docker | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-node-firefox | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-router | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-session-queue | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-sessions | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-standalone | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-standalone-chromium | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-standalone-docker | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-standalone-firefox | 0 | 4.38.0.20251101-r0 |
| Chainguard | docker-selenium-supervisor-config | 0 | 4.38.0.20251101-r0 |
| Chainguard | druid | 0 | 0 |
| Chainguard | druid-compat | 0 | 0 |
| Chainguard | grpc-java-fips-1.56.0 | 0 | 0 |
| Chainguard | grpc-java-fips-1.56.0-m2 | 0 | 0 |
| Chainguard | hadoop-fips-3.3.6 | 0 | 3.3.6-r0 |
| Chainguard | thingsboard | 0 | 3.7-r2 |
| Chainguard | thingsboard-tb-js-executor | 0 | 3.7-r2 |
| Chainguard | thingsboard-tb-mqtt-transport | 0 | 3.7-r2 |
| Chainguard | thingsboard-tb-node | 0 | 3.7-r2 |
| Chainguard | thingsboard-tb-web-ui | 0 | 3.7-r2 |
| Chainguard | trino | 0 | 469-r0 |
| Chainguard | trino-config | 0 | 469-r0 |
| Chainguard | trino-oci-entrypoint | 0 | 469-r0 |
| Chainguard | trino-plugin-accumulo | 0 | 469-r0 |
| Chainguard | trino-plugin-ai-functions | 0 | 469-r0 |
| Chainguard | trino-plugin-atop | 0 | 469-r0 |
| Chainguard | trino-plugin-bigquery | 0 | 469-r0 |
| Chainguard | trino-plugin-blackhole | 0 | 469-r0 |
| Chainguard | trino-plugin-cassandra | 0 | 469-r0 |
| Chainguard | trino-plugin-clickhouse | 0 | 469-r0 |
| Chainguard | trino-plugin-delta-lake | 0 | 469-r0 |
| Chainguard | trino-plugin-druid | 0 | 469-r0 |
| Chainguard | trino-plugin-duckdb | 0 | 469-r0 |
| Chainguard | trino-plugin-elasticsearch | 0 | 469-r0 |
| Chainguard | trino-plugin-example-http | 0 | 469-r0 |
| Chainguard | trino-plugin-exasol | 0 | 469-r0 |
| Chainguard | trino-plugin-exchange-filesystem | 0 | 469-r0 |
| Chainguard | trino-plugin-exchange-hdfs | 0 | 469-r0 |
| Chainguard | trino-plugin-faker | 0 | 469-r0 |
| Chainguard | trino-plugin-functions-python | 0 | 469-r0 |
| Chainguard | trino-plugin-geospatial | 0 | 469-r0 |
| Chainguard | trino-plugin-google-sheets | 0 | 469-r0 |
| Chainguard | trino-plugin-hive | 0 | 469-r0 |
| Chainguard | trino-plugin-http-event-listener | 0 | 469-r0 |
| Chainguard | trino-plugin-http-server-event-listener | 0 | 469-r0 |
| Chainguard | trino-plugin-hudi | 0 | 469-r0 |
| Chainguard | trino-plugin-iceberg | 0 | 469-r0 |
| Chainguard | trino-plugin-ignite | 0 | 469-r0 |
| Chainguard | trino-plugin-jmx | 0 | 469-r0 |
| Chainguard | trino-plugin-kafka | 0 | 469-r0 |
| Chainguard | trino-plugin-kafka-event-listener | 0 | 469-r0 |
| Chainguard | trino-plugin-kinesis | 0 | 469-r0 |
| Chainguard | trino-plugin-kudu | 0 | 469-r0 |
| Chainguard | trino-plugin-lakehouse | 0 | 469-r0 |
| Chainguard | trino-plugin-ldap-group-provider | 0 | 469-r0 |
| Chainguard | trino-plugin-local-file | 0 | 469-r0 |
| Chainguard | trino-plugin-loki | 0 | 469-r0 |
| Chainguard | trino-plugin-mariadb | 0 | 469-r0 |
| Chainguard | trino-plugin-memory | 0 | 469-r0 |
| Chainguard | trino-plugin-ml | 0 | 469-r0 |
| Chainguard | trino-plugin-mongodb | 0 | 469-r0 |
| Chainguard | trino-plugin-mysql | 0 | 469-r0 |
| Chainguard | trino-plugin-mysql-event-listener | 0 | 469-r0 |
| Chainguard | trino-plugin-opa | 0 | 469-r0 |
| Chainguard | trino-plugin-openlineage | 0 | 469-r0 |
| Chainguard | trino-plugin-opensearch | 0 | 469-r0 |
| Chainguard | trino-plugin-oracle | 0 | 469-r0 |
| Chainguard | trino-plugin-password-authenticators | 0 | 469-r0 |
| Chainguard | trino-plugin-phoenix5 | 0 | 469-r0 |
| Chainguard | trino-plugin-pinot | 0 | 469-r0 |
| Chainguard | trino-plugin-postgresql | 0 | 469-r0 |
| Chainguard | trino-plugin-prometheus | 0 | 469-r0 |
| Chainguard | trino-plugin-ranger | 0 | 469-r0 |
| Chainguard | trino-plugin-raptor-legacy | 0 | 469-r0 |
| Chainguard | trino-plugin-redis | 0 | 469-r0 |
| Chainguard | trino-plugin-redshift | 0 | 469-r0 |
| Chainguard | trino-plugin-resource-group-managers | 0 | 469-r0 |
| Chainguard | trino-plugin-session-property-managers | 0 | 469-r0 |
| Chainguard | trino-plugin-singlestore | 0 | 469-r0 |
| Chainguard | trino-plugin-snowflake | 0 | 469-r0 |
| Chainguard | trino-plugin-spooling-filesystem | 0 | 469-r0 |
| Chainguard | trino-plugin-sqlserver | 0 | 469-r0 |
| Chainguard | trino-plugin-teradata-functions | 0 | 469-r0 |
| Chainguard | trino-plugin-thrift | 0 | 469-r0 |
| Chainguard | trino-plugin-tpcds | 0 | 469-r0 |
| Chainguard | trino-plugin-tpch | 0 | 469-r0 |
| Chainguard | trino-plugin-vertica | 0 | 469-r0 |
| Chainguard | wavefront-proxy | 0 | 13.4-r4 |
| Chainguard | wavefront-proxy-compat | 0 | 13.4-r4 |
| Chainguard | wavefront-proxy-config | 0 | 13.4-r4 |
| Chainguard | wavefront-proxy-licenses | 0 | 13.4-r4 |
| Chainguard | wavefront-proxy-oci-entrypoint | 0 | 13.4-r4 |
| Ubuntu:18.04:LTS | okio | 0 | No fix |
| Ubuntu:20.04:LTS | okio | 0 | No fix |
| Ubuntu:22.04:LTS | okio | 0 | No fix |
| Ubuntu:24.04:LTS | okio | 0 | No fix |
| Ubuntu:24.10 | okio | 0 | No fix |
| Ubuntu:25.04 | okio | 0 | No fix |
| Ubuntu:25.10 | okio | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | okio | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | okio | 0 | No fix |
| Wolfi | docker-selenium | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-base | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-compat | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-distributor | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-event-bus | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-hub | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-node-base | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-node-chromium | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-node-docker | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-node-firefox | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-router | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-session-queue | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-sessions | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-standalone | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-standalone-chromium | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-standalone-docker | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-standalone-firefox | 0 | 4.38.0.20251101-r0 |
| Wolfi | docker-selenium-supervisor-config | 0 | 4.38.0.20251101-r0 |
| Wolfi | druid | 0 | 0 |
| Wolfi | druid-compat | 0 | 0 |
| Wolfi | thingsboard | 0 | 3.7-r2 |
| Wolfi | thingsboard-tb-js-executor | 0 | 3.7-r2 |
| Wolfi | thingsboard-tb-mqtt-transport | 0 | 3.7-r2 |
| Wolfi | thingsboard-tb-node | 0 | 3.7-r2 |
| Wolfi | thingsboard-tb-web-ui | 0 | 3.7-r2 |
| Wolfi | trino | 0 | 469-r0 |
| Wolfi | trino-config | 0 | 469-r0 |
| Wolfi | trino-oci-entrypoint | 0 | 469-r0 |
| Wolfi | trino-plugin-accumulo | 0 | 469-r0 |
| Wolfi | trino-plugin-ai-functions | 0 | 469-r0 |
| Wolfi | trino-plugin-atop | 0 | 469-r0 |
| Wolfi | trino-plugin-bigquery | 0 | 469-r0 |
| Wolfi | trino-plugin-blackhole | 0 | 469-r0 |
| Wolfi | trino-plugin-cassandra | 0 | 469-r0 |
| Wolfi | trino-plugin-clickhouse | 0 | 469-r0 |
| Wolfi | trino-plugin-delta-lake | 0 | 469-r0 |
| Wolfi | trino-plugin-druid | 0 | 469-r0 |
| Wolfi | trino-plugin-duckdb | 0 | 469-r0 |
| Wolfi | trino-plugin-elasticsearch | 0 | 469-r0 |
| Wolfi | trino-plugin-example-http | 0 | 469-r0 |
| Wolfi | trino-plugin-exasol | 0 | 469-r0 |
| Wolfi | trino-plugin-exchange-filesystem | 0 | 469-r0 |
| Wolfi | trino-plugin-exchange-hdfs | 0 | 469-r0 |
| Wolfi | trino-plugin-faker | 0 | 469-r0 |
| Wolfi | trino-plugin-functions-python | 0 | 469-r0 |
| Wolfi | trino-plugin-geospatial | 0 | 469-r0 |
| Wolfi | trino-plugin-google-sheets | 0 | 469-r0 |
| Wolfi | trino-plugin-hive | 0 | 469-r0 |
| Wolfi | trino-plugin-http-event-listener | 0 | 469-r0 |
| Wolfi | trino-plugin-http-server-event-listener | 0 | 469-r0 |
| Wolfi | trino-plugin-hudi | 0 | 469-r0 |
| Wolfi | trino-plugin-iceberg | 0 | 469-r0 |
| Wolfi | trino-plugin-ignite | 0 | 469-r0 |
| Wolfi | trino-plugin-jmx | 0 | 469-r0 |
| Wolfi | trino-plugin-kafka | 0 | 469-r0 |
| Wolfi | trino-plugin-kafka-event-listener | 0 | 469-r0 |
| Wolfi | trino-plugin-kinesis | 0 | 469-r0 |
| Wolfi | trino-plugin-kudu | 0 | 469-r0 |
| Wolfi | trino-plugin-lakehouse | 0 | 469-r0 |
| Wolfi | trino-plugin-ldap-group-provider | 0 | 469-r0 |
| Wolfi | trino-plugin-local-file | 0 | 469-r0 |
| Wolfi | trino-plugin-loki | 0 | 469-r0 |
| Wolfi | trino-plugin-mariadb | 0 | 469-r0 |
| Wolfi | trino-plugin-memory | 0 | 469-r0 |
| Wolfi | trino-plugin-ml | 0 | 469-r0 |
| Wolfi | trino-plugin-mongodb | 0 | 469-r0 |
| Wolfi | trino-plugin-mysql | 0 | 469-r0 |
| Wolfi | trino-plugin-mysql-event-listener | 0 | 469-r0 |
| Wolfi | trino-plugin-opa | 0 | 469-r0 |
| Wolfi | trino-plugin-openlineage | 0 | 469-r0 |
| Wolfi | trino-plugin-opensearch | 0 | 469-r0 |
| Wolfi | trino-plugin-oracle | 0 | 469-r0 |
| Wolfi | trino-plugin-password-authenticators | 0 | 469-r0 |
| Wolfi | trino-plugin-phoenix5 | 0 | 469-r0 |
| Wolfi | trino-plugin-pinot | 0 | 469-r0 |
| Wolfi | trino-plugin-postgresql | 0 | 469-r0 |
| Wolfi | trino-plugin-prometheus | 0 | 469-r0 |
| Wolfi | trino-plugin-ranger | 0 | 469-r0 |
| Wolfi | trino-plugin-raptor-legacy | 0 | 469-r0 |
| Wolfi | trino-plugin-redis | 0 | 469-r0 |
| Wolfi | trino-plugin-redshift | 0 | 469-r0 |
| Wolfi | trino-plugin-resource-group-managers | 0 | 469-r0 |
| Wolfi | trino-plugin-session-property-managers | 0 | 469-r0 |
| Wolfi | trino-plugin-singlestore | 0 | 469-r0 |
| Wolfi | trino-plugin-snowflake | 0 | 469-r0 |
| Wolfi | trino-plugin-spooling-filesystem | 0 | 469-r0 |
Related vulnerabilities
- CVE-2025-58056 Netty vulnerable to request smuggling due to incorrect parsing of chunk extensions Also affects docker-selenium
- CVE-2025-58057 Netty's decoders vulnerable to DoS via zip bomb style attack Also affects docker-selenium
- CVE-2025-55163 Netty affected by MadeYouReset HTTP/2 DDoS vulnerability Also affects docker-selenium
- CVE-2025-24970 SslHandler doesn't correctly validate packets which can lead to native crash when using… Also affects docker-selenium
- CVE-2025-25193 Denial of Service attack on windows app using Netty Also affects docker-selenium
- CVE-2024-47535 Netty is an asynchronous event-driven network application framework for rapid development… Also affects docker-selenium
- CVE-2025-67735 Netty has a CRLF Injection vulnerability in io.netty.handler.codec.http.HttpRequestEncoder Also affects docker-selenium-base
- CVE-2024-29025 Netty is an asynchronous event-driven network application framework for rapid development… Also affects docker-selenium-jre-bcfips