Cloudanix VulnDB

CVE-2024-47554

None

CVSS

—

EPSS

1.3%

Published

Oct 3, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A widely used software library can be made to waste too much processing power on specially crafted input, potentially slowing or knocking affected services offline.

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

This is an uncontrolled resource consumption flaw in Apache Commons IO's org.apache.commons.io.input.XmlStreamReader class. When an application uses the vulnerable class to process attacker-controlled XML or XML-like input, a maliciously crafted stream can cause excessive CPU consumption during character set, BOM, XML prolog, or stream parsing logic. The impact is denial of service: affected application threads can become CPU-bound, request queues can back up, and service responsiveness can degrade. There is no indication from the provided data that this enables code execution, privilege escalation, or data disclosure.

Why it matters to the business

Applications that accept user-supplied XML, uploaded files, API payloads, feeds, documents, or other streams parsed through vulnerable Apache Commons IO versions may be susceptible to service slowdown or outage. The main business risk is operational disruption: increased latency, failed transactions, autoscaling cost spikes, reduced availability, and potential cascading failures in dependent services. The issue is not listed in CISA KEV, is not associated with ransomware use, and has a low EPSS score, so broad exploitation pressure appears limited; however, it has been public for a long time and should be remediated as part of routine dependency hygiene, especially for internet-facing Java services and products with many downstream consumers.

How an attack unfolds

An attacker first identifies an application feature that accepts XML or stream content, such as file upload, document import, feed ingestion, API submission, SAML/XML-related input, or a backend integration endpoint. The attacker then sends a specially crafted input that reaches Apache Commons IO's XmlStreamReader in a vulnerable version before 2.14.0. During parsing or encoding detection, the vulnerable code consumes disproportionate CPU compared with the size or apparent complexity of the submitted input. By repeating the request, sending concurrent submissions, or targeting multiple worker processes, the attacker can keep application threads busy, exhaust CPU capacity, increase response times, and eventually make the affected service unavailable. Successful exploitation generally requires that attacker-controlled content is parsed by the vulnerable class; systems that include the library but never invoke XmlStreamReader on untrusted input are less exposed.

How to fix it

Upgrade Apache Commons IO to version 2.14.0 or later wherever it is present, including direct and transitive dependencies. For Maven, Gradle, SBT, Bazel, shaded JARs, vendor bundles, and application server libraries, ensure the resolved commons-io artifact is not in the affected 2.0 through 2.13.x range. Where operating system packages are used, apply vendor fixes; the provided fixed package examples include webkitgtk on Ubuntu 14.04 LTS fixed in 2.4.10-0ubuntu0.14.04.1 and webkitgtk on Ubuntu 16.04 LTS fixed in 2.4.10-0ubuntu1. For source consumers, the provided upstream Git fix reference is 82250a879112e9b58c58d289e166d66942d77341, but packaged version upgrades are preferred. If immediate upgrade is not possible, reduce exposure by rejecting untrusted XML where not required, enforcing strict request size and time limits, applying upload and API rate limits, isolating XML processing workers, setting container CPU limits, and adding circuit breakers or timeouts around stream parsing.

How to confirm the fix worked

Confirm remediation by inspecting build manifests, dependency lockfiles, SBOMs, and runtime classpaths for Apache Commons IO and verifying that no resolved version is between 2.0 and 2.13.x. Use commands such as Maven dependency:tree, Gradle dependencies, SBOM scanners, container image scanners, and filesystem searches for commons-io-*.jar to identify embedded or shaded copies. For Linux packages, verify that the installed package version is at or above the vendor-fixed release. In running applications, confirm that the loaded commons-io JAR is the upgraded one and that old copies are not present in application server shared library directories. Functional validation should include normal XML ingestion tests plus defensive tests for request size limits, parsing timeouts, and rate limits; avoid running denial-of-service payloads against production systems. Monitor CPU and request latency after upgrade to ensure no regression remains in XML-processing paths.

Typical attack path

  1. Find an application endpoint or workflow that accepts XML, uploaded documents, feeds, or arbitrary stream content.
  2. Confirm that submitted content is processed by Java code or a component that may use Apache Commons IO XmlStreamReader.
  3. Submit a crafted XML or XML-like stream designed to trigger excessive CPU use during parsing or encoding detection.
  4. Observe slow responses, timeouts, or elevated server CPU as feedback that the payload is effective.
  5. Repeat the request or send it concurrently to consume worker threads and CPU capacity.
  6. Sustain the request volume until the application, container, or host experiences degraded performance or denial of service.

How to detect it

