資安雷達 2026 年 6 月 29 日

2026-06-29 — Vim PHP 補全指令注入漏洞、FreeHSM C ECDSA 簽章驗證失效

primary=https://www.openwall.com/lists/oss-security/2026/06/28/1 primary=https://github.com/vim/vim/security/advisories/GHSA-fh26-8f79-wj97 primary=https://github.com/vim/vim/commit/43afc581a37a35762dd0ef292f038b9dc5680a24 primary=https://www.openwall.com/lists/oss-security/2026/06/28/2 primary=https://github.com/afchine1337/freehsm-c

Vim PHP 自動補全指令注入漏洞,預設配置即可觸發任意程式碼執行

GitHub Security Advisory (GHSA-fh26-8f79-wj97) · 2026-06-28

Vim 的 PHP omni-completion(全域補全)功能存在指令注入漏洞,攻擊者可藉由精心製作的 PHP 原始碼檔案,在受害者觸發補全動作時執行任意作業系統指令。漏洞影響 Vim 9.2.0736 版本以前的所有版本,已在 v9.2.0736 修補提交 中修復。漏洞由安全研究員 Christian Brabandt 於 2026 年 6 月 28 日透過 oss-security 郵件清單公開揭露,整體嚴重程度評為 Medium(需使用者主動互動)。

漏洞機制

問題根源在 runtime/autoload/phpcomplete.vim 腳本的 phpcomplete#GetClassContentsStructure() 函式。該函式在建構搜尋指令時,將 PHP 類別名稱(class name)直接字串拼接進單引號包覆的搜尋模式,卻未對單引號字元進行跳脫處理。只要類別名稱中包含一個單引號('),就能提早結束搜尋字串,接著以豎線(|)作為 Vim Ex 指令分隔符,插入任意 Ex 指令——包括執行 shell 指令的 :! 命令。

攻擊路徑為:攻擊者建立一個 PHP 檔案,其中定義含有單引號與 Ex 指令的惡意類別名稱;受害者以預設設定開啟該檔案,並透過 Ctrl-X Ctrl-O 觸發 PHP 補全,漏洞即被引爆。此類攻擊屬於「由受害者開啟惡意檔案」模式,在程式碼審查、開源倉庫協作等場景中具有可信的社交工程路徑。漏洞分類為 CWE-94(不當中立化特殊元素導致程式碼注入)及 CWE-829(引入不受信任控制領域的功能)。

