CVE-2026-93576: Io.netty/netty-codec-smtp: netty netty-codec-smtp — smtp command-name field is not crlf-validated (incomplete fix of cve-2025-59419)

Published Sep 18, 2026
·
Updated

A flaw was found in Netty netty-codec-smtp. The component does not properly validate Carriage Return (CR) and Line Feed (LF) characters in the SMTP command-name field. A remote attacker, if an application routes untrusted input into this field, can embed CR/LF characters to inject arbitrary SMTP commands. This can lead to SMTP command smuggling, allowing for unauthorized email relay or spoofing of sender/recipient addresses. While the impact is significant, the real-world exploitability is considered lower as applications typically do not place user-controlled data in the command-name field.

Other sources

Netty netty-codec-smtp — SMTP command-name field is not CRLF-validated (incomplete fix of CVE-2025-59419)

A public GitHub Security Advisory (GHSA-5vh9-c45f-rf7p) describes the following issue:

Summary

CVE-2025-59419 (GHSA-jq43-27x9-3v86) added SmtpUtils.validateSMTPParameters to reject CR/LF in SMTP request parameters and wired it into DefaultSmtpRequest's parameter paths. The fix does not validate the SMTP command name: SmtpCommand.valueOf(CharSequence) performs no validation, and SmtpRequestEncoder writes the command verbatim. So CR/LF embedded in the command-name field injects whole SMTP commands onto the wire — the same CRLF/command-injection class the fix set out to close, on a field the fix did not cover.

Empirically (run-log), against the released netty-codec-smtp.14.Final: a CRLF-in-recipient request is correctly rejected (parameter path fixed), but new DefaultSmtpRequest(SmtpCommand.valueOf("NOOP\r\nMAIL FROM:<…>\r\nRCPT TO:<…>\r\nDATA")) encodes to four CRLF-separated SMTP commands on the wire.

Anchor (netty/netty HEAD e067b6e; released netty-codec-smtp.14.Final)

- Validation is parameter-only — DefaultSmtpRequest.java:46 and :59 call SmtpUtils.validateSMTPParameters(parameters); the command is taken as-is (:37/:45/:58 checkNotNull(command) — no CRLF check). - SmtpCommand.java:66 valueOf(CharSequence) → :69 new SmtpCommand(AsciiString.of(commandName)) — no validation. - SmtpRequestEncoder writes the command name verbatim (ByteBufUtil.writeAscii), so embedded CR/LF passes to the wire. - Public entrypoints DefaultSmtpRequest(CharSequence command, …) (:53) and SmtpCommand.valueOf(...) route straight through.

Root cause

This is an incomplete fix of CVE-2025-59419 (CWE-93, CRLF injection). The 4.1.128/4.2.7 patch was expected to neutralize CR/LF in SMTP requests, but it only validates request parameters; the command-name field is unvalidated end-to-end. Encoding a request whose command name carries embedded CR/LF emits four injected SMTP commands on the wire (run-log). The gap exists because the original reporter's PoC and the patch both framed the bug as a parameter (recipient) problem — the command name was outside the fix's threat model, and SmtpRequestEncoder performs no validation of its own when writing the command.

Threat model — and honest severity

CRLF/command injection into the SMTP byte stream enables SMTP command smuggling (forged MAIL FROM/RCPT TO, unauthorized relay/spoofing) when the application routes untrusted input into the SMTP command-name field.

Honest caveat (this is the load-bearing limitation): applications normally place user-controlled data in SMTP parameters (recipient/sender addresses) — which the parent CVE now validates — not in the command name, which is usually a fixed verb. So real-world reachability of the command-name axis is lower than the parameter axis the CVE fixed; this is best characterised as a fix-completeness / defense-in-depth gap in a flagship library rather than a high-reachability heavy-hitter.

CVSS v3.1

6.5 Medium — honestly rated. The injection impact, when reached, is integrity-affecting command smuggling (the I:H vector AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N = 7.5); it is down-rated here to 6.5 to reflect the narrow reachability (untrusted data in the command-name field is an uncommon application pattern versus the parameter path the parent CVE closed). Reported as the completeness sibling of CVE-2025-59419.

Recommended fix

Validate the command name for CR/LF the same way parameters are validated — either in SmtpCommand.valueOf / the SmtpCommand(AsciiString) constructor, or in SmtpRequestEncoder before writing the command:

java // in SmtpCommand.valueOf / constructor, or SmtpRequestEncoder.encode: SmtpUtils.validateSMTPParameters(java.util.Collections.singletonList(commandName));

Cross-references

- Parent: CVE-2025-59419 / GHSA-jq43-27x9-3v86, fix commits 1782e8c2…, 2b3fddd3… (added SmtpUtils.validateSMTPParameters, parameters only).

CNA / submission target

GHSA private advisory on netty/netty (Netty maintainers / io.netty CNA).

Repro

poc/run.sh downloads the released Netty 4.2.14.Final jars, compiles poc/SmtpInjectionPoc.java, and runs the production SmtpRequestEncoder in an EmbeddedChannel. Captured run log: poc/run-log-2026-06-02.txt (exit 0).

- Control — CRLF in a recipient parameter (SmtpRequests.rcpt): throws IllegalArgumentException (parameter path is fixed). - Bug — DefaultSmtpRequest(SmtpCommand.valueOf("NOOP\r\n…\r\nDATA")): encodes 4 CRLF-separated SMTP commands onto the wire (smuggled MAIL FROM + RCPT TO present).

Affected: - maven:io.netty:netty-codec-smtp affected >=4.2.0.Final,<= 4.2.17.Final; fixed unknown - maven:io.netty:netty-codec-smtp affected <=4.1.137.Final; fixed unknown

Fixed versions: see advisory

Advisory: https://github.com/netty/netty/security/advisories/GHSA-5vh9-c45f-rf7p

— Red Hat

Affected Software

2 affected components
Netty netty-codec-smtp (io.netty/netty-codec-smtp)>=4.2.0.Final<=4.2.17.Final
maven/io.netty/netty-codec-smtp<=4.1.137.Final

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade io.netty/netty-codec-smtp to a version that resolves this vulnerability.

    Fixed in 4.2.0.Final
  2. Upgrade

    Upgrade io.netty/netty-codec-smtp to a version that resolves this vulnerability.

    Fixed in 4.2.17.Final
  3. Upgrade

    Upgrade io.netty/netty-codec-smtp to a version that resolves this vulnerability.

    Fixed in 4.1.137.Final
  4. Upgrade

    Upgrade io.netty/netty-codec-smtp to a version that resolves this vulnerability.

    Fixed in 4.2.14.Final
  5. Configuration

    Validate SMTP command-name characters for CR and LF (e.g., in `SmtpCommand.valueOf(CharSequence)` / `SmtpCommand(AsciiString)` constructor or in `SmtpRequestEncoder` before writing the command), using the same approach as `SmtpUtils.validateSMTPParameters(...)` was applied to SMTP request parameters in CVE-2025-59419.

    Netty io.netty:netty-codec-smtp CR/LF validation for SMTP command name = reject

Event History

Sep 18, 2026
Data Sourced
via Red Hat·10:33 AM
DescriptionSeverityAffected Software
CVE Published
via MITRE·02:33 PM
Data Sourced
via MITRE·02:33 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·03:17 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

What level of access does an attacker need to exploit this issue?

The CVSS vector indicates that exploitation is network-accessible, requires no privileges, no user interaction, and has low attack complexity.

2

What is the primary security impact?

The reported impact is integrity compromise; confidentiality and availability impacts are not indicated in the provided CVSS vector.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203