CVE-2025-59419
NoneCVSS
—
EPSS
1.6%
Published
Oct 15, 2025
CISA due date
—
Cloudanix analysis
Attackers can make a trusted mail server send fake emails that look like they came from the organization itself.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Command Injection
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The SMTP codec in Netty concatenates user-supplied parameters directly into SMTP command strings without sanitizing CRLF characters in DefaultSmtpRequest, enabling injection of arbitrary SMTP commands via methods such as SmtpRequests.rcpt.
Why it matters to the business
Organizations using vulnerable Netty versions risk having their trusted mail servers abused to send forged emails that bypass SPF and DKIM checks, enabling credible impersonation of executives and fraudulent corporate communications.
How an attack unfolds
An attacker supplies a malicious string containing CRLF sequences to an SMTP parameter such as a recipient address in application code that calls Netty SMTP methods. The injected commands are executed as part of traffic originating from the server's trusted IP address, resulting in forged emails that appear legitimate.
How to fix it
Upgrade Netty to version 4.1.129.Final or 4.2.8.Final. No workarounds are available.
How to confirm the fix worked
Confirm the Netty dependency version is 4.1.129.Final or newer in all affected projects and verify that SMTP parameter inputs are no longer directly concatenated without sanitization.
Typical attack path
- Locate application code paths that pass unsanitized user input to Netty SMTP request methods
- Craft a parameter value containing CRLF followed by arbitrary SMTP commands
- Trigger the vulnerable SMTP request to cause the server to emit the injected commands
- Send forged emails that pass authentication checks due to originating from the trusted server
How to detect it
Review application and mail server logs for SMTP command sequences containing unexpected CRLF characters or injected commands such as additional RCPT TO or DATA blocks originating from Netty-based services.
What your security team should do
- Immediately upgrade all Netty instances to 4.1.129.Final or 4.2.8.Final
- Audit code for direct use of SmtpRequests methods with untrusted parameters
- Add input validation or sanitization for any email-related fields passed to SMTP codecs
The record
Netty is an asynchronous, event-driven network application framework. In versions prior to 4.1.128.Final and 4.2.7.Final, the SMTP codec in Netty contains an SMTP command injection vulnerability due to insufficient input validation for Carriage Return (\r) and Line Feed (\n) characters in user-supplied parameters. The vulnerability exists in io.netty.handler.codec.smtp.DefaultSmtpRequest, where parameters are directly concatenated into the SMTP command string without sanitization. When methods such as SmtpRequests.rcpt(recipient) are called with a malicious string containing CRLF sequences, attackers can inject arbitrary SMTP commands. Because the injected commands are sent from the server's trusted IP address, resulting emails will likely pass SPF and DKIM authentication checks, making them appear legitimate. This allows remote attackers who can control SMTP command parameters (such as email recipients) to forge arbitrary emails from the trusted server, potentially impersonating executives and forging high-stakes corporate communications. This issue has been patched in versions 4.1.129.Final and 4.2.8.Final. No known workarounds exist.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | io.netty:netty-codec-smtp | 0 | 4.1.128.Final |
| Maven | io.netty:netty-codec-smtp | 4.2.0.Alpha1 | 4.2.7.Final |
| Chainguard | apache-hop | 0 | 2.15.0-r13 |
| Chainguard | apache-hop-fips | 0 | 2.15.0-r15 |
| Chainguard | celeborn-0.5 | 0 | 0.5.4-r8 |
| Chainguard | celeborn-0.5-compat | 0 | 0.5.4-r8 |
| Chainguard | hadoop-fips-3.3.6 | 0 | 3.3.6-r13 |
| Chainguard | hadoop-fips-3.3.6-compat | 0 | 3.3.6-r13 |
| Chainguard | hadoop-fips-3.3.6-dev | 0 | 3.3.6-r13 |
| Chainguard | hadoop-fips-3.3.6-m2 | 0 | 3.3.6-r13 |
| Chainguard | management-api-for-apache-cassandra-4.0 | 0 | 0.1.108-r1 |
| Chainguard | management-api-for-apache-cassandra-4.0-compat | 0 | 0.1.108-r1 |
| Chainguard | management-api-for-apache-cassandra-4.1 | 0 | 0.1.108-r1 |
| Chainguard | management-api-for-apache-cassandra-4.1-compat | 0 | 0.1.108-r1 |
| Chainguard | management-api-for-apache-cassandra-5.0 | 0 | 0.1.108-r2 |
| Chainguard | management-api-for-apache-cassandra-5.0-compat | 0 | 0.1.108-r2 |
| Chainguard | seata | 0 | 2.5.0-r1 |
| Chainguard | seata-namingserver | 0 | 2.5.0-r1 |
| Chainguard | seata-namingserver-oci-entrypoint | 0 | 2.5.0-r1 |
| Chainguard | seata-openjdk-17-compat | 0 | 2.5.0-r1 |
| Chainguard | seata-openjdk-21-compat | 0 | 2.5.0-r1 |
| Chainguard | seata-openjdk-8-compat | 0 | 2.5.0-r1 |
| Chainguard | seata-server | 0 | 2.5.0-r1 |
| Chainguard | seata-server-oci-entrypoint | 0 | 2.5.0-r1 |
| Chainguard | tez | 0 | 0.10.5-r6 |
| Chainguard | thingsboard | 0 | 4.2.1-r1 |
| Chainguard | thingsboard-tb-js-executor | 0 | 4.2.1-r1 |
| Chainguard | thingsboard-tb-mqtt-transport | 0 | 4.2.1-r1 |
| Chainguard | thingsboard-tb-node | 0 | 4.2.1-r1 |
| Chainguard | thingsboard-tb-web-ui | 0 | 4.2.1-r1 |
| Chainguard | trino | 0 | 477-r2 |
| Chainguard | trino-config | 0 | 477-r2 |
| Chainguard | trino-oci-entrypoint | 0 | 477-r2 |
| Chainguard | trino-plugin-accumulo | 0 | 477-r2 |
| Chainguard | trino-plugin-ai-functions | 0 | 477-r2 |
| Chainguard | trino-plugin-atop | 0 | 477-r2 |
| Chainguard | trino-plugin-bigquery | 0 | 477-r2 |
| Chainguard | trino-plugin-blackhole | 0 | 477-r2 |
| Chainguard | trino-plugin-cassandra | 0 | 477-r2 |
| Chainguard | trino-plugin-clickhouse | 0 | 477-r2 |
| Chainguard | trino-plugin-delta-lake | 0 | 477-r2 |
| Chainguard | trino-plugin-druid | 0 | 477-r2 |
| Chainguard | trino-plugin-duckdb | 0 | 477-r2 |
| Chainguard | trino-plugin-elasticsearch | 0 | 477-r2 |
| Chainguard | trino-plugin-example-http | 0 | 477-r2 |
| Chainguard | trino-plugin-exasol | 0 | 477-r2 |
| Chainguard | trino-plugin-exchange-filesystem | 0 | 477-r2 |
| Chainguard | trino-plugin-exchange-hdfs | 0 | 477-r2 |
| Chainguard | trino-plugin-faker | 0 | 477-r2 |
| Chainguard | trino-plugin-functions-python | 0 | 477-r2 |
| Chainguard | trino-plugin-geospatial | 0 | 477-r2 |
| Chainguard | trino-plugin-google-sheets | 0 | 477-r2 |
| Chainguard | trino-plugin-hive | 0 | 477-r2 |
| Chainguard | trino-plugin-http-event-listener | 0 | 477-r2 |
| Chainguard | trino-plugin-http-server-event-listener | 0 | 477-r2 |
| Chainguard | trino-plugin-hudi | 0 | 477-r2 |
| Chainguard | trino-plugin-iceberg | 0 | 477-r2 |
| Chainguard | trino-plugin-ignite | 0 | 477-r2 |
| Chainguard | trino-plugin-jmx | 0 | 477-r2 |
| Chainguard | trino-plugin-kafka | 0 | 477-r2 |
| Chainguard | trino-plugin-kafka-event-listener | 0 | 477-r2 |
| Chainguard | trino-plugin-kinesis | 0 | 477-r2 |
| Chainguard | trino-plugin-kudu | 0 | 477-r2 |
| Chainguard | trino-plugin-lakehouse | 0 | 477-r2 |
| Chainguard | trino-plugin-ldap-group-provider | 0 | 477-r2 |
| Chainguard | trino-plugin-local-file | 0 | 477-r2 |
| Chainguard | trino-plugin-loki | 0 | 477-r2 |
| Chainguard | trino-plugin-mariadb | 0 | 477-r2 |
| Chainguard | trino-plugin-memory | 0 | 477-r2 |
| Chainguard | trino-plugin-ml | 0 | 477-r2 |
| Chainguard | trino-plugin-mongodb | 0 | 477-r2 |
| Chainguard | trino-plugin-mysql | 0 | 477-r2 |
| Chainguard | trino-plugin-mysql-event-listener | 0 | 477-r2 |
| Chainguard | trino-plugin-opa | 0 | 477-r2 |
| Chainguard | trino-plugin-openlineage | 0 | 477-r2 |
| Chainguard | trino-plugin-opensearch | 0 | 477-r2 |
| Chainguard | trino-plugin-oracle | 0 | 477-r2 |
| Chainguard | trino-plugin-password-authenticators | 0 | 477-r2 |
| Chainguard | trino-plugin-phoenix5 | 0 | 477-r2 |
| Chainguard | trino-plugin-pinot | 0 | 477-r2 |
| Chainguard | trino-plugin-postgresql | 0 | 477-r2 |
| Chainguard | trino-plugin-prometheus | 0 | 477-r2 |
| Chainguard | trino-plugin-ranger | 0 | 477-r2 |
| Chainguard | trino-plugin-raptor-legacy | 0 | 477-r2 |
| Chainguard | trino-plugin-redis | 0 | 477-r2 |
| Chainguard | trino-plugin-redshift | 0 | 477-r2 |
| Chainguard | trino-plugin-resource-group-managers | 0 | 477-r2 |
| Chainguard | trino-plugin-session-property-managers | 0 | 477-r2 |
| Chainguard | trino-plugin-singlestore | 0 | 477-r2 |
| Chainguard | trino-plugin-snowflake | 0 | 477-r2 |
| Chainguard | trino-plugin-spooling-filesystem | 0 | 477-r2 |
| Chainguard | trino-plugin-sqlserver | 0 | 477-r2 |
| Chainguard | trino-plugin-teradata-functions | 0 | 477-r2 |
| Chainguard | trino-plugin-thrift | 0 | 477-r2 |
| Chainguard | trino-plugin-tpcds | 0 | 477-r2 |
| Chainguard | trino-plugin-tpch | 0 | 477-r2 |
| Chainguard | trino-plugin-vertica | 0 | 477-r2 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP6 | netty-tcnative | 0 | 2.0.74-150200.3.33.1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP7 | netty-tcnative | 0 | 2.0.74-150200.3.33.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP6 | netty | 0 | 4.1.128-150200.4.37.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP7 | netty | 0 | 4.1.128-150200.4.37.1 |
| Wolfi | celeborn-0.5 | 0 | 0.5.4-r8 |
| Wolfi | celeborn-0.5-compat | 0 | 0.5.4-r8 |
| Wolfi | management-api-for-apache-cassandra-4.1 | 0 | 0.1.108-r1 |
| Wolfi | management-api-for-apache-cassandra-4.1-compat | 0 | 0.1.108-r1 |
| Wolfi | management-api-for-apache-cassandra-5.0 | 0 | 0.1.108-r2 |
| Wolfi | management-api-for-apache-cassandra-5.0-compat | 0 | 0.1.108-r2 |
| Wolfi | tez | 0 | 0.10.5-r6 |
| Wolfi | thingsboard | 0 | 4.2.1-r1 |
| Wolfi | thingsboard-tb-js-executor | 0 | 4.2.1-r1 |
| Wolfi | thingsboard-tb-mqtt-transport | 0 | 4.2.1-r1 |
| Wolfi | thingsboard-tb-node | 0 | 4.2.1-r1 |
| Wolfi | thingsboard-tb-web-ui | 0 | 4.2.1-r1 |
| Wolfi | trino | 0 | 477-r2 |
| Wolfi | trino-config | 0 | 477-r2 |
| Wolfi | trino-oci-entrypoint | 0 | 477-r2 |
| Wolfi | trino-plugin-accumulo | 0 | 477-r2 |
| Wolfi | trino-plugin-ai-functions | 0 | 477-r2 |
| Wolfi | trino-plugin-atop | 0 | 477-r2 |
| Wolfi | trino-plugin-bigquery | 0 | 477-r2 |
| Wolfi | trino-plugin-blackhole | 0 | 477-r2 |
| Wolfi | trino-plugin-cassandra | 0 | 477-r2 |
| Wolfi | trino-plugin-clickhouse | 0 | 477-r2 |
| Wolfi | trino-plugin-delta-lake | 0 | 477-r2 |
| Wolfi | trino-plugin-druid | 0 | 477-r2 |
| Wolfi | trino-plugin-duckdb | 0 | 477-r2 |
| Wolfi | trino-plugin-elasticsearch | 0 | 477-r2 |
| Wolfi | trino-plugin-example-http | 0 | 477-r2 |
| Wolfi | trino-plugin-exasol | 0 | 477-r2 |
| Wolfi | trino-plugin-exchange-filesystem | 0 | 477-r2 |
| Wolfi | trino-plugin-exchange-hdfs | 0 | 477-r2 |
| Wolfi | trino-plugin-faker | 0 | 477-r2 |
| Wolfi | trino-plugin-functions-python | 0 | 477-r2 |
| Wolfi | trino-plugin-geospatial | 0 | 477-r2 |
| Wolfi | trino-plugin-google-sheets | 0 | 477-r2 |
| Wolfi | trino-plugin-hive | 0 | 477-r2 |
| Wolfi | trino-plugin-http-event-listener | 0 | 477-r2 |
| Wolfi | trino-plugin-http-server-event-listener | 0 | 477-r2 |
| Wolfi | trino-plugin-hudi | 0 | 477-r2 |
| Wolfi | trino-plugin-iceberg | 0 | 477-r2 |
| Wolfi | trino-plugin-ignite | 0 | 477-r2 |
| Wolfi | trino-plugin-jmx | 0 | 477-r2 |
| Wolfi | trino-plugin-kafka | 0 | 477-r2 |
| Wolfi | trino-plugin-kafka-event-listener | 0 | 477-r2 |
| Wolfi | trino-plugin-kinesis | 0 | 477-r2 |
| Wolfi | trino-plugin-kudu | 0 | 477-r2 |
| Wolfi | trino-plugin-lakehouse | 0 | 477-r2 |
| Wolfi | trino-plugin-ldap-group-provider | 0 | 477-r2 |
| Wolfi | trino-plugin-local-file | 0 | 477-r2 |
| Wolfi | trino-plugin-loki | 0 | 477-r2 |
| Wolfi | trino-plugin-mariadb | 0 | 477-r2 |
| Wolfi | trino-plugin-memory | 0 | 477-r2 |
| Wolfi | trino-plugin-ml | 0 | 477-r2 |
| Wolfi | trino-plugin-mongodb | 0 | 477-r2 |
| Wolfi | trino-plugin-mysql | 0 | 477-r2 |
| Wolfi | trino-plugin-mysql-event-listener | 0 | 477-r2 |
| Wolfi | trino-plugin-opa | 0 | 477-r2 |
| Wolfi | trino-plugin-openlineage | 0 | 477-r2 |
| Wolfi | trino-plugin-opensearch | 0 | 477-r2 |
| Wolfi | trino-plugin-oracle | 0 | 477-r2 |
| Wolfi | trino-plugin-password-authenticators | 0 | 477-r2 |
| Wolfi | trino-plugin-phoenix5 | 0 | 477-r2 |
| Wolfi | trino-plugin-pinot | 0 | 477-r2 |
| Wolfi | trino-plugin-postgresql | 0 | 477-r2 |
| Wolfi | trino-plugin-prometheus | 0 | 477-r2 |
| Wolfi | trino-plugin-ranger | 0 | 477-r2 |
| Wolfi | trino-plugin-raptor-legacy | 0 | 477-r2 |
| Wolfi | trino-plugin-redis | 0 | 477-r2 |
| Wolfi | trino-plugin-redshift | 0 | 477-r2 |
| Wolfi | trino-plugin-resource-group-managers | 0 | 477-r2 |
| Wolfi | trino-plugin-session-property-managers | 0 | 477-r2 |
| Wolfi | trino-plugin-singlestore | 0 | 477-r2 |
| Wolfi | trino-plugin-snowflake | 0 | 477-r2 |
| Wolfi | trino-plugin-spooling-filesystem | 0 | 477-r2 |
| Wolfi | trino-plugin-sqlserver | 0 | 477-r2 |
| Wolfi | trino-plugin-teradata-functions | 0 | 477-r2 |
| Wolfi | trino-plugin-thrift | 0 | 477-r2 |
| Wolfi | trino-plugin-tpcds | 0 | 477-r2 |
| Wolfi | trino-plugin-tpch | 0 | 477-r2 |
| Wolfi | trino-plugin-vertica | 0 | 477-r2 |
| maven | io.netty/netty-codec-smtp | 4.2.0.Alpha1 | 4.2.7.Final |
| openSUSE:Leap 15.6 | netty | 0 | 4.1.128-150200.4.37.1 |
| openSUSE:Leap 15.6 | netty-tcnative | 0 | 2.0.74-150200.3.33.1 |
| openSUSE:Tumbleweed | netty | 0 | 4.1.128-1.1 |
Related vulnerabilities
- CVE-2026-33871 Netty is an asynchronous, event-driven network application framework. Also affects apache-hop
- CVE-2026-1605 In Eclipse Jetty, versions 12.0.0-12.0.31 and 12.1.0-12.0.5, class GzipHandler exposes a… Also affects apache-hop
- CVE-2025-11143 The Jetty URI parser has some key differences to other common parsers when evaluating… Also affects apache-hop
- CVE-2025-33042 Improper Control of Generation of Code ('Code Injection') vulnerability in Apache Avro… Also affects apache-hop
- CVE-2025-68161 Apache Log4j does not verify the TLS hostname in its Socket Appender Also affects apache-hop
- CVE-2025-67735 Netty has a CRLF Injection vulnerability in io.netty.handler.codec.http.HttpRequestEncoder Also affects apache-hop
- CVE-2025-66566 yawkat LZ4 Java provides LZ4 compression for Java. Also affects apache-hop
- CVE-2025-12183 Out-of-bounds memory operations in org.lz4:lz4-java 1.8.0 and earlier allow remote… Also affects apache-hop