受影響版本

  • Vim 9.2.0735 及所有更早版本
  • 需同時滿足以下條件方可利用:
    • 已啟用 filetype plugin(Vim 預設啟用)
    • 使用者於 PHP 檔案中手動觸發 omni-completion(Ctrl-X Ctrl-O
    • 開啟的 PHP 檔案含有惡意類別名稱
  • NeoVim 與其他 Vim 衍生版本是否受影響,取決於其是否沿用相同的 phpcomplete.vim 執行時腳本

修補與緩解

  • 升級至 Vim v9.2.0736 或更新版本(修補提交已合併主線)
  • 若暫時無法升級,可停用 PHP filetype plugin:在 vimrc 中加入 autocmd FileType php setlocal omnifunc=
  • 避免在不明來源的 PHP 專案中使用 omni-completion
  • 使用套件管理器(如 vim-plug、lazy.nvim)更新 Vim 至最新版本

修補方式為在將類別名稱插入搜尋模式前,先以 escape() 函式對單引號等特殊字元進行跳脫。此修補屬於單行輸入清理補丁,風險極低,各 Linux 發行版的 Vim 套件更新預計在近期跟進。

原始來源:oss-security 郵件清單 · GHSA-fh26-8f79-wj97 · 修補提交 43afc581


FreeHSM C 加密模組 ECDSA 簽章對外驗證失效,v1.1.0–v1.2.1 所有版本受影響

oss-security 郵件清單 · 2026-06-28

開源 PKCS#11 加密模組 FreeHSM C 在 v1.1.0 至 v1.2.1 版本中,使用 CKM_ECDSA 原始機制(raw mechanism)產生的 ECDSA 簽章無法被外部驗證程式正確驗證。這批版本共 20 個已簽署發行版本均受影響,漏洞導因於 OpenSSL 3.x API 呼叫方式錯誤,GHSA 最高評級為 HIGH(CVSS 7.5)。修復版本 v1.2.2 已於 2026 年 6 月 27 日發布,v1.3.0 緊隨其後同日上線。

漏洞機制

問題核心在於原始機制簽章路徑呼叫 EVP_DigestSignInit_ex(ctx, &pctx, mdname = NULL, ...) 時,mdname 設為 NULL,觸發 OpenSSL 3.x 預設提供者行為,對傳入資料靜默套用 SHA-256 雜湊後再進行簽章。這直接違反 PKCS#11 規範對 CKM_ECDSA 的要求:該機制應直接對呼叫者提供的摘要(digest)進行簽章,不應再次雜湊。受影響的曲線涵蓋 P-256、P-384、P-521。

模組內部自我驗證之所以全數通過,是因為簽章與驗章路徑採用相同的錯誤邏輯,雙重雜湊相互抵消,製造出一致性假象。外部驗證程式(如 pkcs11-tool、OpenSSL CLI)依 PKCS#11 規範預期得到原始摘要簽章,驗證因此必然失敗。安全研究員 Denis Mingulov 透過 pkcs11-check 工具發現此問題,並於 2026 年 6 月 26 日向維護者 Afchine Madjlessi 揭露。

除簽章互通性缺陷外,另有五個函式(C_CreateObjectC_GetSessionInfoC_GetObjectSizeC_CopyObjectC_SetAttributeValue)雖以 ELF 符號匯出,卻未接入 CK_FUNCTION_LIST 陣列,導致一般 PKCS#11 客戶端呼叫時收到 CKR_FUNCTION_NOT_SUPPORTED,對應 GHSA-6jx9-gh48-5qf6(HIGH)。三份 GitHub Security Advisory 分別對應不同發現:GHSA-xpxx-66pp-pf99(原始機制簽章失效,HIGH)、GHSA-6jx9-gh48-5qf6(v1.2.1 完整性自測缺口,HIGH)、GHSA-wgv9-m9cv-4647(v1.1.0 維護者金鑰洩漏,MEDIUM)。

受影響版本

  • FreeHSM C v1.1.0 至 v1.2.1(含)——共 20 個已發布版本,發布時間區間為 2026 年 6 月 12 日至 6 月 21 日
  • 使用 CKM_ECDSACKM_RSA_PKCS 等原始簽章機制的所有呼叫均受影響
  • 受影響曲線:P-256、P-384、P-521
  • 未受影響:使用明確預雜湊機制如 CKM_ECDSA_SHA256CKM_ECDSA_SHA384CKM_ECDSA_SHA512 的呼叫

修補與緩解

  • 升級至 v1.3.0(2026 年 6 月 27 日,提交 e6d5d21)為優先選擇;最低可接受版本為 v1.2.2(提交 e10586f)
  • v1.2.2 修補內容:以 EVP_PKEY_sign 取代原始機制簽章路徑,並新增 ECDSA P-256/384/521 匯出往返開機 KAT 回歸測試
  • v1.3.0 額外補全 C_CopyObjectC_SetAttributeValueC_WaitForSlotEvent 三個 function-list 接線,開機 KAT 測試向量從 51 增至 62 個
  • 重要:v1.1.0–v1.2.1 產生的簽章無法事後補救,受影響訊息必須使用 v1.2.2 以上版本重新簽署
  • 短期緩解:改用明確的預雜湊機制變體(CKM_ECDSA_SHA256 等)取代 raw CKM_ECDSA

此次揭露採用漸進式修復策略,v1.2.2 在 24 小時內上線,v1.3.0 緊隨其後約 4 小時後發布,完成完整的函式清單接線與擴充的 KAT 覆蓋。維護者同時提供詳細「killer test」重現指令,任何使用者均可用 pkcs11-tool 與 OpenSSL CLI 自行驗證舊版本的失效行為及新版本的修復成效。

原始來源:oss-security 郵件清單 · FreeHSM C GitHub 倉庫


End of article
0
Would love your thoughts, please comment.x
()
x