.NET 10.0.7 OOBセキュリティ更新のポイント:CVE-2026-40372対応手順

2026年4月21日にMicrosoftが公開した .NET 10.0.7 out-of-band security update は、通常の月例更新を待たずに提供された緊急性の高いセキュリティ更新です。結論から言うと、Microsoft.AspNetCore.DataProtection を使う .NET 10 系アプリ、とくに 10.0.0〜10.0.6 を参照している環境は、10.0.7 への更新と影響調査を優先してください。Microsoftは、この更新が Microsoft.AspNetCore.DataProtection に導入されたセキュリティ問題に対処するOOB更新だと説明しています。(Microsoft for Developers)

今回のポイントは「パッケージを上げれば終わり」と考えないことです。影響を受けたアプリがインターネットに公開されていた場合、Data Protectionキーリングのローテーション、認証Cookie・リフレッシュトークン・APIキー・パスワードリセットリンクなどの監査まで含めて対応を設計する必要があります。Microsoftのアドバイザリでも、影響環境では Microsoft.AspNetCore.DataProtection を 10.0.7 以降へ更新し、必要に応じてData Protectionキーリングをローテーションすることが示されています。(GitHub)

目次

.NET 10.0.7 out-of-band security updateでまず押さえるべき更新ポイント

.NET 10.0.7は、2026年4月21日に公開された .NET 10 系の更新です。Microsoftのリリースノートでは、.NET 10.0.7にセキュリティ修正が含まれ、CVE-2026-40372 に対応していることが明記されています。(GitHub)

確認項目内容
公開日2026年4月21日
更新種別Out-of-band、OOBのセキュリティ更新
主な対象ASP.NET Core Data Protectionを利用する .NET 10 系アプリ
修正対象CVE-2026-40372
影響するパッケージMicrosoft.AspNetCore.DataProtection
影響バージョン主に 10.0.0〜10.0.6
推奨対応10.0.7 以降へ更新、再ビルド、再デプロイ、影響環境ではキーリングローテーションとトークン監査

Microsoftのブログでは、.NET 10.0.6のPatch Tuesdayリリース後、一部顧客から復号処理の失敗が報告され、その調査の中で脆弱性も確認されたと説明されています。問題は、管理対象の認証付き暗号化処理がHMAC検証タグを誤ったペイロードのバイト列に対して計算し、その計算結果を破棄する可能性がある点にあります。これにより、権限昇格につながる可能性があるとされています。(Microsoft for Developers)

なぜData Protectionの脆弱性は重要なのか

ASP.NET Core Data Protectionは、Webアプリで信頼済みの状態を安全に保持し、後で復元するための暗号化基盤です。Microsoft Learnでは、Data Protectionが認証CookieやBearer tokenのように、真正性・完全性・改ざん防止が必要なデータを扱う代表例として説明されています。(Microsoft Learn)

実務上、Data Protectionは次のような領域に関わります。

  • 認証Cookie
  • CSRF対策のAntiforgery token
  • TempData
  • OpenID Connectのstateパラメーター
  • アプリ独自の IDataProtector.Protect 出力
  • Redis、Azure Storage、Entity Framework Coreなどを使ったData Protectionキー管理

今回の脆弱性では、破損した検証処理により、Data Protectionの真正性チェックを通過するペイロードの偽造や、保護済みペイロードの復号につながる可能性があるとリリースノートで説明されています。対象になり得るものとして、認証Cookie、Antiforgery token、TempData、OIDC stateなどが挙げられています。(GitHub)

これは、単なるアプリケーションエラーではありません。Identityチームにとっては「不正な認証状態が作られた可能性」、Security Adminにとっては「攻撃期間と影響範囲の特定」、Complianceチームにとっては「修正適用の証跡と追加措置の説明」が必要になる更新です。

影響を受ける可能性が高い環境

Microsoftのアドバイザリでは、影響を受ける条件がかなり具体的に整理されています。とくに優先して確認すべきなのは、Microsoft.AspNetCore.DataProtection の 10.0.6 を参照し、非Windows環境で実行されている .NET 10 アプリです。(GitHub)

