GitHub Advisoryadvisory · RubyGems

GHSA-j3g3-5qv5-52mj net-imap rubygem vulnerable to possible DoS by memory exhaustion

MEDIUM Published 2025-04-28 Modified 2025-11-21 Official page ↗
Aliases
CVE-2025-43857
Ecosystem
RubyGems
Packages
net-imap
Severity
Moderate
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weaknesses
CWE-400, CWE-405, CWE-770, CWE-789
Reviewed
2025-04-28

Affected packages

• RubyGems net-imap: >= 0.5.0, < 0.5.7 → fixed in 0.5.7 • RubyGems net-imap: >= 0.4.0, < 0.4.20 → fixed in 0.4.20 • RubyGems net-imap: >= 0.3.0, < 0.3.9 → fixed in 0.3.9 • RubyGems net-imap: < 0.2.5 → fixed in 0.2.5

Description

Summary There is a possibility for denial of service by memory exhaustion when `net-imap` reads server responses. At any time while the client is connected, a malicious server can send can send a "literal" byte count, which is automatically read by the client's receiver thread. The response reader immediately allocates memory for the number of bytes indicated by the server response. This should not be an issue when securely connecting to trusted IMAP servers that are well-behaved. It can affect insecure connections and buggy, untrusted, or compromised servers (for example, connecting to a user supplied hostname). Details The IMAP protocol allows "literal" strings to be sent in responses, prefixed with their size in curly braces (e.g. `{1234567890}\r\n`). When `Net::IMAP` receives a response containing a literal string, it calls `IO#read` with that size. When called with a size, `IO#read` immediately allocates memory to buffer the entire string before processing continues. The server does not need to send any more data. There is no limit on the size of literals that will be accepted. Fix Upgrade Users should upgrade to `net-imap` 0.5.7 or later. A configurable `max_response_size` limit has been added to `Net::IMAP`'s response reader. The `max_response_size` limit has also been backported to `net-imap` 0.2.5, 0.3.9, and 0.4.20. To set a global value for `max_response_size`, users must upgrade to `net-imap` ~> 0.4.20, or > 0.5.7. Configuration To avoid backward compatibility issues for secure connections to trusted well-behaved servers, the default `max_response_size` for `net-imap` 0.5.7 is _very high_ (512MiB), and the default `max_response_size` for `net-imap` ~> 0.4.20, ~> 0.3.9, and 0.2.5 is `nil` (unlimited). When connecting to untrusted servers or using insecure connections, a much lower `max_response_size` should be used. ```ruby Set the global max_response_size (only ~> v0.4.20, > 0.5.7) Net::IMAP.config.max_response_size = 256 ").first.message(offset:) } imap.max_response_size = 16 << 20 # 16 KiB imap.noop # flush currently waiting read ``` References • PR to introduce max_response_size: https://github.com/ruby/net-imap/pull/444 • Specific commit: 0ae8576c1 - lib/net/imap/response_reader.rb • Backport to 0.4: https://github.com/ruby/net-imap/pull/445 • Backport to 0.3: https://github.com/ruby/net-imap/pull/446 • Backport to 0.2: https://github.com/ruby/net-imap/pull/447

Related

Alias · CVE (1)

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

Weakness · CWE (4)

  • CWE-400 Uncontrolled Resource Consumption weakness
  • CWE-405 Asymmetric Resource Consumption (Amplification) weakness
  • CWE-770 Allocation of Resources Without Limits or Throttling weakness
  • CWE-789 Memory Allocation with Excessive Size Value weakness

References