CVE-2024-25710
Medium · 5.5CVSS
5.5
EPSS
0.4%
Published
Feb 19, 2024
CISA due date
—
Cloudanix analysis
A flaw in a widely used file-compression library can let a malformed archive make affected applications hang or become unavailable.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
CVE-2024-25710 is an infinite-loop denial-of-service flaw in Apache Commons Compress versions 1.3 through 1.25.0. When vulnerable code attempts to parse a specially crafted compressed archive or archive stream, the parser can enter a loop with no reachable exit condition. This can pin a CPU thread, exhaust worker capacity, and cause the calling application or service to become slow, unresponsive, or unavailable. The flaw does not provide confidentiality or integrity impact by itself; the primary effect is availability loss in software that uses Apache Commons Compress to process untrusted or user-supplied archive content.
Why it matters to the business
Organizations using Apache Commons Compress in applications, build pipelines, document-processing services, malware sandboxes, attachment scanners, or upload workflows may experience service degradation or outages if malformed archives are processed. Although this issue is not listed in CISA KEV, has low EPSS, and has no known mature public exploit signal in the provided data, the library is commonly embedded as a direct or transitive dependency, so exposure can be broader than obvious application inventories indicate.
How an attack unfolds
An attacker identifies an application or workflow that processes archive files using a vulnerable version of Apache Commons Compress. The attacker then submits or causes the system to ingest a malformed archive designed to trigger the infinite-loop condition. Once the vulnerable parser reaches the problematic code path, the processing thread may spin indefinitely or for an excessive period, consuming CPU and tying up application workers. Repeated submissions can amplify the impact, leading to backlog growth, failed requests, degraded upload or scanning functionality, and potential denial of service for dependent systems.
How to fix it
Upgrade Apache Commons Compress to version 1.26.0 or later. For source builds, ensure the dependency includes the upstream fix at commit acaf5642b1e16d872870a4dc4618e46ccd349493 or a later release. Review transitive dependencies in Maven, Gradle, SBT, Ivy, shaded JARs, vendor bundles, and container images because Commons Compress is often embedded indirectly. If using Ubuntu 14.04 LTS packages that include the listed Botan package, apply the fixed package version 1.10.5-1+deb7u1ubuntu0.14.04.1 where relevant, but treat the primary remediation for this CVE as upgrading Apache Commons Compress. If immediate upgrade is not possible, mitigate by restricting archive uploads to trusted users, enforcing strict file size and extraction time limits, isolating archive processing in a resource-constrained worker, applying CPU and wall-clock timeouts, limiting concurrent archive-processing jobs, and rejecting unsupported archive formats.
How to confirm the fix worked
Confirm no deployed application, library bundle, container image, or build artifact contains Apache Commons Compress versions 1.3 through 1.25.0. Validate with dependency tooling such as Maven dependency:tree, Gradle dependencies, SBOM scanners, SCA tools, container image scanners, and direct inspection of packaged JARs for commons-compress version metadata. After upgrading, test archive-processing workflows with normal archives and malformed test cases to verify that processing terminates cleanly, returns controlled errors, and does not produce sustained CPU usage or stuck worker threads. Confirm runtime artifacts load the upgraded library rather than an older shaded or bundled copy.
Typical attack path
- Find an application, API, background job, CI/CD task, scanner, or ingestion pipeline that accepts compressed archive input.
- Confirm or infer that the target uses Apache Commons Compress versions 1.3 through 1.25.0 directly or through a bundled dependency.
- Submit a malformed archive or archive stream that exercises the vulnerable parsing path.
- Cause one or more worker threads to enter an infinite or effectively unbounded loop while processing the archive.
- Repeat submissions or target high-volume workflows to consume CPU and worker capacity, resulting in service slowdown or denial of service.
How to detect it
To assess possible prior exploitation, review logs and telemetry for symptoms of archive-processing denial of service rather than relying on a unique exploit signature. Examine application logs, upload/API access logs, web server logs, job queue logs, file-ingestion service logs, EDR process telemetry, JVM metrics, thread dumps, and infrastructure CPU metrics. Look for bursts of archive uploads followed by request timeouts, worker starvation, high sustained CPU, queue backlogs, repeated processing of the same archive, or Java threads stuck inside Apache Commons Compress parsing code. Correlate suspicious archive submissions by source IP, user agent, account, file name, MIME type, file hash, request path, and timestamp. If thread dumps are available from the incident window, search for long-running threads whose stack traces reference org.apache.commons.compress classes. Since no specific public exploitation artifacts or payload signatures are derivable from the provided information, detection should focus on behavioral indicators and affected dependency presence.
What your security team should do
- Prioritize identifying all direct and transitive uses of Apache Commons Compress across applications, build systems, scanning tools, and container images.
- Upgrade Apache Commons Compress to 1.26.0 or later and redeploy affected applications.
- Pay special attention to internet-facing upload, attachment-processing, archive-extraction, and file-ingestion services because local library flaws can become remotely triggerable through server-side parsing.
- Add resource controls around archive processing, including maximum input size, maximum decompressed size, processing timeout, concurrency limits, and worker isolation.
- Search for shaded or repackaged copies of Commons Compress that may not appear in standard dependency manifests.
- Monitor for abnormal CPU saturation, stuck archive-processing threads, request timeouts, and repeated malformed archive submissions.
- Because the issue is not KEV-listed and has low EPSS, treat it as a controlled remediation item unless the vulnerable library is used in exposed upload or ingestion paths, where it should be handled with higher urgency.
The record
Loop with Unreachable Exit Condition ('Infinite Loop') vulnerability in Apache Commons Compress.This issue affects Apache Commons Compress: from 1.3 through 1.25.0. Users are recommended to upgrade to version 1.26.0 which fixes the issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | org.apache.commons:commons-compress | 1.3 | 1.26.0 |
| Chainguard | apache-nifi | 0 | 1.26.0-r2 |
| Chainguard | apache-nifi | 0 | 2.6.0-r2 |
| Chainguard | apache-nifi-compat | 0 | 2.6.0-r2 |
| Chainguard | apache-nifi-toolkit | 0 | 2.6.0-r2 |
| Chainguard | dependency-track | 0 | 4.10.1-r2 |
| Chainguard | dependency-track-bundled | 0 | 4.10.1-r2 |
| Chainguard | dotty | 0 | 3.6.2-r0 |
| Chainguard | druid-compat | 0 | 34.0.0-r6 |
| Chainguard | elasticsearch-8 | 0 | 8.13.2-r1 |
| Chainguard | elasticsearch-8-bitnami | 0 | 8.13.2-r1 |
| Chainguard | elasticsearch-8-config | 0 | 8.13.2-r1 |
| Chainguard | elasticsearch-8-iamguarded | 0 | 8.13.2-r1 |
| Chainguard | elasticsearch-config | 0 | 8.13.2-r1 |
| Chainguard | gradle-8 | 0 | 8.7.0-r1 |
| Chainguard | hadoop-client-modules | 0 | 3.3.6-r2 |
| Chainguard | hive | 0 | 4.0.1-r1 |
| Chainguard | hive-compat | 0 | 4.0.1-r1 |
| Chainguard | jenkins | 0 | 2.447-r0 |
| Chainguard | jenkins-compat | 0 | 2.447-r0 |
| Chainguard | jenkins-remoting | 0 | 2.447-r0 |
| Chainguard | neo4j | 0 | 5.18.0-r0 |
| Chainguard | neo4j-oci-entrypoint | 0 | 5.18.0-r0 |
| Chainguard | opensearch-2 | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-alerting | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-icu | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-kuromoji | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-nori | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-phonetic | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-smartcn | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-stempel | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-analysis-ukrainian | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-anomaly-detection | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-asynchronous-search | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-cross-cluster-replication | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-crypto-kms | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-custom-codecs | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-discovery-azure-classic | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-discovery-ec2 | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-discovery-gce | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-entrypoint-compat | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-geospatial | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-identity-shiro | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-index-management | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-ingest-attachment | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-job-scheduler | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-jre-bcfips | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-alerting | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-icu | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-kuromoji | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-nori | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-phonetic | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-smartcn | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-stempel | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-ukrainian | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-anomaly-detection | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-asynchronous-search | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-cross-cluster-replication | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-crypto-kms | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-custom-codecs | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-discovery-azure-classic | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-discovery-ec2 | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-discovery-gce | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-geospatial | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-identity-shiro | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-index-management | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-ingest-attachment | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-job-scheduler | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-k-nn | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-mapper-annotated-text | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-mapper-murmur3 | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-mapper-size | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-ml-commons | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-neural-search | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-notifications | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-observability | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-performance-analyzer | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-reporting | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-repository-azure | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-repository-gcs | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-repository-s3 | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-security | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-security-analytics | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-sql | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-store-smb | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-telemetry-otel | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-jre-bcfips-transport-nio | 0 | 2.14.0-r0 |
| Chainguard | opensearch-2-k-nn | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-mapper-annotated-text | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-mapper-murmur3 | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-mapper-size | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-ml-commons | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-neural-search | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-notifications | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-observability | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-performance-analyzer | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-reporting | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-repository-azure | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-repository-gcs | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-repository-s3 | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-security | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-security-analytics | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-sql | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-store-smb | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-telemetry-otel | 0 | 2.12.0-r1 |
| Chainguard | opensearch-2-transport-nio | 0 | 2.12.0-r1 |
| Chainguard | spark-3.5 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-fips-3.5 | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.12-compat | 0 | 3.5.4-r17 |
| Chainguard | spark-fips-3.5-scala-2.13-compat | 0 | 3.5.4-r17 |
| Chainguard | spdx-tools-java | 0 | 1.1.8-r1 |
| Chainguard | spring-boot | 0 | 3.5.3-r0 |
| Chainguard | tez | 0 | 0.10.4-r6 |
| Chainguard | trino | 0 | 439-r2 |
| Chainguard | trino-config | 0 | 439-r2 |
| Chainguard | trino-oci-entrypoint | 0 | 439-r2 |
| Chainguard | trino-plugin-accumulo | 0 | 439-r2 |
| Chainguard | trino-plugin-ai-functions | 0 | 439-r2 |
| Chainguard | trino-plugin-atop | 0 | 439-r2 |
| Chainguard | trino-plugin-bigquery | 0 | 439-r2 |
| Chainguard | trino-plugin-blackhole | 0 | 439-r2 |
| Chainguard | trino-plugin-cassandra | 0 | 439-r2 |
| Chainguard | trino-plugin-clickhouse | 0 | 439-r2 |
| Chainguard | trino-plugin-delta-lake | 0 | 439-r2 |
| Chainguard | trino-plugin-druid | 0 | 439-r2 |
| Chainguard | trino-plugin-duckdb | 0 | 439-r2 |
| Chainguard | trino-plugin-elasticsearch | 0 | 439-r2 |
| Chainguard | trino-plugin-example-http | 0 | 439-r2 |
| Chainguard | trino-plugin-exasol | 0 | 439-r2 |
| Chainguard | trino-plugin-exchange-filesystem | 0 | 439-r2 |
| Chainguard | trino-plugin-exchange-hdfs | 0 | 439-r2 |
| Chainguard | trino-plugin-faker | 0 | 439-r2 |
| Chainguard | trino-plugin-functions-python | 0 | 439-r2 |
| Chainguard | trino-plugin-geospatial | 0 | 439-r2 |
| Chainguard | trino-plugin-google-sheets | 0 | 439-r2 |
| Chainguard | trino-plugin-hive | 0 | 439-r2 |
| Chainguard | trino-plugin-http-event-listener | 0 | 439-r2 |
| Chainguard | trino-plugin-http-server-event-listener | 0 | 439-r2 |
| Chainguard | trino-plugin-hudi | 0 | 439-r2 |
| Chainguard | trino-plugin-iceberg | 0 | 439-r2 |
| Chainguard | trino-plugin-ignite | 0 | 439-r2 |
| Chainguard | trino-plugin-jmx | 0 | 439-r2 |
| Chainguard | trino-plugin-kafka | 0 | 439-r2 |
| Chainguard | trino-plugin-kafka-event-listener | 0 | 439-r2 |
| Chainguard | trino-plugin-kinesis | 0 | 439-r2 |
| Chainguard | trino-plugin-kudu | 0 | 439-r2 |
| Chainguard | trino-plugin-lakehouse | 0 | 439-r2 |
| Chainguard | trino-plugin-ldap-group-provider | 0 | 439-r2 |
| Chainguard | trino-plugin-local-file | 0 | 439-r2 |
| Chainguard | trino-plugin-loki | 0 | 439-r2 |
| Chainguard | trino-plugin-mariadb | 0 | 439-r2 |
| Chainguard | trino-plugin-memory | 0 | 439-r2 |
| Chainguard | trino-plugin-ml | 0 | 439-r2 |
| Chainguard | trino-plugin-mongodb | 0 | 439-r2 |
| Chainguard | trino-plugin-mysql | 0 | 439-r2 |
| Chainguard | trino-plugin-mysql-event-listener | 0 | 439-r2 |
| Chainguard | trino-plugin-opa | 0 | 439-r2 |
| Chainguard | trino-plugin-openlineage | 0 | 439-r2 |
| Chainguard | trino-plugin-opensearch | 0 | 439-r2 |
| Chainguard | trino-plugin-oracle | 0 | 439-r2 |
| Chainguard | trino-plugin-password-authenticators | 0 | 439-r2 |
| Chainguard | trino-plugin-phoenix5 | 0 | 439-r2 |
| Chainguard | trino-plugin-pinot | 0 | 439-r2 |
| Chainguard | trino-plugin-postgresql | 0 | 439-r2 |
| Chainguard | trino-plugin-prometheus | 0 | 439-r2 |
| Chainguard | trino-plugin-ranger | 0 | 439-r2 |
| Chainguard | trino-plugin-raptor-legacy | 0 | 439-r2 |
| Chainguard | trino-plugin-redis | 0 | 439-r2 |
| Chainguard | trino-plugin-redshift | 0 | 439-r2 |
| Chainguard | trino-plugin-resource-group-managers | 0 | 439-r2 |
| Chainguard | trino-plugin-session-property-managers | 0 | 439-r2 |
| Chainguard | trino-plugin-singlestore | 0 | 439-r2 |
| Chainguard | trino-plugin-snowflake | 0 | 439-r2 |
| Chainguard | trino-plugin-spooling-filesystem | 0 | 439-r2 |
| Chainguard | trino-plugin-sqlserver | 0 | 439-r2 |
| Chainguard | trino-plugin-teradata-functions | 0 | 439-r2 |
| Chainguard | trino-plugin-thrift | 0 | 439-r2 |
| Chainguard | trino-plugin-tpcds | 0 | 439-r2 |
| Chainguard | trino-plugin-tpch | 0 | 439-r2 |
| Chainguard | trino-plugin-vertica | 0 | 439-r2 |
| Chainguard | wavefront-proxy | 0 | 13.4-r3 |
| Chainguard | wavefront-proxy-compat | 0 | 13.4-r3 |
| Chainguard | wavefront-proxy-config | 0 | 13.4-r3 |
| Chainguard | wavefront-proxy-licenses | 0 | 13.4-r3 |
| Chainguard | wavefront-proxy-oci-entrypoint | 0 | 13.4-r3 |
| Debian:11 | libcommons-compress-java | 0 | No fix |
| Debian:12 | libcommons-compress-java | 0 | No fix |
| Debian:13 | libcommons-compress-java | 0 | No fix |
| SUSE:Enterprise Storage 7.1 | apache-commons-codec | 0 | 1.16.1-150200.3.9.1 |
| SUSE:Enterprise Storage 7.1 | apache-commons-compress | 0 | 1.26.0-150200.3.16.1 |
| SUSE:Enterprise Storage 7.1 | apache-commons-configuration2 | 0 | 2.9.0-150200.5.5.1 |
| SUSE:Enterprise Storage 7.1 | apache-commons-io | 0 | 2.15.1-150200.3.12.1 |
| SUSE:Enterprise Storage 7.1 | javapackages-meta | 0 | 6.2.0-150200.3.7.1 |
| SUSE:Enterprise Storage 7.1 | maven | 0 | 3.9.6-150200.4.21.2 |
| SUSE:Enterprise Storage 7.1 | maven-doxia | 0 | 1.12.0-150200.4.7.2 |
| SUSE:Enterprise Storage 7.1 | maven-doxia-sitetools | 0 | 1.11.1-150200.3.7.1 |
| SUSE:Enterprise Storage 7.1 | maven-jar-plugin | 0 | 3.3.0-150200.3.10.1 |
Related vulnerabilities
- CVE-2024-26308 Allocation of Resources Without Limits or Throttling vulnerability in Apache Commons… Also affects org.apache.commons:commons-compress
- CVE-2023-42503 Improper Input Validation, Uncontrolled Resource Consumption vulnerability in Apache… Also affects org.apache.commons:commons-compress
- CVE-2012-2098 Algorithmic complexity vulnerability in the sorting algorithms in bzip2 compressing… Also affects org.apache.commons:commons-compress
- CVE-2026-22732 When applications specify HTTP response headers for servlet applications using Spring… Also affects apache-nifi
- CVE-2026-24281 Hostname verification in Apache ZooKeeper ZKTrustManager falls back to reverse DNS (PTR)… Also affects apache-nifi
- CVE-2026-24308 Improper handling of configuration values in ZKConfig in Apache ZooKeeper 3.8.5 and 3.9.4… Also affects apache-nifi
- CVE-2026-29062 jackson-core contains core low-level incremental ("streaming") parser and generator… Also affects apache-nifi
- CVE-2026-1225 ACE vulnerability in configuration file processing by QOS.CH logback-core up to and… Also affects apache-nifi