判定確認すべき環境実務での見方
優先確認Microsoft.AspNetCore.DataProtection 10.0.6を直接または推移的に参照している .NET 10 アプリLinux、macOS、コンテナ、Kubernetes上のASP.NET Coreアプリを優先して棚卸しする
優先確認Microsoft.AspNetCore.DataProtection.StackExchangeRedis、.EntityFrameworkCore、.AzureKeyVault、.AzureStorage、.Redis など経由でData Protectionを利用しているアプリ直接参照がなくても、推移的依存関係として読み込まれていないか確認する
二次確認net462 または netstandard2.0 の資産として Microsoft.AspNetCore.DataProtection 10.0.0〜10.0.6を利用しているアプリやライブラリ.NET Frameworkアプリ、netstandard2.0 ライブラリ、古いターゲットフレームワークを持つ共通ライブラリを確認する
原則として対象外Microsoft.AspNetCore.DataProtection 8.0.xまたは9.0.xを使う環境Microsoftのアドバイザリでは、問題のコードパスは10.0開発中に導入され、8.0/9.0のservicing branchにはバックポートされていないと説明されている
原則として対象外対象バージョンのパッケージを参照していない環境ただし、推移的依存関係と実行時にロードされたアセンブリは確認する

注意したいのは、「Windowsだから絶対に関係ない」と短絡しないことです。アドバイザリでは、主要な影響構成ではWindows実行環境は対象外として説明されていますが、net462 や netstandard2.0 の資産を使う二次的な構成では、Windows例外がそのまま当てはまらないケースが示されています。(GitHub)

影響調査の進め方

セキュリティ更新の初動では、まず「どのアプリが影響を受ける可能性があるか」を短時間で切り分ける必要があります。開発チームだけに任せるのではなく、Security Admin、Identityチーム、SRE、Compliance担当が同じリストを見ながら進めると判断が速くなります。

パッケージ参照を確認する

リポジトリ単位では、csproj、Directory.Packages.props、packages.lock.json を確認します。Central Package Managementを使っている場合、個別のプロジェクトファイルではなく Directory.Packages.props にバージョンが集約されていることがあります。

Linux/macOSでは、次のように検索できます。

grep -R "Microsoft.AspNetCore.DataProtection" .

ripgrepを使える環境なら、対象ファイルを絞ると見落としを減らせます。

rg "Microsoft\.AspNetCore\.DataProtection" -g "*.csproj" -g "Directory.Packages.props" -g "packages.lock.json"

Windows PowerShellでは、次のように確認できます。

Get-ChildItem -Recurse -Include *.csproj,Directory.Packages.props,packages.lock.json |
  Select-String "Microsoft.AspNetCore.DataProtection"

直接参照がなくても、推移的依存関係で読み込まれている可能性があります。アプリのプロジェクトディレクトリで次のコマンドを実行します。

dotnet list package --include-transitive

Data Protection関連だけを絞り込む場合は、Linux/macOSなら次のように確認できます。

dotnet list package --include-transitive | grep -i DataProtection

Windowsでは次のように確認できます。

dotnet list package --include-transitive | findstr /I DataProtection

実行環境のバージョンを確認する

Microsoftは、.NET 10.0.7 SDKまたはRuntimeをインストールし、dotnet --info で10.0.7であることを確認したうえで、更新済みイメージやパッケージを使って再ビルド・再デプロイする手順を示しています。(Microsoft for Developers)

dotnet --info

CI/CDのビルドエージェントだけを更新しても、本番サーバーやコンテナイメージ内のランタイムが古いままでは意味がありません。次の3か所を分けて確認してください。

確認場所見るべき内容よくある見落とし
開発・ビルド環境SDKのバージョンビルドエージェントだけ10.0.7になり、本番ランタイムが古い
本番ホストRuntime、ASP.NET Core RuntimeのバージョンホストOS上のランタイム更新が未実施
コンテナベースイメージ、アプリイメージ内のランタイムDockerfileやCIキャッシュが古いイメージを使い続ける

.NET 10.0のダウンロードページでは、.NET Runtime 10.0.7、ASP.NET Core Runtime 10.0.7、.NET Desktop Runtime 10.0.7が含まれることが確認できます。SDKとしては10.0.203や10.0.107が案内されており、これらには10.0.7のランタイムが含まれます。(Microsoft)

10.0.7への更新手順

基本方針は、対象パッケージ、SDK/Runtime、コンテナイメージを10.0.7系へそろえ、再ビルドしてデプロイすることです。

NuGetパッケージを更新する

