觀點 · 資訊分享

Ruby Net::IMAP 指令注入 CVE-2026-42257:搜尋與讀信參數可夾帶換行,請升級

Ruby 標準寄信收信函式庫 net-imap 有指令注入問題:search、fetch 等指令的字串參數會原封不動送給信箱伺服器,若內容來自使用者輸入又含換行,就能夾帶額外的 IMAP 指令。專案 5 月 4 日已發公告,CVE 在 5 月 9 日公開。

發布
2026-05-10
篇幅
約 3 分鐘 · 1,409 字
結構
8 節 + 3 題常見問題
標籤
#Ruby#net-imap#CVE-2026-42257#指令注入#IMAP
Ruby Net::IMAP 指令注入 CVE-2026-42257:搜尋與讀信參數可夾帶換行,請升級

一句話看懂:Ruby 的 net-imap 有些指令會把字串參數原封不動送給信箱伺服器,若內容來自使用者又含換行,就能夾帶額外指令;專案 5 月 4 日已公告,CVE 5 月 9 日公開,請升級。

Net::IMAP 指令注入漏洞資訊圖卡:字串參數沒過濾,夾帶換行就能偷塞 IMAP 指令

先用白話講:指令注入是什麼?

想像你請外送員去店裡拿一份餐點,並在紙條上寫「幫我買 A 餐」。如果紙條是別人幫你寫的,他在後面換行偷偷加上「再把收銀機的錢拿走」,而外送員照單全收,就出事了。

net-imap 的狀況是:幾個指令的字串參數沒有檢查換行,換行就是 IMAP 指令的分隔符號。

發生什麼事

依公告說明:

  • Net::IMAP 一般的參數處理是安全的,會依內容編碼成不同格式
  • 但有幾個指令會把特定字串改成「原始資料」,直接寫進連線,不做驗證與編碼
  • 若字串含使用者控制的內容與換行(CRLF),攻擊者就能注入任意 IMAP 指令
指令 被當成原始資料的參數
search、sort、thread 與對應的 uid 版本 條件字串
fetch、uid_fetch 屬性(字串或陣列中的字串)
store、uid_store 屬性字串
setquota 上限值

公告也說,搜尋條件與抓取屬性的設計本來就是「貼近底層」,給進階用法;但 store 與 setquota 不需要這樣處理,使用者通常不會預期它們被原樣送出。

時間線與修補

  • 5 月 4 日:專案發布 GitHub 安全公告(GHSA)
  • 5 月 9 日:CVE-2026-42257 公開
  • 修補版本:0.4.24、0.5.14、0.6.4(對應 0.4、0.5、0.6 三個系列)

這不是當天才揭露的新漏洞,專案早在 5 月 4 日就已公告。

該怎麼做

  1. 升級 net-imap 到對應系列的修補版本
  2. 檢查程式裡有沒有把使用者輸入拼進 search、fetch、store、setquota 的字串參數
  3. 輸入端驗證格式,拒絕包含換行字元的內容(以上第 2、3 點是我的通用建議,不是公告的步驟)

給開發者的技術細節

  • CVE.org 記錄的 CNA 基本分數是 5.8,NVD 資料列為 9.8;分數差很多,我的理解是它取決於攻擊情境:只有「使用者輸入真的流到這些參數」時才有風險
  • 能被注入的是 IMAP 指令,影響取決於信箱伺服器權限與連線的帳號,公告沒有列出更具體的後果

我的看法

接案時常見的情境是:客戶想在網站裡做「搜尋信件」或「讀取收件匣」的功能,開發者很自然就把搜尋框內容直接丟進 IMAP 的搜尋條件。這次的漏洞就是提醒:只要是把使用者輸入送進別的系統(資料庫、信箱、Shell)的地方,都要當成不可信資料處理。

如果你的專案有用 net-imap,現在先升級;沒有用到也可以把這個案例當成檢查清單,看看自己有沒有類似的「直接拼字串」寫法。

名詞小辭典

  • IMAP:讀取信箱的通訊協定。
  • 指令注入:把惡意指令混進正常輸入,讓系統照做。
  • CRLF:換行符號,在許多文字協定中是指令的分隔。
  • CNA:負責分配與公告該 CVE 的授權機構。

資料來源

常見問題

IMAP 是什麼?
一種讀取信箱的通訊協定,Gmail、Outlook 與自架信箱都支援。程式用它來列出、搜尋、讀取信件。
什麼叫「指令注入」?
程式把使用者輸入直接當成指令的一部分送出,輸入者就能用換行等特殊字元「多塞」指令。這次是 IMAP 指令,所以攻擊者可能讓信箱伺服器多執行一個動作。
我該怎麼檢查自己有沒有風險?
搜尋專案裡用到 net-imap 的地方:如果 search、fetch、store 等指令的字串參數是由使用者輸入拼出來的,風險最高。先升級到修補版本,再把使用者輸入改成經過驗證的格式,拒絕包含換行的內容。
LINE