Rust 修復了 std 庫中 Windows 10/11 的關鍵命令注入缺陷

Rust 修復了 std 庫中 Windows 10/11 的關鍵命令注入缺陷

本文最初發表于 The register 網站,由 InfoQ 中文站翻譯分享。

rust 的安全專家們解決了一個可能導致 windows 機器上產生惡意命令注入的關鍵漏洞,建議程序員升級他們的 Rust 版本。

該漏洞的 CVSS 嚴重性評分為 10 分(滿分即為 10 分),通過 CVE-2024-24576 編號進行跟蹤。它會影響 Rust 標準庫,當使用庫的 Command API 在 Windows 上調用批處理文件時,由于參數轉義不正確,具體來說就是 std::process::Command。

Rust 安全響應工作組(Rust Security Response Working Group)的 Pietro Albini 表示:“如果攻擊者能夠控制傳遞給生成進程的參數,他們就可以繞過轉義執行任意 shell 命令。”他負責撰寫了該安全通知。

報告這一問題的東京 Flatt Security 公司的研究人員指出,主要問題似乎源于 Windows 的 cmd.exe 程序,該程序有更復雜的解析規則,沒有它的話,Windows 就無法執行批處理文件。

Albini 解釋說,Windows 的命令提示符有自己的參數分割邏輯,與標準庫提供的常規 Command::arg 和 Command::args API 不同,這些 API 通常允許將不可信的輸入安全地傳遞給生成的進程。

Albini 說,“在 Windows 上,該實現比其他平臺更復雜,因為 Windows API 只提供了一個包含所有參數的字符串給生成的進程,并且由生成的進程負責拆分這些參數。”大多數程序員使用標準 C 運行時的 argv,在實踐中,這基本上會以一種一致的方式拆分參數。

“但不幸的是,據報道,我們的轉義邏輯不完備,可能傳遞惡意的參數,導致任意 shell 均可執行。”

Chris Denton 是 Rust std 庫的貢獻者,他開發了解決這個問題的修復程序,包括改進轉義代碼,并確保 Command API 在無法安全轉義參數時返回 InvalidInput 錯誤。

Albini 說,由于微軟命令提示符的復雜性,團隊無法確定在每種情況下都能安全轉義參數的修復方法。

“如果你自己實現轉義或只處理可信的輸入,在 Windows 上也可以使用 CommandExt::raw_arg 方法來繞過標準庫的轉義邏輯。”

Rust 在 4 月 9 日發布了 1.77.2 版本,并表示之前的每個版本都會受到該安全漏洞的影響。

這門語言得到了粉絲們的熱愛,經常在 Stack overflow 的排名中名列前茅,因為開發人員發現在工作中使用 Rust 非常令人愉悅,谷歌員工也稱贊了它在生產力方面的優勢。該語言是國家安全機構敦促開發人員采用的較新的內存安全語言之一,以取代 C 和 c++ 等舊技術。

BatBadBut

RyotaK 是報告該漏洞的研究人員,他們將其稱為 BatBadBut,該名稱來源于該漏洞與批處理相關及其嚴重程度,即“很嚴重,但并不是最糟糕的”,該問題比 Rust 本身影響的技術更多。

erlang、Go、pythonruby 也受到了影響,它們已經更新了各自的文檔頁面,以提高對這個問題的重視程度。

Node.JSphp 現在都在編寫補丁,而 Rust 和 Haskell 已經推出了修復程序。根據這名研究人員的報告,Java 同樣受到了影響,但它的團隊沒有計劃解決這個問題。

RyotaK 還指出,用戶不應該僅僅依靠 CVSS 評級就得出結論,因為問題的嚴重性將取決于每個應用程序,應該根據具體情況重新考量和評估。

聲明:本文為 InfoQ 翻譯,未經許可禁止轉載。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享