觀點 · 資訊分享

ASP.NET Core DataProtection 爆 9.1 分漏洞:登入 cookie 可能被偽造,升 10.0.7 還要評估換金鑰環

微軟公布 CVE-2026-40372:Microsoft.AspNetCore.DataProtection 10.0.0 到 10.0.6 在特定環境下,攻擊者可能偽造登入 cookie。修正版是 10.0.7,但官方提醒升版不等於結束,已簽發的憑證還要檢查。

發布
2026-04-22
篇幅
約 6 分鐘 · 2,815 字
結構
8 節 + 4 題常見問題
標籤
#ASP.NET Core#DataProtection#CVE-2026-40372#.NET 10
ASP.NET Core DataProtection 爆 9.1 分漏洞:登入 cookie 可能被偽造,升 10.0.7 還要評估換金鑰環

一句話看懂:ASP.NET Core 的 Microsoft.AspNetCore.DataProtection 10.0.0 到 10.0.6 有個 9.1 分漏洞,在特定環境下攻擊者可能偽造登入 cookie;升到 10.0.7 之後,官方還要求評估是否輪替金鑰環。

DataProtection 漏洞:升版還要換金鑰環資訊圖卡:10.0.0~10.0.6 登入 cookie 可能被偽造,升級後要評估換金鑰環

先用白話講:DataProtection 是什麼?

ASP.NET Core 網站有個內建元件叫 DataProtection,負責把登入 cookie、防偽造 token(antiforgery)、重設密碼連結這類東西加密,再蓋上一個「防偽章」(簽章,技術上是 HMAC)。

像寄掛號信:信封要封好,還要蓋只有你才有的騎縫章。伺服器收到信,先驗章,章對才相信裡面的內容。

這次出問題的就是「驗章」那一步。官方說,被偽造的內容帶的防偽章欄位全是 0,在受影響的環境下卻可能被當成真的。

發生什麼事

  • 微軟在 dotnet/announcements 發布安全公告,公告記載的日期是 2026 年 4 月 21 日(台灣時間約 4 月 22 日凌晨)
  • 編號 CVE-2026-40372,類型是權限提升(Elevation of Privilege),CVSS 3.1 分數 9.1,嚴重度 Important
  • 向量是 AV:N/AC:L/PR:N/UI:N:從網路就能打、難度低、不需要先登入、也不需要使用者配合
  • 受影響:Microsoft.AspNetCore.DataProtection 10.0.0 到 10.0.6;修正版:10.0.7
  • 後果:攻擊者可能偽造驗證 cookie,也可能解密部分受保護的內容

更麻煩的是後續效應。官方說,如果攻擊者用偽造身分登入成高權限使用者,可能誘使網站簽發出合法簽章的憑證,例如刷新 session、API Key、重設密碼連結。這些憑證在升級到 10.0.7 後依然有效,除非輪替 DataProtection 的金鑰環。

後續:GitHub 的安全公告 GHSA-9mv3-2cwr-p262 在 2026 年 4 月 23 日才公開;NVD 的 CVE 紀錄發布時間則在 2026 年 4 月 21 日。

我有沒有中?

不是用了 10.0 就一定中。公告把條件拆得很細:

情境 是否受影響
參考 10.0.6,實際載入的是 NuGet 那份,且跑在 Linux、macOS 等非 Windows 系統 受影響(官方列為主要情境)
參考 10.0.0 到 10.0.6,但專案不是 net10.0(例如 net8.0、net9.0),建置時用到 net462 或 netstandard2.0 的版本 受影響,不分作業系統(次要情境,官方認為數量少很多)
主要情境,但跑在 Windows 不受影響
net10.0 框架相依部署,且主機上 ASP.NET Core 共享框架版本不低於套件版本 不受影響(共享框架 10.0.6 搭配套件 10.0.6 安全;共享框架 10.0.5 搭配套件 10.0.6 則不安全)
用的是 8.0.x 或 9.0.x 版套件 不受影響

另外公告提醒,套件可能是間接參考進來的,例如 .StackExchangeRedis、.EntityFrameworkCore、.AzureKeyVault、.AzureStorage 這些延伸套件。

該怎麼做