Microsoft.AspNetCore.DataProtection を直接参照している場合は、10.0.7 へ更新します。NuGet Galleryでは、次の .NET CLI コマンドやPackageReference例が案内されています。([NuGet][6])

dotnet add package Microsoft.AspNetCore.DataProtection --version 10.0.7

プロジェクトファイルで管理している場合は、次のように更新します。

<PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="10.0.7" />

Central Package Managementを使っている場合は、Directory.Packages.props 側を更新します。

<PackageVersion Include="Microsoft.AspNetCore.DataProtection" Version="10.0.7" />

Data Protection拡張パッケージを使っている場合は、関連パッケージも同じ更新単位で確認してください。たとえば、Redis、Entity Framework Core、Azure Storage、Azure Key Vaultを使ってキー管理を行っている場合、Microsoft.AspNetCore.DataProtection.* 系のパッケージが複数含まれることがあります。

SDKとRuntimeを更新する

アプリをビルドする環境ではSDKを、アプリを実行する環境ではRuntimeまたはASP.NET Core Runtimeを更新します。Windows Server上でIISホスティングを行っている場合は、ASP.NET Core Hosting Bundleの更新も確認対象です。

更新後は、対象サーバーまたはコンテナ内で次を確認します。

dotnet --info

アプリが自己完結型デプロイ、framework-dependentデプロイ、コンテナデプロイのどれなのかによって確認ポイントが変わります。

デプロイ方式更新対象確認ポイント
framework-dependentホスト側Runtime、ASP.NET Core Runtime本番ホストの dotnet --info が10.0.7系を示すか
self-containedアプリ成果物に含まれるRuntime再発行して古いRuntimeを含んでいないか
コンテナベースイメージ、アプリイメージdocker pull だけでなく、アプリイメージを再ビルドしたか
Kubernetesコンテナイメージ、Pod再作成古いPodが残っていないか、digest固定で古いイメージを使っていないか

更新後に動作確認する

今回の更新では、認証・復号・Data Protection周辺の挙動確認が重要です。単にアプリが起動するかだけでは不十分です。

最低限、次の観点をテストしてください。

テスト項目確認内容
ログイン通常ユーザー、管理者ユーザーがログインできるか
ログアウトセッション破棄後に再アクセスできないか
Cookie認証既存Cookieの扱い、更新後の再ログイン挙動
OIDC/OAuth外部IdPログイン、state検証、リダイレクト後の認証
AntiforgeryPOSTフォーム、管理画面、APIでCSRF対策が正常に動くか
TempDataリダイレクト後メッセージなどが壊れていないか
スケールアウト複数インスタンス間でCookie復号やキー共有に問題がないか

とくにWebファームや複数Pod構成では、Data Protectionキーリングの共有設定が重要です。Microsoft Learnでは、Webファームの既定構成では各ノードに固有のキーリングが保存され、別ノードで暗号化されたデータを復号できないため、既定構成は一般にWebファームに適さないと説明されています。(Microsoft Learn)

影響環境ではキーリングローテーションを検討する

今回の対応で重要なのは、10.0.7 への更新だけでは一部リスクが残る可能性がある点です。Microsoftのアドバイザリでは、攻撃者が脆弱な期間に偽造ペイロードを使って特権ユーザーとして認証し、アプリに正規署名済みトークンを発行させていた場合、それらのトークンは 10.0.7 へ更新した後もData Protectionキーリングをローテーションしない限り有効なまま残る可能性があると説明されています。(GitHub)

キーリングローテーションが必要になりやすいケース

状況判断
対象バージョンを使っていたまず影響調査の対象にする
インターネット公開エンドポイントがあったキーリングローテーションを強く検討する
認証CookieやAntiforgery tokenを使っているIdentityチームと影響を確認する
リフレッシュトークン、APIキー、パスワードリセットリンクを発行しているアプリ層での失効・再発行も検討する
社内限定でアクセス制限が強いリスク評価を記録し、必要に応じて限定的な対応にする

キーリングをローテーションすると、既存の認証Cookieや保護済みデータが使えなくなる可能性があります。Microsoftのアドバイザリでも、RevokeAllKeys により既存キーが失効し、新しいキーが次回のprotect操作で自動生成され、ユーザーは再サインインが必要になり、Antiforgery tokenも再発行されると説明されています。(GitHub)

実行例は環境により異なりますが、考え方としては「同じキーリングにアクセスできるアプリまたは管理用処理から、既存キーを失効させる」ことです。

