Start Debugging

.NET 10.0.7 が ASP.NET Core Data Protection の CVE-2026-40372 を修正するために out-of-band で出荷

Microsoft.AspNetCore.DataProtection 10.0.0 から 10.0.6 の HMAC 検証不具合は攻撃者に ciphertext の偽造を許します。.NET 10.0.7 は必須の修正です。

Microsoft は 今日 .NET 10.0.7 を out-of-band で出荷しました。これは CVE-2026-40372 にパッチを当てるためで、Microsoft.AspNetCore.DataProtection の elevation-of-privilege バグは 10.0.0 から 10.0.6 までのあらゆる 10.0.x リリースに影響します。10.0 LTS ラインで ASP.NET Core を運用しているなら、これは「Patch Tuesday を待つ」アップデートではありません。Antiforgery トークン、auth cookie、TempData、IDataProtector 経由でルートされるすべてのものがこのコンポーネントの上に乗っているので、爆発半径は本番の ASP.NET Core アプリのほとんどを覆います。

HMAC が間違ったバイトで計算された経緯

ASP.NET Core Data Protection は認証付き暗号を使っています: ciphertext は HMAC 検証タグを運び、framework は毎回の Unprotect 呼び出しでチェックします。ManagedAuthenticatedEncryptor のマネージド実装は、そのタグを payload の間違ったスライス上で計算し、次に計算されたハッシュを破棄していました。つまり検証ステップは実際には攻撃者が制御するバイトを検証していませんでした。これは構築の integrity 約束を破り、偽造されたトークンが本物として受け入れられる扉を開きます。

この回帰は、10.0.6 servicing リリースの別個の breaking change と並んで混入しました。ユーザーは 10.0.5 以前で protect されたデータを復号しようとすると CryptographicException: The payload was invalid. に当たり、エラーは ManagedAuthenticatedEncryptor.CalculateAndValidateMac の内部で浮上していました。チームが aspnetcore#66335 で追跡されている 復号回帰を追っている間に、より深い HMAC バグを見つけた、というわけで 5 月の servicing に巻き込むのではなく out-of-band リリースになりました。

2 層の爆発半径

Data Protection はクライアントに不透明な state を round-trip する必要がある framework サービスのほぼすべてに配線されています:

// Antiforgery, auth cookies, TempData, BearerToken, OpenIdConnect state,
// and your own IDataProtector consumers all flow through the same pipeline.
builder.Services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(@"/var/keys"))
    .ProtectKeysWithCertificate(cert);

public class TokenService(IDataProtectionProvider provider)
{
    private readonly IDataProtector _protector =
        provider.CreateProtector("TokenService.v1");

    public string Protect(string userId) => _protector.Protect(userId);
    public string Unprotect(string token) => _protector.Unprotect(token); // trusts the MAC
}

10.0.0 から 10.0.6 では Unprotect が弱い輪です。作られた payload が検証チェックをパスしえたのは、encryptor がハッシュしていると主張するバイトをハッシュしていなかったからです。10.0.6 の復号回帰と組み合わさって、オペレーターは壊れたアプリか脆弱なアプリかの選択を迫られていました。10.0.7 はその選択を取り除きます。

タブを閉じる前にすべきこと

ランタイムとパッケージを一緒に更新します。ランタイムは in-box の encryptor を運び、NuGet パッケージは直接参照するアプリのための契約を運びます。

# 1. Install the 10.0.7 SDK or runtime from the download page,
#    then verify:
dotnet --info

# 2. Bump the package if your project pins it explicitly:
dotnet add package Microsoft.AspNetCore.DataProtection --version 10.0.7

# 3. Rebuild and redeploy. Existing key rings stay valid; this fix
#    does not force a key rotation.

いくつかの運用上のメモ。10.0.6 をデプロイしてユーザーが CryptographicException: The payload was invalid. に当たり始めていた場合、10.0.7 は 10.0.5 以前が書いた ciphertext との互換性を復元するので、復号回帰も同時にアンブロックされます。Framework-dependent なアプリはホストランタイムが更新されたときに修正を拾いますが、self-contained または AOT publish されたアプリは 10.0.7 に対する rebuild が必要です。9.0.x や 8.0.x にいるなら、この CVE の影響を受けませんが、2026 年 4 月 servicing サイクル はそれでも適用されます。

.NET の out-of-band リリースは珍しいです。これは昨秋の request-smuggling バグ CVE-2025-55315 よりもスコープが狭いです。攻撃には攻撃者の影響下にある入力に対して Unprotect を呼ぶコードが必要だからです。それでもそれは本質的にあらゆる authenticated ASP.NET Core アプリを記述します。今日パッチしてください。

< 戻る