There are no widely established public indicators of compromise for this issue in the provided data, and exploitation may look like ordinary XML or file-submission traffic followed by resource exhaustion. To assess whether exploitation already occurred, correlate application, web server, API gateway, reverse proxy, container, host, and APM telemetry. Look for bursts of requests to XML-processing, upload, import, feed, document, or API endpoints immediately preceding high CPU, request timeouts, thread pool exhaustion, autoscaling events, container restarts, or elevated HTTP 408/429/500/502/503/504 responses. Review Java thread dumps and profiling data captured during incidents for many threads spending time in or below org.apache.commons.io.input.XmlStreamReader. Examine WAF and access logs for repeated large or malformed XML/XML-like submissions from the same source, unusual user agents, low request rates that nevertheless cause high CPU, and repeated retries after timeouts. On hosts and containers, review CPU metrics, JVM garbage collection logs, application error logs, orchestrator restart events, and load balancer health check failures. Because the primary effect is denial of service rather than persistence, do not expect durable malware artifacts solely from this vulnerability; focus on timing correlation between suspicious input processing and resource exhaustion.

What your security team should do

  • Inventory all applications, containers, libraries, and vendor components that include Apache Commons IO, prioritizing internet-facing services and systems that parse user-supplied XML or uploaded files.
  • Upgrade Apache Commons IO to 2.14.0 or later, and remove duplicate or shaded vulnerable JARs from application packages and runtime classpaths.
  • Ask application owners to identify uses of org.apache.commons.io.input.XmlStreamReader and determine whether any process attacker-controlled input.
  • Apply compensating controls for exposed XML-processing endpoints: request body limits, upload size limits, rate limits, authentication where appropriate, parsing timeouts, queue limits, and CPU isolation.
  • Add monitoring for abnormal CPU saturation, increased XML/API request latency, worker thread exhaustion, HTTP 5xx spikes, and request timeout spikes on services that accept XML or file uploads.
  • Review recent logs for repeated requests to XML ingestion, document upload, feed import, or API endpoints that correlate with CPU spikes or service timeouts.
  • Track vendor advisories for bundled products, especially where Commons IO is embedded and cannot be upgraded independently.
  • Because this is not KEV-listed, has no known ransomware association, and has low EPSS, treat it as a medium-priority dependency remediation unless the affected component is internet-facing or business-critical.

The record

Uncontrolled Resource Consumption vulnerability in Apache Commons IO. The org.apache.commons.io.input.XmlStreamReader class may excessively consume CPU resources when processing maliciously crafted input. This issue affects Apache Commons IO: from 2.0 before 2.14.0. Users are recommended to upgrade to version 2.14.0 or later, which fixes the issue.

Affected packages

