net-imap vulnerable to STARTTLS stripping via invalid response timing
### Summary A man-in-the-middle attacker can cause `Net::IMAP#starttls` to return "successfully", without starting TLS. ### Details When using `Net::IMAP#starttls` to upgrade a plaintext connection to use TLS, a man-in-the-middle attacker can inject a tagged `OK` response with an easily predictable tag. By sending the response before the client finishes sending the command, the command completes "successfully" before the response handler is registered. This allows `#starttls` to return without error, but the response handler is never invoked, the TLS connection is never established, and the socket remains unencrypted. This allows man-in-the-middle attackers to perform a STARTTLS stripping attack, unless the client code explicitly checks `Net::IMAP#tls_verified?`. ### Impact TLS bypass, leading to cleartext transmission of sensitive information. ### Mitigation * Upgrade to a patched version of net-imap that raises an exception whenever `#starttls` does not establish TLS. * Connect to an implicit TLS port, rather than use `STARTTLS` with a cleartext port. This is strongly recommended anyway: * [RFC 8314](https://www.rfc-editor.org/info/rfc8314): Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access * [NO STARTTLS](https://nostarttls.secvuln.info/): Why TLS is better without STARTTLS, A Security Analysis of STARTTLS in the Email Context * Explicitly verify `Net::IMAP#tls_verified?` is `true`, before using the connection after `#starttls`.
02 / AFFECTED SOFTWARE
Affected packages
56 explicit affected versions
62 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. Prior to versions 0.3.10, 0.4.24, 0.5.14, and 0.6.4, a man-in-the-middle attacker can cause Net::IMAP#starttls to return "successfully", without starting TLS. This issue has been patched in versions 0.3.10, 0.4.24, 0.5.14, and 0.6.4.
### Summary A man-in-the-middle attacker can cause `Net::IMAP#starttls` to return "successfully", without starting TLS. ### Details When using `Net::IMAP#starttls` to upgrade a plaintext connection to use TLS, a man-in-the-middle attacker can inject a tagged `OK` response with an easily predictable tag. By sending the response before the client finishes sending the command, the command completes "successfully" before the response handler is registered. This allows `#starttls` to return without error, but the response handler is never invoked, the TLS connection is never established, and the socket remains unencrypted. This allows man-in-the-middle attackers to perform a STARTTLS stripping attack, unless the client code explicitly checks `Net::IMAP#tls_verified?`. ### Impact TLS bypass, leading to cleartext transmission of sensitive information. ### Mitigation * Upgrade to a patched version of net-imap that raises an exception whenever `#starttls` does not establish TLS. * Connect to an implicit TLS port, rather than use `STARTTLS` with a cleartext port. This is strongly recommended anyway: * [RFC 8314](https://www.rfc-editor.org/info/rfc8314): Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access * [NO STARTTLS](https://nostarttls.secvuln.info/): Why TLS is better without STARTTLS, A Security Analysis of STARTTLS in the Email Context * Explicitly verify `Net::IMAP#tls_verified?` is `true`, before using the connection after `#starttls`.
05 / REFERENCES
Further evidence
- https://access.redhat.com/errata/RHSA-2026:33462
- https://access.redhat.com/errata/RHSA-2026:33512
- https://access.redhat.com/errata/RHSA-2026:33514
- https://access.redhat.com/errata/RHSA-2026:33515
- https://access.redhat.com/errata/RHSA-2026:33540
- https://access.redhat.com/errata/RHSA-2026:33551
- https://access.redhat.com/errata/RHSA-2026:33552
- https://access.redhat.com/errata/RHSA-2026:33565
- https://access.redhat.com/errata/RHSA-2026:33576
- https://access.redhat.com/errata/RHSA-2026:33577
- https://access.redhat.com/errata/RHSA-2026:33630
- https://access.redhat.com/errata/RHSA-2026:33721
- https://access.redhat.com/errata/RHSA-2026:34076
- https://access.redhat.com/errata/RHSA-2026:35834
- https://access.redhat.com/errata/RHSA-2026:35866
- https://access.redhat.com/errata/RHSA-2026:35867
- https://access.redhat.com/errata/RHSA-2026:35895
- https://access.redhat.com/errata/RHSA-2026:36099
- https://access.redhat.com/errata/RHSA-2026:37238
- https://access.redhat.com/errata/RHSA-2026:37397
- https://access.redhat.com/security/cve/CVE-2026-42246
- https://bugzilla.redhat.com/show_bug.cgi?id=2468499
- https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/42xxx/CVE-2026-42246.json
- https://github.com/ruby/net-imap/commit/0ede4c40b1523dfeaf95777b2678e54cc0fd9618
- https://github.com/ruby/net-imap/commit/24a4e770b43230286a05aa2a9746cdbb3eb8485e
- https://github.com/ruby/net-imap/commit/97e2488fb5401a1783bddd959dde007d9fbce42c
- https://github.com/ruby/net-imap/commit/f79d35bf5833f186e81044c57c843eda30c873da
- https://github.com/ruby/net-imap/releases/tag/v0.3.10
- https://github.com/ruby/net-imap/releases/tag/v0.4.24
- https://github.com/ruby/net-imap/releases/tag/v0.5.14
- https://github.com/ruby/net-imap/security/advisories/GHSA-vcgp-9326-pqcp
- https://nvd.nist.gov/vuln/detail/CVE-2026-42246
- https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42246.json
- https://github.com/ruby/net-imap
- https://github.com/ruby/net-imap/releases/tag/v0.6.4
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/net-imap/CVE-2026-42246.yml
- https://nostarttls.secvuln.info
- https://www.rfc-editor.org/info/rfc8314