GitHub Advisoryadvisory · RubyGems

GHSA-vcgp-9326-pqcp net-imap vulnerable to STARTTLS stripping via invalid response timing

HIGH Published 2026-05-04 Modified 2026-05-14 Official page ↗
Aliases
CVE-2026-42246
Ecosystem
RubyGems
Packages
net-imap
Severity
High
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Weaknesses
CWE-392, CWE-393, CWE-636, CWE-754, CWE-841
Reviewed
2026-05-04

Affected packages

• RubyGems net-imap: >= 0.6.0, < 0.6.4 → fixed in 0.6.4 • RubyGems net-imap: >= 0.5.0, < 0.5.14 → fixed in 0.5.14 • RubyGems net-imap: >= 0.4.0, < 0.4.24 → fixed in 0.4.24 • RubyGems net-imap: < 0.3.10 → fixed in 0.3.10

Description

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: Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access • NO STARTTLS: 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`.

Related

Alias · CVE (1)

  • CVE-2026-42246 Net::IMAP implements Internet Message Access Protocol (IMAP) client functionality in Ruby. vulnerability

Weakness · CWE (5)

  • CWE-392 Missing Report of Error Condition weakness
  • CWE-393 Return of Wrong Status Code weakness
  • CWE-636 Not Failing Securely weakness
  • CWE-754 Improper Check for Unusual or Exceptional Conditions weakness
  • CWE-841 Improper Enforcement of Behavioral Workflow weakness

References