GitHub Advisoryadvisory · RubyGems
GHSA-j3g3-5qv5-52mj net-imap rubygem vulnerable to possible DoS by memory exhaustion
MEDIUM
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
References
- https://github.com/ruby/net-imap/security/advisories/GHSA-j3g3-5qv5-52mj web
- https://nvd.nist.gov/vuln/detail/CVE-2025-43857 advisory
- https://github.com/ruby/net-imap/pull/442 web
- https://github.com/ruby/net-imap/pull/444 web
- https://github.com/ruby/net-imap/pull/444/commits/0ae8576c1a90bcd9573f81bdad4b4b824642d105#diff-53721cb4d9c3fb86b95cc8476ca2df90968ad8c481645220c607034399151462 web
- https://github.com/ruby/net-imap/pull/445 web
- https://github.com/ruby/net-imap/pull/446 web
- https://github.com/ruby/net-imap/pull/447 web
- https://github.com/ruby/net-imap package
- https://github.com/rubysec/ruby-advisory-db/blob/master/gems/net-imap/CVE-2025-43857.yml web