官方列出三個必做、兩個建議:

  1. 升級到 10.0.7 或更新並重新部署:修正後,帶著全 0 防偽章的偽造內容會被拒絕
  2. 輪替金鑰環:如果受影響的站台在這段期間對網際網路開放,要把金鑰環撤銷,讓攻擊者可能拿到的合法簽章憑證失效。代價是所有使用者都要重新登入,antiforgery token 也會重新簽發。若能確定哪些金鑰是在受影響期間使用的,也可以只撤銷那幾把
  3. 盤點長效憑證:金鑰輪替擋不到已經存進資料庫的東西,包括 API Key、refresh token、access token,以及還沒過期的重設密碼與信箱驗證連結,要在應用程式層自己作廢。如果你的網站不會經由登入後的端點簽發這類長效物件,只輪替金鑰環就夠了
  4. (建議)檢查有沒有把長效機密(連線字串、第三方 API Key)放進 Protect 的輸出裡;有的話,視為可能外洩,到來源端換掉
  5. (建議)查伺服器日誌:這類攻擊每還原一個位元組都要送很多請求,所以會看到針對某個需驗證端點、cookie 或查詢參數不斷變動的大量請求

給開發者的技術細節

我自己的做法(不是公告內容):先在方案根目錄列出所有相依,包含間接參考:

dotnet list package --include-transitive

找 Microsoft.AspNetCore.DataProtection 開頭的套件,確認版本是否落在 10.0.0 到 10.0.6。再看部署環境是 Linux 容器還是 Windows,以及執行時的共享框架版本。

官方示範的撤銷作法,是在能存取同一份金鑰環的程式裡跑一次 IKeyManager:

var keyManager = services.GetRequiredService<IKeyManager>();
// 撤銷目前金鑰環內所有金鑰,下次加密時會自動產生新金鑰
keyManager.RevokeAllKeys(DateTimeOffset.UtcNow, "CVE-2026-40372 輪替");

要更精準,可用 RevokeKey(Guid keyId, string reason) 只撤銷受影響期間使用的金鑰。

官方沒有說明的事:是否已有實際被利用的案例;自包含(self-contained)部署算不算受影響;輪替後,以前用 Protect 加密存起來的資料還能不能解開。這些建議先在測試環境確認,不要憑感覺。

我的看法

對接案或維護中小企業網站的人,我覺得這則有三個重點:

  • 先分辨自己是哪一種。多數網站用的是共享框架,只要主機上的執行環境夠新,載入的就是框架那份;真正危險的是套件版本被釘在 10.0.6、但容器映像或主機的執行環境比它舊。映像檔很久沒更新的站台要特別看
  • 升版只是第一步。這類漏洞麻煩在於可能已經簽出合法憑證。對小型網站來說,輪替金鑰環的代價多半是「大家重新登入一次」,比起被冒充管理員,這個成本我覺得可以接受
  • 向客戶說明時別只講版本號。要一併講清楚:升級日期、是否輪替、哪些憑證被作廢,這樣對方才知道事情處理到哪

名詞小辭典

  • DataProtection:ASP.NET Core 內建的加密與簽章元件,登入 cookie 等資料靠它保護
  • HMAC:用金鑰算出來的防偽章,用來確認內容沒被改過
  • 金鑰環(key ring):DataProtection 用來加密與簽章的一組金鑰,輪替它等於換鎖
  • 權限提升(Elevation of Privilege):原本沒資格的人,取得更高的權限

資料來源

常見問題

我的專案用 .NET 8 或 .NET 9,需要處理嗎?
依公告,使用 8.0.x 或 9.0.x 版本的 DataProtection 套件不受影響,因為有問題的程式碼是 10.0 開發期間才加入,沒有回移到舊版。不過要小心「專案不是 net10.0,卻裝了 10.0 版套件」的情況,公告把它列為次要受影響情境。
升到 10.0.7 就沒事了嗎?
不一定。官方說明,攻擊者若在受影響期間偽造身分登入,可能讓網站簽發出合法簽章的憑證,這些憑證升版後仍然有效,除非輪替金鑰環。所以升版之後,還要評估輪替金鑰環,並盤點 API Key、refresh token、重設密碼連結等長效憑證。
輪替金鑰環會有什麼副作用?
公告只明說:所有使用者都要重新登入,antiforgery token 會重新簽發。其他用 Protect 加密存放的資料會不會受影響,公告沒有說明,建議先在測試環境驗證。
官方有說已經被實際攻擊了嗎?
官方公告沒有說明是否已有實際被利用的案例。公告只提供了判斷方向:檢查日誌裡針對需驗證端點的異常大量請求。
LINE