2024年1月の「WinRE更新エラー」は、なぜ、どのように発生したのか? どうやって解決するつもりなのか?検証! Microsoft&Windowsセキュリティ(10)

2024年1月の定例のセキュリティ更新では、多くのWindows 10ユーザーがセキュリティ更新プログラム「KB5034441」がエラー「0x80070643」で更新の失敗を繰り返すという問題に遭遇しました。失敗の原因や回避策、その後の対応を追跡します。

» 2024年02月22日 05時00分 公開
[山市良テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「検証! Microsoft&Windowsセキュリティ」のインデックス

検証! Microsoft&Windowsセキュリティ

2024年1月のセキュリティ更新プログラム「KB5034441」でエラーが多発、その原因は?

 2024年1月の最初の「Windows Update」では、多くの「Windows 10」ユーザーがセキュリティ更新プログラム「KB5034441」の更新エラーを繰り返すという問題に遭遇したことでしょう。また、あまり知られていないことですが、「Windows Server 2022」のServer Coreや「Azure Stack HCI バージョン22H2」「Microsoft Azure」上の「Windows Server 2022 Azure Edition」でも更新エラーが繰り返されています。問題が発生したセキュリティ更新プログラムは、以下のものです。


 これらのセキュリティ更新プログラムは、「Windows回復環境(Windows Recovery Environment:WinRE)」が有効になっていない場合や、「Windows BitLockerドライブ暗号化」を使用していなければ影響を受けません。影響を受ける場合でも、悪用される可能性は低い脆弱(ぜいじゃく)性だということを最初に覚えておいてください(画面1)。

画面1 画面1 CVE-2024-20666のセキュリティ情報

 また、Microsoftが対策を講じるまでに自分たちできるエラーの回避策については、以下の連載記事にまとめてあります。

 エラーの原因は、“更新されたWinREを格納する回復パーティションの空き容量不足”であり、それを解消すれば、エラーを回避してインストールを成功させることができます。つまり、CVE-2024-20666の脆弱性に対策できるということです。しかしながら、情報が少ない中で、検証しながら書いた記事であり、少し難解なところもあったかもしれません。

WinREに対する手動のオフラインパッチを一部のWindowsに対してWindows Updateで強行

 CVE-2024-20666のWebページで説明されているように、「Windows 11」のバージョン22H2とバージョン23H2では、WinREの更新は品質更新プログラムに含まれており、回復パーティションの空き容量が足りない場合、WinREの更新は元のイメージにロールバックされ、サイレントに失敗します。それについては、本連載第6回で説明しました。

 しかし、WinREが更新されない場合、脆弱性は放置されることになります。これまでに公開されたWinREのBitLockerパイパスの脆弱性は、前述のように悪用の可能性は低いため、そうだとしても重大な問題にはならないでしょう。しかし、今後、WinREに悪用の可能性がある重大な脆弱性が見つかった場合、そうともいっていられません。

 CVE-2024-20666のWebページでは、Windowsのさまざまなバージョン(「Windows Server 2016」「Windows Server 2019」を除く)に対して、WinREを手動でオフラインパッチするPowerShellスクリプトも紹介されています。

 このPowerShellスクリプトが、今回の更新エラー対策と伝えたニュースもありましたが、それは全くの誤報です。

 このオフラインパッチをWindows 10 バージョン21H2/22H2、Windows 11 バージョン21H2、Windows Server 2022、Azure Stack HCI バージョン22H2、Windows Server 2022 Datacenter:Azure Editionに対して、「自動化ソリューション」として提供を強行した結果が、今回のセキュリティ更新プログラムのエラーを多発させたというわけです。

 CVE-2024-20666のセキュリティ情報によると、Windows Server 2016やWindows Server 2019なども2024年1月の品質更新プログラムにCVE-2024-20666への対応が含まれているように書かれています。しかし、これらのOSについては回復パーティションのサイズに関係なく、WinREは更新されません。WinREの更新を伴わない形で、CVE-2024-20666に対する修正がOSに対して行われているのでしょう。

 WinREの格納先となる回復パーティションは、以前はインストールやアップグレード時にWindowsが自動作成し、その際にセットアップされたイメージ(winre.wim)をそのまま使用していました。

 WinREがWindows Updateで更新されるようになったのは、Windows 11 バージョン22H2の途中からです。Windows 11 バージョン23H2は、WinREの更新の可能性を最初から知っている最初のバージョンです。そのため、Windows 11 バージョン22H2以前や、Windows 11 バージョン22H2から有効化パッケージで更新されたバージョン23H2(回復パーティションは維持される)では、セキュリティまたは品質更新プログラムによるWinREの更新は失敗する可能性があります。

 以下の表1は、Windows 10 バージョン22H2、Windows 11 バージョン22H2、Windows 11バージョン23H2を、Windowsセットアップにパーティション作成を任せて新規インストールした場合の「回復パーティションのサイズ」「WinREのサイズ(使用したISOイメージによって異なる場合があります)」「空き領域」「2024年1月に更新されたWinREのサイズ」「WinREの更新の成功/失敗」をまとめたものです。

回復パーティションのサイズ 元のWinREのサイズ 空き領域 1月更新のWinREのサイズ WinREの増分 WinREの更新
Windows 10 バージョン22H2 589MB 490MB 83MB 512MB 22MB 失敗
Windows 11 バージョン22H2 678MB 575MB 83MB 623MB 48MB 失敗
Windows 11 バージョン23H2 801MB 708MB 83MB 713MB 6MB 成功
表1 Windowsセットアップが自動作成したパーティション構成では、Windows 11 バージョン23H2以外は空き容量不足でWinREの更新に失敗

 これらの情報は、「C:\Windows\Logs\WinREAgent\setupact.log」にも以下のように記録されますが、実際とは異なるサイズであったため、実際のファイルサイズや空き容量を調べました。

WinRE partition total space [<パーティションサイズ>], free space [<空き領域>], winre size [<現在のWinREのサイズ>], target WinRE size [<更新されたWinREのサイズ>]

Free space requirement: [<必要な空き領域(54525952バイト=52MB固定)>]

 「setupact.log」によると、回復パーティションに必要な空き領域は52MB(固定)となっており、表1に示したように、今回のWinREの更新には必要な容量があるように見えます(83MB−22MB=61MB>52MB)。しかし、実際には失敗しました(画面2)。

画面2 画面2 Windows 10 バージョン22H2の場合、ログファイルの記録では空き領域は足りているように見えるが、実際にはWinREの更新に失敗

 Windows 10/11の通常のインストールでは、回復パーティションはディスクの最後に配置されています。そのため、その1つ前にあるOS用パーティションの領域を縮小(Shrink)して、未使用領域を確保し、その領域を含めて回復パーティションを作成し直して、WinREをセットアップし直せば、更新プログラムのインストールは成功します。

 現在、問題のセキュリティ更新プログラムのWebページには、「この更新プログラムを正常にインストールするには、回復パーティションに 250 MB の空き領域が必要です」と書いてあります(2024年1月12日に追記)が、実際には50〜100MB程度追加するだけで成功しました。

 「250MB」という数字は、おそらく以下のドキュメントの「少なくとも100MBが必要ですが、250MBが推奨されます」からのものでしょう。

 実際に必要な空き領域は、「setupact.log」の52MB(固定)なのだと思います。上記ドキュメントには、回復パーティションにはファイルシステム自体に5〜15MB(750MBのNTFSボリュームの場合)以上が予約される可能性があるとも書いてあります。おそらく、その要約された領域の影響で52MBより小さくなってしまい(83MB−22MB−11MB〜=〜51MB<52MB)、失敗したのだと想像します。

 なお、容量不足による失敗(ロールバック)については、同じログファイルに次のように記録されます(品質更新プログラムによるWinRE更新の失敗の記録は確認できませんでした)。

[WinREUpdInst] Failed to stage WinRE servicing operation due to insufficient disk space in WinRE partition[gle=0x0000012a]

 Windows 11 バージョン22H2では、2024年1月の品質更新プログラムでWinREが更新されました。しかし、既定のパーティション構成では明らかに容量不足(83MB−48MB=35MB<52MB)であり、WinREは更新されずにロールバックされます。品質更新プログラムのインストールは成功したことにされ、WinREが更新されなかったことがユーザーに通知されることはありません(画面3画面4)。

画面3 画面3 Windowsセットアップが自動作成した回復パーティションのサイズでは、2024年1月の品質更新プログラム「KB5034123」(OSビルド22621.3007)でWinREは更新されない
画面4 画面4 回復パーティションを100MB拡張したWindows 11 バージョン22H2は、WinREの更新に成功

 Windows 11 バージョン22H2からバージョン23H2に、有効化パッケージで更新したデバイスも同じ挙動を示すはずです。これは注意すべき挙動です。「CVE-2024-20666」の脆弱性への対策を含む更新プログラムでありながら、脆弱性は放置されることになるからです。

 前述のように、今回の脆弱性はBitLockerドライブ暗号化を利用していない限り、影響を受けませんし、影響を受けるとしても悪用の可能性が低いため、放置しても問題はありません。しかし、今後、より深刻なセキュリティ問題でWinREの更新が必要になったことを考えてみてください。また、Windows Server 2016やWindows Server 2019の既定のパーティション構成では回復パーティションがディスクの先頭に位置しているため、緊急でWinREの更新が必要になった場合、かなり厄介です。

手動オフラインパッチは今回の更新エラーの解決策にはならない

 Windowsセットアップが自動作成したパーティション構成のWindows 10 バージョン22H2(x64)環境に、「KB5034957」に従って手動でオフラインパッチを実施したところ、問題なく更新は成功しました。つまり、CVE-2024-20666に対策できました(画面5)。

画面5 画面5 2023年3月の同様のオフラインパッチは回復パーティションの容量不足で失敗したが、今回はWinREのサイズ微増のため成功

 このオフラインパッチのPowerShellスクリプトは、回復パーティション内のWinREイメージを直接ローカルにマウントし、パッチした上でアンマウントするという動きをします。パッチ後のWinREイメージのサイズは更新前とほとんど変わりませんでした。

 2023年3月にWindows 10/11向けに同じように、以下のWinREのオフラインパッチ用スクリプトが提供されたことがありました(その後、Windows 11 バージョン22H2以降については、2023年6月のCリリース以降から品質更新プログラムでWinREが更新されるように変更されました)。そのときは、回復パーティションの空き容量不足でスクリプトが失敗することがありましたが、今回はサイズが微増であったため、“たまたま成功した”のだと思います。

 しかしながら、その後Windows Updateを実行すると、セキュリティ更新プログラム「KB5034441」が検出、ダウンロード、インストールされ、そしてエラー「0x80070643」で失敗を繰り返します(画面6)。CVE-2024-20666には対策済みであり、セキュリティ更新プログラム「KB5034441」は不要のはずです。これが検出されるのは、「自動化ソリューション」がWinREの現在のバージョンをチェックしていないからと思われます。

画面6 画面6 オフラインパッチでCVE-2024-20666に対策済みであっても、セキュリティ更新プログラム「KB5034441」の失敗は続く

これだけではない、WinREセキュリティ更新プログラムの重大な問題

 今回のWinREのセキュリティ更新プログラム「KB5034439」「KB5034440」「KB5034441」には、回復パーティションの空き容量による失敗以外にも、別の問題が確認されています。

 WinREが無効化されているWindowsでも、これらのセキュリティ更新プログラムが検出、ダウンロード、インストールされ、同じエラー「0x80070643」を報告して失敗するのです(画面7)。この問題は「KB5034439」「KB5034440」「KB5034441」の既知の問題に追加されました。Microsoftによる解決策が提供されるまでは安全に無視できるとされています。

画面7 画面7 「reagentc /disable」コマンドでWinREを無効にすると、回復パーティションの空き領域が十分あっても、WinREのセキュリティ更新プログラムが検出、ダウンロード、インストールされ、失敗する

 Azure Marketplaceの「Windows Server 2022 Datacenter: Azure Edition/Azure Edition Core」をMicrosoft Azure上にデプロイした場合は、WinREが既定で無効化され、回復パーティションはそもそも存在しません。そのため、デスクトップエクスペリエンスでも、Server Coreインストールでもインストールに失敗します(画面8)。この問題は、発生する可能性のある「KB5034441」の既知の問題には追加されていません。

画面8 画面8 Azure MarketplaceのAzure EditionイメージはWinREが無効化されているため、WinREのセキュリティ更新のインストールに失敗する

 Windows Server 2022、Azure Stack HCI バージョン22H2(Server Coreベース)、Azure Edition向けのセキュリティ更新プログラム「KB5034439」については、また別の問題があります。Server Coreインストール環境の場合、これもインストールの失敗を繰り返します。

 「setupact.log」には、「[WinREUpdInst]Failed to add DISM package by path[gle=0x0000007a]」が記録されます(画面9)。Srever CoreインストールでのCVE-2022-41099の対策は、手動によるオフラインパッチで可能ですが、それを実施したとしても今回の更新プログラムのエラーが繰り返されることに変わりはありません(画面10)。

画面9 画面9 Server Coreインストールでは、セキュリティ更新プログラム「KB5034439」のインストール失敗が繰り返される
画面10 画面10 Server Coreインストールのエラーは、手動によるオフラインパッチ後(CVE-2022-41099対策後)も繰り返される

 なぜ、今回の更新プログラムはこのように多数の問題を抱えたままリリースされたのか、それは、サポートされている全ての環境でテストしていないからに違いありません。

 回復パーティション不足による更新の失敗は、KB情報公開時から分かっていたようですし、回復パーティションの拡張方法もKB情報までたどり着ければ最初から提供されていました。

 しかし、回復パーティションが存在しない、WinRMが有効になっていない環境は想定していなかったようです(Azure Marketplaceで回復パーティションのないAzure Editionを提供しているのにもかかわらず)。そして、Server Coreの違いも想定しておらず、通常のWindowsと同じように更新できるはずだと思ったのでしょう。

 Microsoftは2024年2月上旬に、回復パーティションの拡張に使用できる新たなPowerShellスクリプトを公開しました。筆者はこのPowerShellスクリプトで拡張できましたが、管理者権限での実行、PowerShellの実行ポリシーの設定、バックアップディレクトリの作成、スクリプトとの対話実行(英語)など、一般のユーザーにはハードルが高過ぎると感じました。なお、このスクリプトはWindows PowerShellでは問題なく機能するようですが、「PowerShell 7」(旧称、PowerShell Core)では、Split演算子の挙動の違いが原因でOSドライブの検出に失敗することを確認しています。

Microsoftの出した答えは――“問題の先送り”

 このように、2024年1月のWinREのセキュリティ更新プログラム(自動化ソリューション)には、数多くの問題があります。そして、2024年2月のセキュリティ更新では、この問題は解決されませんでした。Microsoftはこの問題に、どのように対処するのでしょうか。まず、最優先でWinREのセキュリティ更新プログラム「KB5034439」「KB5034440」「KB5034441」を取り下げる(Windows Updateによる配布停止)べきだったのではないでしょうか。

 パーティション構成は環境によりけりであるため、パーティションのサイズ調整を自動化することは難しいでしょう。それ以外の対応策を考えてみました。

(1)Windows 11 バージョン22H2以降のように、OSの品質更新プログラムにWinREの更新を含め、WinREを更新できなければサイレントに失敗させる

(2)WinREのパッチ後のサイズ増加を何らかの方法で抑制する


 1つ目の方法は、これまで指摘したように、単に“問題の先送り”でしかありません。今後、より重大な脆弱性の発見でWinREの更新が必要になった場合、別の方法を考える必要があるでしょう。

 また、Microsoftは2023年5月から段階的に進めているセキュアブート関連の脆弱性対策を、2024年10月に強制実施する予定です。これに備えるためにも、実は、WinREの更新が重要になります。

 2つ目の方法は、現在のWinREを置き換えるのではなく、現在のWinREにパッチを適用しています。なぜ、サイズが最適化されたWinREイメージと置き換えないのかと疑問に思う人もいるかもしれませんが、WinREの環境はOEMベンダーがカスタマイズ可能な部分なので、単純に新しいWinREイメージで置き換えるわけにはいかないのです。

 Microsoftは、2023年5月のセキュリティ更新(Bリリース)で、「Windowsブートマネージャー」を更新し、古いブートマネージャーを失効させるための「コード整合性ブートポリシー」(SKUSiPolicy.p7b)と、信頼されていないモジュールの読み込みをブロックする「禁止された署名リストデータベース」(DBX)の更新を、既定では無効な状態で提供しました(初期展開フェーズ)。

 その後、2023年7月(Bリリース)に第2フェーズに進み、軽減策を有効にする簡略化された手順が追加されました。そして今後、2024年4月9日からの第3フェーズ(追加の脆弱なブートマネージャーのブロック、起動可能メディアの更新が必要)、2024年10月に最終フェーズ(SKUSiPolicy.p7bとDBXの強制施行)が予定されています。

 強制施行が実施されると、更新されていない回復パーティションの古いWinREイメージや、古い起動可能なメディア(インストールメディア、システム修復ディスク、回復ドライブ)から、セキュアブートが有効なWindowsデバイスを起動できなくなる可能性があるのです。

 最後に、これからWindows 10/11を新規インストールするという場合は、あらかじめ余裕のある容量で回復パーティションを手動作成してインストールすることをお勧めします。筆者の物理PCでは全て回復パーティションを手動作成してインストールしてあるので、今回のエラーの影響を受けることはありませんでした。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP 2008 to 2024(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。