CVE-2025-25193
Medium · 5.5Denial of Service attack on windows app using Netty
CVSS
5.5
EPSS
0.4%
Published
Feb 10, 2025
CISA due date
—
Cloudanix analysis
A flaw in a common Java networking component can let someone who can write files on a Windows server crash affected applications by placing an oversized file in a location the software mistakenly reads.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This flaw is a local denial-of-service condition in Netty on Windows. A vulnerable Netty-based application may attempt to read a Unix-style environment or operating-system metadata file path that normally does not exist on Windows. If an attacker with local file-write capability creates that expected file as an extremely large file, Netty can read it unsafely and exhaust memory or otherwise crash the Java process. The impact is availability loss only; the issue does not directly provide remote code execution, privilege escalation, or data disclosure.
Why it matters to the business
Applications that depend on vulnerable Netty builds can be crashed by someone who can write files to the affected Windows filesystem location, causing service downtime, failed transactions, degraded customer-facing availability, or disruption to internal systems that rely on Netty-based networking. The public exploitation signal is currently low, with EPSS at 0.00384, no known CISA KEV listing, no known ransomware association, and no reported exploit maturity, but Netty is widely embedded in Java applications and frameworks, so exposure may exist indirectly through packaged dependencies.
How an attack unfolds
An attacker first needs local or equivalent file-write access to a Windows system running a vulnerable Netty-based Java application. The attacker identifies the Unix-style environment file path that Netty will try to read on Windows and creates the missing path and file, such as a drive-rooted etc/os-release-style file, with an abnormally large size. When the vulnerable application starts, restarts, initializes the affected Netty code path, or otherwise triggers environment detection, Netty attempts to read the attacker-created file. Because the file is read unsafely, the Java process can consume excessive memory and terminate with an out-of-memory error or crash, resulting in denial of service until the file is removed and the application is restarted or Netty is upgraded.
How to fix it
Upgrade Netty to a version that includes the upstream fix commit d1fbda62d3a47835d3fb35db8bd42ecc205a5386 or any later official release containing that change. Because Netty is often bundled transitively, inspect all Java dependency manifests, lockfiles, shaded JARs, container images, vendor packages, and application servers for vulnerable Netty components, including io.netty modules. If an immediate upgrade is not possible, mitigate by preventing untrusted users and service accounts from creating drive-rooted etc/os-release-style files on Windows hosts, removing any unexpected environment metadata files from Windows drive roots, enforcing least-privilege filesystem permissions, and monitoring for creation of unusually large files at those paths. Restart affected applications only after the malicious or oversized file has been removed or the dependency has been patched.
How to confirm the fix worked
Confirm the deployed Netty source or binary includes commit d1fbda62d3a47835d3fb35db8bd42ecc205a5386 or a later release that incorporates it. Validate software composition analysis results for all direct and transitive Netty dependencies, including shaded or repackaged copies. On Windows systems, verify that unexpected drive-rooted etc/os-release-style files do not exist and that normal application users cannot create them. In a controlled non-production environment, test startup or initialization behavior with a safely bounded test file at the relevant path and confirm the patched application does not perform unsafe unbounded reads or crash. Review recent crash logs before and after remediation to ensure OutOfMemoryError or abnormal Java process exits associated with os-release/environment-file reads no longer occur.
Typical attack path
- Gain local access, malware execution, misconfigured file-write access, or another foothold that permits creating files on the Windows host filesystem.
- Create the expected Unix-style environment metadata path on Windows, commonly resembling an etc/os-release path at the drive root.
- Populate the file with excessive data intended to force high memory consumption during Netty initialization or environment detection.
- Wait for or trigger restart/initialization of the vulnerable Netty-based application.
- The application reads the large file, exhausts memory or crashes, and the dependent service becomes unavailable.
- Repeat the crash by leaving the file in place until the vulnerable Netty dependency is patched or the malicious file is removed.
How to detect it
Look for evidence that a large environment metadata file was created on Windows shortly before Java or Netty-based services crashed. Useful sources include Windows Security file auditing events if enabled, Sysmon file creation events, EDR file telemetry, application logs, JVM crash logs, Windows Application event logs, service manager restart events, container runtime logs, and SIEM records for process termination or memory exhaustion. Correlate creation or modification of drive-rooted etc/os-release-style files with java.exe or javaw.exe OutOfMemoryError messages, abnormal exits, repeated service restarts, or high memory consumption. Investigate the user, process, or parent process that created the file, especially if it was not an installer, administrator maintenance task, or expected configuration management activity. Since this issue is a denial-of-service flaw rather than code execution, the strongest indicators are suspicious file creation at the relevant path plus temporally related Netty/Java application crashes.
- C:\etc\os-release
- D:\etc\os-release
- \etc\os-release
- /etc/os-release
- OutOfMemoryError
- java.lang.OutOfMemoryError
- java.exe
- javaw.exe
- io.netty
- Netty
- os-release
What your security team should do
- Inventory applications, services, containers, and vendor products that include Netty, prioritizing Windows deployments.
- Upgrade all affected Netty components to builds containing commit d1fbda62d3a47835d3fb35db8bd42ecc205a5386 or later fixed releases.
- Search Windows hosts for unexpected or oversized etc/os-release-style files at drive roots and remove suspicious instances after preserving forensic evidence where appropriate.
- Harden filesystem permissions so non-administrative users and application identities cannot create arbitrary files or directories at drive roots.
- Add endpoint and SIEM detections for creation or modification of drive-rooted etc/os-release files and for Java crashes associated with OutOfMemoryError near Netty initialization.
- For critical services, perform dependency verification on shaded JARs and vendor-supplied packages because Netty may not appear as an obvious top-level dependency.
- Treat this as a moderate-priority availability issue: exploit likelihood is currently low, but remediation should be included in routine dependency patch cycles, especially for Windows-hosted production services.
The record
An unsafe reading of environment file could potentially cause a denial of service in Netty. When loaded on an Windows application, Netty attemps to load a file that does not exist. If an attacker creates such a large file, the Netty application crash.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | io.netty:netty-common | 0 | 4.1.118.Final |
| Chainguard | akhq | 0 | 0 |
| Chainguard | apache-activemq-artemis | 0 | 0 |
| Chainguard | apache-activemq-artemis-compat | 0 | 0 |
| Chainguard | apache-nifi | 0 | 0 |
| Chainguard | apache-nifi-compat | 0 | 0 |
| Chainguard | apache-nifi-toolkit | 0 | 0 |
| Chainguard | apache-pulsar | 0 | 0 |
| Chainguard | apache-pulsar-compat | 0 | 0 |
| Chainguard | apicurio-registry | 0 | 0 |
| Chainguard | apicurio-registry-nginx-config | 0 | 0 |
| Chainguard | apicurio-registry-ui | 0 | 0 |
| Chainguard | camunda-zeebe | 0 | 8.6.9-r1 |
| Chainguard | camunda-zeebe-compat | 0 | 8.6.9-r1 |
| Chainguard | cassandra-5.0 | 0 | 0 |
| Chainguard | cassandra-5.0-compat | 0 | 0 |
| Chainguard | cassandra-5.0-entrypoint-compat | 0 | 0 |
| Chainguard | cassandra-5.0-iamguarded-compat | 0 | 0 |
| Chainguard | cassandra-fips-5.0 | 0 | 0 |
| Chainguard | cassandra-fips-5.0-compat | 0 | 0 |
| Chainguard | cassandra-reaper | 0 | 0 |
| Chainguard | celeborn-0.5-compat | 0 | 0.5.4-r9 |
| Chainguard | cqlsh-5.0 | 0 | 0 |
| Chainguard | cqlsh-fips-5.0 | 0 | 0 |
| Chainguard | docker-selenium | 0 | 0 |
| Chainguard | docker-selenium-base | 0 | 0 |
| Chainguard | docker-selenium-compat | 0 | 0 |
| Chainguard | docker-selenium-config | 0 | 0 |
| Chainguard | docker-selenium-distributor | 0 | 0 |
| Chainguard | docker-selenium-event-bus | 0 | 0 |
| Chainguard | docker-selenium-hub | 0 | 0 |
| Chainguard | docker-selenium-jre-bcfips | 0 | 0 |
| Chainguard | docker-selenium-jre-bcfips-supervisor-config | 0 | 0 |
| Chainguard | docker-selenium-node-base | 0 | 0 |
| Chainguard | docker-selenium-node-chromium | 0 | 0 |
| Chainguard | docker-selenium-node-docker | 0 | 0 |
| Chainguard | docker-selenium-node-firefox | 0 | 0 |
| Chainguard | docker-selenium-router | 0 | 0 |
| Chainguard | docker-selenium-session-queue | 0 | 0 |
| Chainguard | docker-selenium-sessions | 0 | 0 |
| Chainguard | docker-selenium-standalone | 0 | 0 |
| Chainguard | docker-selenium-standalone-chrome | 0 | 0 |
| Chainguard | docker-selenium-standalone-chromium | 0 | 0 |
| Chainguard | docker-selenium-standalone-docker | 0 | 0 |
| Chainguard | docker-selenium-standalone-firefox | 0 | 0 |
| Chainguard | docker-selenium-supervisor-config | 0 | 0 |
| Chainguard | druid | 0 | 0 |
| Chainguard | druid-compat | 0 | 0 |
| Chainguard | elasticsearch-7 | 0 | 0 |
| Chainguard | elasticsearch-7-bitnami | 0 | 0 |
| Chainguard | elasticsearch-7-iamguarded | 0 | 0 |
| Chainguard | elasticsearch-8 | 0 | 0 |
| Chainguard | elasticsearch-8-bitnami | 0 | 0 |
| Chainguard | elasticsearch-8-config | 0 | 0 |
| Chainguard | elasticsearch-8-iamguarded | 0 | 0 |
| Chainguard | elasticsearch-config | 0 | 0 |
| Chainguard | elasticsearch-fips-8 | 0 | 0 |
| Chainguard | elasticsearch-fips-8-bitnami | 0 | 0 |
| Chainguard | elasticsearch-fips-8-config | 0 | 0 |
| Chainguard | elasticsearch-fips-8-policy-140-2 | 0 | 0 |
| Chainguard | elasticsearch-fips-8-policy-140-3 | 0 | 0 |
| Chainguard | flyway | 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-r15 |
| Chainguard | kafka-3.7 | 0 | 0 |
| Chainguard | kafka-3.8 | 0 | 3.8.1-r46 |
| Chainguard | kafka-3.9 | 0 | 0 |
| Chainguard | kafka-bitnami-compat-3.7 | 0 | 0 |
| Chainguard | kafka-bitnami-compat-3.8 | 0 | 0 |
| Chainguard | kafka-bitnami-compat-3.9 | 0 | 0 |
| Chainguard | kafka-jre-bcfips | 0 | 0 |
| Chainguard | kafka-strimzi-compat | 0 | 0 |
| Chainguard | kafka_exporter-strimzi-compat | 0 | 0 |
| Chainguard | keycloak | 0 | 26.1.3-r0 |
| Chainguard | keycloak-bitnami-compat | 0 | 26.1.3-r0 |
| Chainguard | keycloak-bitnami-fips | 0 | 0 |
| Chainguard | keycloak-compat | 0 | 26.1.3-r0 |
| Chainguard | keycloak-fips | 0 | 0 |
| Chainguard | keycloak-fips-bitnami-compat | 0 | 0 |
| Chainguard | keycloak-fips-policy-140-2 | 0 | 0 |
| Chainguard | keycloak-fips-policy-140-3 | 0 | 0 |
| Chainguard | keycloak-iamguarded-compat | 0 | 26.1.3-r0 |
| Chainguard | keycloak-iamguarded-fips | 0 | 0 |
| Chainguard | keycloak-operator | 0 | 26.1.2-r2 |
| Chainguard | keycloak-operator-compat | 0 | 26.1.2-r2 |
| Chainguard | knative-kafka-broker-1.17-dispatcher-loom | 0 | 1.17.3-r8 |
| Chainguard | knative-kafka-broker-1.17-receiver-loom | 0 | 1.17.3-r8 |
| Chainguard | kserve-modelmesh | 0 | 0 |
| Chainguard | kserve-modelmesh-compat | 0 | 0 |
| Chainguard | localstack | 0 | 4.10.0-r0 |
| Chainguard | localstack-compat | 0 | 4.10.0-r0 |
| Chainguard | logstash-8 | 0 | 0 |
| Chainguard | logstash-8-bitnami-compat | 0 | 0 |
| Chainguard | logstash-8-compat | 0 | 0 |
| Chainguard | logstash-8-env2yaml | 0 | 0 |
| Chainguard | logstash-8-iamguarded-compat | 0 | 0 |
| Chainguard | logstash-8-with-output-opensearch | 0 | 0 |
| Chainguard | logstash-jre-bcfips | 0 | 0 |
| Chainguard | logstash-jre-bcfips-compat | 0 | 0 |
| Chainguard | logstash-jre-bcfips-env2yaml | 0 | 0 |
| Chainguard | logstash-jre-bcfips-with-output-opensearch | 0 | 0 |
| Chainguard | management-api-for-apache-cassandra-4.0 | 0 | 0 |
| Chainguard | management-api-for-apache-cassandra-4.0-compat | 0 | 0 |
| Chainguard | management-api-for-apache-cassandra-4.1 | 0 | 0 |
| Chainguard | management-api-for-apache-cassandra-4.1-compat | 0 | 0 |
| Chainguard | management-api-for-apache-cassandra-5.0 | 0 | 0 |
| Chainguard | management-api-for-apache-cassandra-5.0-compat | 0 | 0 |
| Chainguard | neo4j-4.4 | 0 | 0 |
| Chainguard | neo4j-4.4-docker-publish | 0 | 0 |
| Chainguard | neo4j-5.26 | 0 | 0 |
| Chainguard | neo4j-5.26-docker-publish | 0 | 0 |
| Chainguard | neo4j-5.26-oci-entrypoint | 0 | 0 |
| Chainguard | opensearch-2 | 0 | 0 |
| Chainguard | opensearch-2-alerting | 0 | 0 |
| Chainguard | opensearch-2-analysis-icu | 0 | 0 |
| Chainguard | opensearch-2-analysis-kuromoji | 0 | 0 |
| Chainguard | opensearch-2-analysis-nori | 0 | 0 |
| Chainguard | opensearch-2-analysis-phonetic | 0 | 0 |
| Chainguard | opensearch-2-analysis-smartcn | 0 | 0 |
| Chainguard | opensearch-2-analysis-stempel | 0 | 0 |
| Chainguard | opensearch-2-analysis-ukrainian | 0 | 0 |
| Chainguard | opensearch-2-anomaly-detection | 0 | 0 |
| Chainguard | opensearch-2-asynchronous-search | 0 | 0 |
| Chainguard | opensearch-2-cross-cluster-replication | 0 | 0 |
| Chainguard | opensearch-2-crypto-kms | 0 | 0 |
| Chainguard | opensearch-2-custom-codecs | 0 | 0 |
| Chainguard | opensearch-2-discovery-azure-classic | 0 | 0 |
| Chainguard | opensearch-2-discovery-ec2 | 0 | 0 |
| Chainguard | opensearch-2-discovery-gce | 0 | 0 |
| Chainguard | opensearch-2-entrypoint-compat | 0 | 0 |
| Chainguard | opensearch-2-geospatial | 0 | 0 |
| Chainguard | opensearch-2-identity-shiro | 0 | 0 |
| Chainguard | opensearch-2-index-management | 0 | 0 |
| Chainguard | opensearch-2-ingest-attachment | 0 | 0 |
| Chainguard | opensearch-2-job-scheduler | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-alerting | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-icu | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-kuromoji | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-nori | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-phonetic | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-smartcn | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-stempel | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-analysis-ukrainian | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-anomaly-detection | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-asynchronous-search | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-cross-cluster-replication | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-crypto-kms | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-custom-codecs | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-discovery-azure-classic | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-discovery-ec2 | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-discovery-gce | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-geospatial | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-identity-shiro | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-index-management | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-ingest-attachment | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-job-scheduler | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-k-nn | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-mapper-annotated-text | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-mapper-murmur3 | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-mapper-size | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-ml-commons | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-neural-search | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-notifications | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-observability | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-performance-analyzer | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-reporting | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-repository-azure | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-repository-gcs | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-repository-s3 | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-security | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-security-analytics | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-sql | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-store-smb | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-telemetry-otel | 0 | 0 |
| Chainguard | opensearch-2-jre-bcfips-transport-nio | 0 | 0 |
| Chainguard | opensearch-2-k-nn | 0 | 0 |
| Chainguard | opensearch-2-mapper-annotated-text | 0 | 0 |
| Chainguard | opensearch-2-mapper-murmur3 | 0 | 0 |
| Chainguard | opensearch-2-mapper-size | 0 | 0 |
| Chainguard | opensearch-2-ml-commons | 0 | 0 |
| Chainguard | opensearch-2-neural-search | 0 | 0 |
| Chainguard | opensearch-2-notifications | 0 | 0 |
| Chainguard | opensearch-2-observability | 0 | 0 |
| Chainguard | opensearch-2-performance-analyzer | 0 | 0 |
| Chainguard | opensearch-2-reporting | 0 | 0 |
| Chainguard | opensearch-2-repository-azure | 0 | 0 |
| Chainguard | opensearch-2-repository-gcs | 0 | 0 |
| Chainguard | opensearch-2-repository-s3 | 0 | 0 |
| Chainguard | opensearch-2-security | 0 | 0 |
| Chainguard | opensearch-2-security-analytics | 0 | 0 |
| Chainguard | opensearch-2-sql | 0 | 0 |
| Chainguard | opensearch-2-store-smb | 0 | 0 |
| Chainguard | opensearch-2-telemetry-otel | 0 | 0 |
| Chainguard | opensearch-2-transport-nio | 0 | 0 |
| Chainguard | prometheus-jmx-exporter-strimzi-compat | 0 | 0 |
| Chainguard | pyspark-scala-2.13 | 0 | 0 |
| Chainguard | selenium | 0 | 0 |
| Chainguard | selenium-jre-bcfips | 0 | 0 |
Related vulnerabilities
- CVE-2024-47535 Netty is an asynchronous event-driven network application framework for rapid development… Also affects io.netty:netty-common
- CVE-2026-33871 Netty is an asynchronous, event-driven network application framework. Also affects akhq
- CVE-2026-33870 Netty is an asynchronous, event-driven network application framework. Also affects akhq
- CVE-2026-24281 Hostname verification in Apache ZooKeeper ZKTrustManager falls back to reverse DNS (PTR)… Also affects akhq
- CVE-2026-24308 Improper handling of configuration values in ZKConfig in Apache ZooKeeper 3.8.5 and 3.9.4… Also affects akhq
- CVE-2025-11143 The Jetty URI parser has some key differences to other common parsers when evaluating… Also affects akhq
- CVE-2025-33042 Improper Control of Generation of Code ('Code Injection') vulnerability in Apache Avro… Also affects akhq
- CVE-2026-1225 ACE vulnerability in configuration file processing by QOS.CH logback-core up to and… Also affects akhq