using Microsoft.AspNetCore.DataProtection.KeyManagement;

var keyManager = serviceProvider.GetRequiredService<IKeyManager>();

keyManager.RevokeAllKeys(
    revocationDate: DateTimeOffset.UtcNow,
    reason: "CVE-2026-40372 mitigation");

本番で実行する前に、次の点を必ず確認してください。

  • どのキーリングを対象にするか
  • 複数インスタンスが同じキーリングを参照しているか
  • ユーザーの再ログインが許容される時間帯か
  • 管理者アカウントがロックアウトされないか
  • 古いトークンをアプリ層でどう扱うか
  • 実行ログと変更管理チケットを残すか

Dockerコンテナで運用している場合、Microsoft LearnではData ProtectionキーをDocker volumeまたはAzure Key Vault、Redisなどの外部プロバイダーに永続化することが推奨されています。キーリングの場所を把握せずにローテーションすると、対象外のキーだけを操作したり、逆に想定外の環境へ影響したりする可能性があります。(Microsoft Learn)

トークン・ログ・長期的な資格情報の監査ポイント

10.0.7 へ更新してキーリングをローテーションしても、すべてのリスクが自動的に消えるとは限りません。Microsoftのアドバイザリでは、脆弱な期間に作成されたアプリケーションレベルの長期的な成果物、たとえばAPIキー、リフレッシュトークン、アクセストークン、パスワードリセットリンク、メール確認トークンなどを監査するよう推奨しています。(GitHub)

監査すべき対象

対象確認内容対応例
セッション・リフレッシュトークン脆弱な期間に発行されたものが残っていないか全体失効、ユーザー単位失効、再認証要求
APIキー認証済みリクエスト経由で発行されたキーがないか該当期間のキー再発行、利用ログ確認
パスワードリセットリンク有効期限内のリンクが残っていないか該当期間のリンク無効化
メール確認トークン未使用の確認トークンが残っていないか再発行または無効化
保護済みペイロード内の機密情報IDataProtector.Protect 出力に長期的な秘密情報を入れていないか元のシークレットをローテーション
WebサーバーログCookie、query parameter、state値が大量に変化する高頻度アクセスがないかSIEMで相関分析、IP・User-Agent・対象エンドポイントを確認

アドバイザリでは、保護済みペイロード内にデータベース接続文字列やサードパーティAPIキーなどの長期的なシークレットを格納している場合、それらを潜在的に漏えいしたものとして扱い、各発行元でローテーションすることも推奨されています。(GitHub)

役割別に見る実務対応

今回の更新は、開発チームだけで完結しにくい内容です。セキュリティ、ID管理、監査・コンプライアンスの各担当が、同じ事実に基づいて役割分担する必要があります。

役割まず行うこと残すべき証跡
Security Admin対象アプリの棚卸し、インターネット公開有無、ログ調査方針の決定影響範囲リスト、対応優先度、ログ調査結果
Identityチーム認証Cookie、セッション、OIDC、リフレッシュトークン、パスワードリセットフローの確認失効・再認証・キーリングローテーションの判断記録
Complianceチーム更新適用状況とリスク評価の記録変更管理チケット、適用日時、例外承認、再発防止メモ
開発チームNuGet更新、再ビルド、認証・CSRF・TempDataのテストPR、ビルドログ、テスト結果
SRE/運用チームRuntime、コンテナ、Pod、ホストの更新とロールアウトデプロイログ、dotnet --info、イメージdigest

グローバルにサービスを運用している場合は、地域ごとのメンテナンス時間帯、ログ保持期間、個人情報・セッション情報の扱い、利用者への再ログイン通知も考慮してください。とくにB2B SaaSでは、突然のセッション失効が顧客の監査や業務フローに影響することがあります。

失敗しやすいポイント

NuGetだけ更新してRuntimeを更新していない

Microsoft.AspNetCore.DataProtection を10.0.7へ上げても、実行環境のASP.NET Core Runtimeやコンテナイメージが古いままでは、期待した状態にならないことがあります。ビルド環境、実行環境、コンテナイメージを分けて確認してください。

直接参照だけを見て推移的依存関係を見落とす

Data Protectionは、Redis、Azure Storage、Entity Framework Coreなどの拡張パッケージ経由で使われることがあります。csproj に Microsoft.AspNetCore.DataProtection が直接書かれていなくても、dotnet list package --include-transitive で確認する必要があります。

