セキュリティ · 1 min read · Nov 29, 2025
Google対Microsoft; Google研究チームがWindows 7/8の脆弱性を2件公開

Google対Microsoftの戦争が激化、GoogleがWindows 7およびWindows 8の脆弱性2件を公開
Google研究チームは、バグの詳細を開示する前にGoogle Project Zeroが自ら設定した90日間の待機期間が終了した後、木曜日に2件の未修正のWindows脆弱性を公開しました。
このような公の開示に対して好意的でないMicrosoftは、2件の脆弱性のうち1件を、次回の2月のパッチ火曜日のセキュリティ情報リリースで修正すると述べています。2件目の欠陥は、大きなセキュリティ問題ではないようです。
読者は、Google研究チームがWindows 7の特権昇格脆弱性を公開したことを覚えているかもしれません。Googleの12月29日の開示は、セキュリティ愛好者の間で開示に関する議論を再燃させ、両社からの敵対的な態度や公の姿勢を引き起こしました。
Microsoftは、Googleに協調的な脆弱性開示プログラムに従うよう求め、1月のセキュリティ情報が今週リリースされた後まで脆弱性の開示を控えるように要請しました。一方、Googleは自ら設定した90日間のモラトリアムに依存しているため、拒否し、開示を進めました。
Microsoftのクリス・ベッツは、「Googleの発表された開示のタイムラインに従うことは正しいが、その決定は原則よりも『やった!』のように感じられ、顧客がその結果として苦しむ可能性があります。Googleにとって正しいことが、常に顧客にとって正しいとは限りません。私たちはGoogleに顧客の保護を私たちの共同の主要な目標にするよう促します。」と述べています。
テクノロジーの巨人たちの戦争はまだ終わっておらず、Google研究チームはさらに2件のWindows脆弱性を公開しました。以下に両方の脆弱性を示します:
問題番号127 Microsoftに2013年10月17日に報告、2014年1月15日に公開
プラットフォーム: Windows 7 32/64ビット、Windows 8+は脆弱ではない
クラス: セキュリティバイパス NtPowerInformationシステムコールは、特定の電源機能を実行する前に呼び出し元が管理者であることを確認します。このチェックはPopUserIsAdmin関数で行われます。おおまかな実装は次のとおりです:
BOOLEAN PopUserIsAdmin() {
SECURITY_SUBJECT_CONTEXT ctx; SeCaptureSecurityContext(&ctx); return SeTokenIsAdmin(SeQuerySubjectContextToken(&ctx));
} Windows 7では、このチェックをバイパスできます。なぜなら、SeTokenIsAdmin関数はトークンの偽装レベルを考慮せず、残りのコードもそれを考慮しないからです。したがって、通常のユーザーとして管理者のトークンを偽装し(リンクトークンまたはシステムトークンを誘拐することによって)、保護された関数を呼び出すことができます。Windows 8+では、SeTokenIsAdminメソッドが偽装レベルを確認するように変更されたため、脆弱ではありません。これが深刻なセキュリティへの影響を持つかどうかは不明であるため、そのまま開示されています。一部の関数は特権チェックでも確認されますが、主題コンテキストは別々にキャプチャされるため、チェック間にTOCTOUウィンドウが存在し、悪用される可能性があります。PoCの目的で、私は関数45「PopRequestPowerListInfo」を使用することにしました(特別なトリックは必要ありません)。また、この関数には、PopPowerRequestObjectCountのサイズをどれだけ押し上げられるかによって理論的な整数オーバーフロー脆弱性があります。添付されているのは、Windows 7での実行のための問題を示す簡単なPoCです。再現するには、次の手順に従ってください。
- スプリットトークン管理者として実行していることを確認します。これは、PoCがリンクトークンを使用して管理者トークンを取得するためです。通常のユーザーの場合、サービスからトークンをキャプチャするだけで済みます。
- PoCを実行します。1回は偽装なしで、もう1回は偽装ありで呼び出すはずです。
期待される結果:
両方の呼び出しはSTATUS_ACCESS_DENIED (0xC0000022)を返すべきです。
観察された結果:
最初のチェックはSTATUS_ACCESS_DENIEDで失敗し、2回目はSTATUS_SUCCESSで成功します。
PoCのダウンロード => 1 2
問題番号128 Microsoftに2013年10月17日に報告、2014年1月15日に公開
プラットフォーム: Windows 7、8.1アップデート 32/64ビット
クラス: セキュリティバイパス/情報漏洩 CryptProtectMemory関数は、アプリケーションが3つのシナリオのいずれかのためにメモリを暗号化できるようにします:プロセス、ログオンセッション、およびコンピュータ。ログオンセッションオプション(CRYPTPROTECTMEMORY_SAME_LOGONフラグ)を使用する場合、暗号化キーはログオンセッション識別子に基づいて生成されます。これは、同じログオン内で実行されているプロセス間でメモリを共有するためのものです。これは、あるプロセスから別のプロセスにデータを送信するためにも使用される可能性があるため、偽装トークンからログオンセッションIDを抽出することをサポートしています。問題は、CNG.sysの実装がログオンセッションIDをキャプチャする際にトークンの偽装レベルを確認しないことです(SeQueryAuthenticationIdTokenを使用)。そのため、通常のユーザーは識別レベルで偽装し、そのログオンセッションのデータを復号化または暗号化できます。これは、名前付きパイププランティング攻撃に脆弱なサービスがある場合や、世界中で読み取り可能な共有メモリセクションに暗号化データを保存している場合に問題となる可能性があります。この動作は設計によるものである可能性がありますが、設計に関与していないため、判断が難しいです。ドキュメントには、ユーザーはクライアントを偽装する必要があると記載されています。これは、クライアントを特定するのではなく、クライアントの代理として行動できるべきであると解釈しています。添付されているのは、問題を示す簡単なPoCです。再現するには、次の手順に従ってください。
- コマンドラインからPoc_CNGLogonSessionImpersonation.exeを実行します。
- プログラムは「暗号化が一致しない」と表示し、同じデータの2つの暗号化が一致しなかったことを示します。これは、キーが異なっていたことを意味します。
期待される結果:
両方の呼び出しは同じ暗号化データを返すか、2回目の呼び出しが失敗するべきです。
観察された結果:
両方の呼び出しが成功し、異なる暗号化データを返します。
PoCのダウンロード => Zipファイル
Microsoftは、2月のパッチ火曜日で脆弱性のうち1件のみを修正すると述べており、もう1件の脆弱性はセキュリティリスクではないとしています。MicrosoftとGoogleの両社は、公開された3件の脆弱性が実際に悪用された証拠はないと述べています。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。