觀點 · 資訊分享
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 有些指令會把字串參數原封不動送給信箱伺服器,若內容來自使用者又含換行,就能夾帶額外指令;專案 5 月 4 日已公告,CVE 5 月 9 日公開,請升級。

先用白話講:指令注入是什麼?
想像你請外送員去店裡拿一份餐點,並在紙條上寫「幫我買 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 日就已公告。
該怎麼做
- 升級 net-imap 到對應系列的修補版本
- 檢查程式裡有沒有把使用者輸入拼進 search、fetch、store、setquota 的字串參數
- 輸入端驗證格式,拒絕包含換行字元的內容(以上第 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 等指令的字串參數是由使用者輸入拼出來的,風險最高。先升級到修補版本,再把使用者輸入改成經過驗證的格式,拒絕包含換行的內容。
接著讀
全部觀點 →Ruby 修正正規表示式漏洞:GitLab 4 個遠端執行 CVE 的根源,有編譯使用者輸入的程式要升級Ruby 在 10 月 23 日釋出 4.0.9、3.4.12、3.3.13,修正 GitLab 發現的正規表示式引擎記憶體錯誤。這些錯誤能讓人在 GitLab 伺服器上遠端執行程式,GitLab 已公布 4 個 CVE,最高 CVSS 10.0。閱讀 →AWS AgentCore SDK 的套件安裝功能有指令注入漏洞:1.18.1 以前要升級AWS 7/23 發布安全公告 2026-065-AWS:Bedrock AgentCore Python SDK 的 install_packages() 沒處理好參數分隔字元,通過驗證的使用者可能在 Code Interpreter 沙盒裡執行任意指令。請升級到 1.18.1。閱讀 →Cloudflare 為 Brotli 漏洞緊急上架 WAF 規則:預設只記錄不攔截,上線前先檢查你的覆寫設定Brotli 壓縮函式庫爆出 CVE-2026-111497 後,Cloudflare 在 10 月 25 日為 Managed Ruleset 緊急加了兩條規則,預設只記錄、不攔截。如果你曾把整組規則改成封鎖,新規則上線就會直接擋下符合的請求。閱讀 →