「更新済み」だけでキーリングを見ない

影響を受けたアプリが外部公開されていた場合、更新後も脆弱な期間に発行された正規署名済みトークンが残る可能性があります。アドバイザリは、影響環境でインターネット公開エンドポイントを提供していた場合、Data Protectionキーリングのローテーションを推奨しています。(GitHub)

キーを削除してしまう

Data Protectionのキーは、単純に削除すればよいものではありません。Microsoft Learnでは、キーを削除すると保護されたデータが永久にアクセス不能になるため、キー削除は推奨されないと説明されています。今回のような対応では、削除ではなく失効・ローテーションの設計として扱うべきです。(Microsoft Learn)

本番ローテーションの影響を周知しない

キーリングローテーションにより、ユーザーの再ログイン、フォーム再送信、Antiforgery token再発行が発生する可能性があります。社内システムならヘルプデスク、外部向けSaaSならカスタマーサポートやステータスページ担当にも事前共有が必要です。

よくある質問

.NET 8や.NET 9のData Protectionも対象ですか?

Microsoftのアドバイザリでは、Microsoft.AspNetCore.DataProtection 8.0.xまたは9.0.xを使う環境は対象外として説明されています。問題のコードパスは10.0開発中に導入され、8.0または9.0のservicing branchにはバックポートされていないとされています。(GitHub)

Windows Server上のASP.NET Coreアプリは対応不要ですか?

主要な影響構成では、Windowsで実行されているアプリは対象外と説明されています。ただし、net462 や netstandard2.0 の資産として Microsoft.AspNetCore.DataProtection 10.0.0〜10.0.6を使う二次的な構成では、Windows例外が当てはまらないケースがあります。Windowsかどうかだけで判断せず、パッケージバージョン、ターゲットフレームワーク、実行時に読み込まれる資産を確認してください。(GitHub)

10.0.7に更新すればキーリングローテーションは不要ですか?

影響を受けておらず、インターネット公開もしていない環境では、更新と確認で十分な場合があります。一方、影響環境で外部公開エンドポイントを運用していた場合は、キーリングローテーションと長期トークンの監査を検討すべきです。アドバイザリでは、脆弱な期間に発行された正規署名済みトークンは、10.0.7へ更新した後もキーリングをローテーションしない限り有効なまま残る可能性があると説明されています。(GitHub)

10.0.6で発生していた復号エラーと今回の脆弱性は関係ありますか?

Microsoftのブログでは、.NET 10.0.6リリース後に一部顧客から復号失敗が報告され、その調査の中で回帰が脆弱性も露出させていることが判明したと説明されています。つまり、復号エラーの修正だけでなく、セキュリティ上の問題に対応する更新として扱う必要があります。(Microsoft for Developers)

まとめ:次に取るべき行動

.NET 10.0.7 out-of-band security updateは、ASP.NET Core Data Protectionを利用するアプリの認証・トークン・暗号化データに関わる重要な更新です。最初にやるべきことは、対象パッケージの有無を確認し、10.0.7 へ更新し、再ビルド・再デプロイ・dotnet --info による確認を完了することです。

そのうえで、次の順に対応してください。

  1. Microsoft.AspNetCore.DataProtection 10.0.0〜10.0.6の利用有無を確認する
  2. 直接参照だけでなく、推移的依存関係も確認する
  3. SDK、Runtime、ASP.NET Core Runtime、コンテナイメージを10.0.7系へ更新する
  4. 認証、OIDC、Antiforgery、TempData、スケールアウト構成をテストする
  5. 影響環境で外部公開していた場合は、Data Protectionキーリングローテーションを検討する
  6. リフレッシュトークン、APIキー、パスワードリセットリンクなどの長期的な資格情報を監査する
  7. 変更管理チケット、更新日時、対象外判断、ログ調査結果を証跡として残す

今回の更新は、パッチ適用だけでなく「脆弱な期間に何が発行された可能性があるか」まで見ることが重要です。Security Admin、Identityチーム、Complianceチームが同じ影響範囲リストを共有し、更新・ローテーション・監査を一つの対応計画として進めることが、もっとも実務的な対応になります。

[6]: https://www.nuget.org/packages/Microsoft.AspNetCore.DataProtection “
NuGet Gallery
| Microsoft.AspNetCore.DataProtection 10.0.7
“

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次