Ecosystem Package Introduced Fixed
Maven commons-io:commons-io 2.0 2.14.0
Chainguard apache-nifi 0 2.0.0-r0
Chainguard apache-nifi-compat 0 2.0.0-r0
Chainguard apache-nifi-toolkit 0 2.0.0-r0
Chainguard confluent-common-docker 0 7.6.9-r0
Chainguard confluent-common-docker-base 0 7.6.0-r20
Chainguard confluent-common-docker-ub 0 7.6.0-r20
Chainguard confluent-kafka 0 8.0.0.6-r0
Chainguard confluent-kafka-jre-bcfips 0 8.0.0.9-r0
Chainguard druid-compat 0 34.0.0-r6
Chainguard hadoop-client-modules 0 3.3.6-r8
Chainguard kafka-3.7 0 3.7.1-r1
Chainguard kafka-3.8 0 3.8.1-r0
Chainguard kafka-bitnami-compat-3.7 0 3.7.1-r1
Chainguard kafka-bitnami-compat-3.8 0 3.8.1-r0
Chainguard kafka-jre-bcfips 0 3.8.0-r2
Chainguard kafka-strimzi-compat 0 0.45.0-r2
Chainguard kafka_exporter-strimzi-compat 0 0.45.0-r2
Chainguard kserve 0 0.14.0-r0
Chainguard kserve-agent 0 0.14.0-r0
Chainguard kserve-agent-compat 0 0.14.0-r0
Chainguard kserve-manager 0 0.14.0-r0
Chainguard kserve-manager-compat 0 0.14.0-r0
Chainguard kserve-modelmesh 0 0.12.0-r13
Chainguard kserve-modelmesh 0 0.12.0-r4
Chainguard kserve-modelmesh-compat 0 0.12.0-r13
Chainguard kserve-modelmesh-compat 0 0.12.0-r4
Chainguard kserve-qpext 0 0.14.0-r0
Chainguard kserve-qpext-compat 0 0.14.0-r0
Chainguard kserve-router 0 0.14.0-r0
Chainguard kserve-router-compat 0 0.14.0-r0
Chainguard kserve-storage-controller 0 0.14.0-r0
Chainguard logstash-8 0 8.15.4-r0
Chainguard logstash-8-bitnami-compat 0 8.15.4-r0
Chainguard logstash-8-compat 0 8.15.4-r0
Chainguard logstash-8-env2yaml 0 8.15.4-r0
Chainguard logstash-8-iamguarded-compat 0 8.15.4-r0
Chainguard logstash-8-with-output-opensearch 0 8.15.4-r0
Chainguard logstash-jre-bcfips 0 8.16.0-r0
Chainguard logstash-jre-bcfips-compat 0 8.16.0-r0
Chainguard logstash-jre-bcfips-env2yaml 0 8.16.0-r0
Chainguard logstash-jre-bcfips-with-output-opensearch 0 8.16.0-r0
Chainguard management-api-for-apache-cassandra-4.0 0 0.1.89-r0
Chainguard management-api-for-apache-cassandra-4.0-compat 0 0.1.89-r0
Chainguard management-api-for-apache-cassandra-4.1 0 0.1.109-r0
Chainguard management-api-for-apache-cassandra-4.1-compat 0 0.1.109-r0
Chainguard management-api-for-apache-cassandra-5.0 0 0.1.89-r0
Chainguard management-api-for-apache-cassandra-5.0-compat 0 0.1.89-r0
Chainguard opensearch-2 0 2.17.1-r1
Chainguard opensearch-2-alerting 0 2.17.1-r1
Chainguard opensearch-2-analysis-icu 0 2.17.1-r1
Chainguard opensearch-2-analysis-kuromoji 0 2.17.1-r1
Chainguard opensearch-2-analysis-nori 0 2.17.1-r1
Chainguard opensearch-2-analysis-phonetic 0 2.17.1-r1
Chainguard opensearch-2-analysis-smartcn 0 2.17.1-r1
Chainguard opensearch-2-analysis-stempel 0 2.17.1-r1
Chainguard opensearch-2-analysis-ukrainian 0 2.17.1-r1
Chainguard opensearch-2-anomaly-detection 0 2.17.1-r1
Chainguard opensearch-2-asynchronous-search 0 2.17.1-r1
Chainguard opensearch-2-cross-cluster-replication 0 2.17.1-r1
Chainguard opensearch-2-crypto-kms 0 2.17.1-r1
Chainguard opensearch-2-custom-codecs 0 2.17.1-r1
Chainguard opensearch-2-discovery-azure-classic 0 2.17.1-r1
Chainguard opensearch-2-discovery-ec2 0 2.17.1-r1
Chainguard opensearch-2-discovery-gce 0 2.17.1-r1
Chainguard opensearch-2-entrypoint-compat 0 2.17.1-r1
Chainguard opensearch-2-geospatial 0 2.17.1-r1
Chainguard opensearch-2-identity-shiro 0 2.17.1-r1
Chainguard opensearch-2-index-management 0 2.17.1-r1
Chainguard opensearch-2-ingest-attachment 0 2.17.1-r1
Chainguard opensearch-2-job-scheduler 0 2.17.1-r1
Chainguard opensearch-2-jre-bcfips 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-alerting 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-icu 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-kuromoji 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-nori 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-phonetic 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-smartcn 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-stempel 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-analysis-ukrainian 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-anomaly-detection 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-asynchronous-search 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-cross-cluster-replication 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-crypto-kms 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-custom-codecs 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-discovery-azure-classic 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-discovery-ec2 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-discovery-gce 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-geospatial 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-identity-shiro 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-index-management 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-ingest-attachment 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-job-scheduler 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-k-nn 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-mapper-annotated-text 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-mapper-murmur3 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-mapper-size 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-ml-commons 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-neural-search 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-notifications 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-observability 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-performance-analyzer 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-reporting 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-repository-azure 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-repository-gcs 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-repository-s3 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-security 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-security-analytics 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-sql 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-store-smb 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-telemetry-otel 0 2.18.0-r0
Chainguard opensearch-2-jre-bcfips-transport-nio 0 2.18.0-r0
Chainguard opensearch-2-k-nn 0 2.17.1-r1
Chainguard opensearch-2-mapper-annotated-text 0 2.17.1-r1
Chainguard opensearch-2-mapper-murmur3 0 2.17.1-r1
Chainguard opensearch-2-mapper-size 0 2.17.1-r1
Chainguard opensearch-2-ml-commons 0 2.17.1-r1
Chainguard opensearch-2-neural-search 0 2.17.1-r1
Chainguard opensearch-2-notifications 0 2.17.1-r1
Chainguard opensearch-2-observability 0 2.17.1-r1
Chainguard opensearch-2-performance-analyzer 0 2.17.1-r1
Chainguard opensearch-2-reporting 0 2.17.1-r1
Chainguard opensearch-2-repository-azure 0 2.17.1-r1
Chainguard opensearch-2-repository-gcs 0 2.17.1-r1
Chainguard opensearch-2-repository-s3 0 2.17.1-r1
Chainguard opensearch-2-security 0 2.17.1-r1
Chainguard opensearch-2-security-analytics 0 2.17.1-r1
Chainguard opensearch-2-sql 0 2.17.1-r1
Chainguard opensearch-2-store-smb 0 2.17.1-r1
Chainguard opensearch-2-telemetry-otel 0 2.17.1-r1
Chainguard opensearch-2-transport-nio 0 2.17.1-r1
Chainguard prometheus-jmx-exporter-strimzi-compat 0 0.45.0-r2
Chainguard py3.10-vllm-cuda-11.8 0 0.6.4-r0
Chainguard py3.10-wheels-vllm-cuda-11.8 0 0.6.4-r0
Chainguard request-1277 0 0.1.87-r1
Chainguard sonarqube 0 25.6.0.109173-r0
Chainguard sonarqube-10 0 24.12.0.100206-r0
Chainguard sonarqube-10-docker-compat 0 24.12.0.100206-r0
Chainguard sonarqube-10-scripts 0 24.12.0.100206-r0
Chainguard sonarqube-docker-compat 0 25.6.0.109173-r0
Chainguard sonarqube-scripts 0 25.6.0.109173-r0
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 strimzi-kafka-operator 0 0.45.0-r2
Chainguard strimzi-kafka-operator-cluster-operator 0 0.45.0-r2
Chainguard strimzi-kafka-operator-kafka-agent 0 0.45.0-r2
Chainguard strimzi-kafka-operator-kafka-agent-3 0 0.45.0-r2
Chainguard strimzi-kafka-operator-kafka-base 0 0.45.0-r2
Chainguard strimzi-kafka-operator-kafka-init 0 0.45.0-r2
Chainguard strimzi-kafka-operator-kafka-thirdparty-libs 0 0.45.0-r2
Chainguard strimzi-kafka-operator-kafka-thirdparty-libs-cc 0 0.45.0-r2
Chainguard strimzi-kafka-operator-mirror-maker-agent 0 0.45.0-r2
Chainguard strimzi-kafka-operator-topic-operator 0 0.45.0-r2
Chainguard strimzi-kafka-operator-tracing-agent 0 0.45.0-r2
Chainguard strimzi-kafka-operator-user-operator 0 0.45.0-r2
Chainguard wildfly 0 35.0.1-r12
Chainguard wildfly-openjdk-17 0 35.0.1-r12
Chainguard wildfly-openjdk-17-compat 0 35.0.1-r12
Chainguard wildfly-openjdk-21 0 35.0.1-r12
Chainguard wildfly-openjdk-21-compat 0 35.0.1-r12
Chainguard zookeeper-3.8 0 3.8.4.0-r6
Chainguard zookeeper-3.8 0 3.8.5-r0
Chainguard zookeeper-3.8-compat 0 3.8.4-r0
Chainguard zookeeper-3.8-iamguarded-compat 0 3.8.4.0-r6
Chainguard zookeeper-3.9 0 3.9.2.0-r4
Chainguard zookeeper-3.9-iamguarded-compat 0 3.9.2.0-r4
Chainguard zookeeper-bitnami-3.8-compat 0 3.8.4.0-r6
Chainguard zookeeper-bitnami-3.9-compat 0 3.9.2.0-r4
Chainguard zookeeper-fips-3.8 0 3.8.5-r1
Chainguard zookeeper-fips-3.9 0 3.9.2.0-r5
Chainguard zookeeper-fips-3.9-policy-140-2 0 3.9.2.0-r5
Chainguard zookeeper-fips-3.9-policy-140-3 0 3.9.2.0-r5
Debian:11 commons-io 0 No fix
Debian:12 commons-io 0 No fix
Debian:13 commons-io 0 2.16.0-1
SUSE:Enterprise Storage 7.1 apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Server 12 SP5 apache-commons-io 0 2.17.0-11.3.1
SUSE:Linux Enterprise Server 15 SP3-LTSS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Server 15 SP4-LTSS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Server 15 SP5-LTSS apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Server for SAP Applications 12 SP5 apache-commons-io 0 2.17.0-11.3.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP3 apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP4 apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP5 apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Linux Enterprise Software Development Kit 12 SP5 apache-commons-io 0 2.17.0-11.3.1
SUSE:Manager Proxy 4.3 apache-commons-io 0 2.18.0-150200.3.15.1
SUSE:Manager Server 4.3 apache-commons-io 0 2.18.0-150200.3.15.1
Ubuntu:16.04:LTS commons-io 0 No fix
Ubuntu:18.04:LTS commons-io 0 No fix

Related vulnerabilities