今週、被害を受けたWindows PC上でリモートコードを実行可能とするゼロデイ脆弱性「Follina」が発見され注目を集めています。Microsoftは悪用が確認されているこの脆弱性に対するパッチをまだ発行しておらず、回避策を提供しているだけですが、サードパーティ企業0patchが無料の修正プログラムをリリースしたことがわかりました(BetaNews)。
0patchが公開した修正プログラムは、Windows 11、Windows 10、Windows 7、Windows Server 2008 R2向けのもので、以下のバージョンが対象となっています。
- Windows 11 v21H2
- Windows 10 v21H2
- Windows 10 v21H1
- Windows 10 v20H2
- Windows 10 v2004
- Windows 10 v1909
- Windows 10 v1903
- Windows 10 v1809
- Windows 10 v1803
- Windows 7
- Windows Server 2008 R2
これらのマイクロパッチは、オンラインの0patch agentに提供されており、0patch Centralで無料のアカウントを作成し、0patch.comから0patch Agentをインストールし登録することで利用可能です。あとは全て自動的に行われコンピューターの再起動は必要ないとのこと。
0patchは、問題のコンポーネントを単に無効するMicrosoftの回避策よりも、さらに巧妙はアプローチを採用し、システムに対する影響が最小限に収まるよう考慮しています。
It would be by far the simplest for us to just disable msdt.exe by patching it with a TerminateProcess() call. However, that would render Windows diagnostic wizardry inoperable, even for non-Office applications. Another option was to codify Microsoft's recommendation into a patch, effectively disabling the ms-msdt: URL protocol handler.
msdt.exeをTerminateProcess()コールでパッチして無効にするのは、私たちにとって圧倒的にシンプルな方法でしょう。しかし、そうするとWindowsの診断ウィザードが、Office以外のアプリケーションでも使えなくなります。また、Microsoftの推奨事項をパッチとしてまとめ、ms-msdt:URLプロトコルハンドラを効果的に無効化する方法もあります。
But when possible, we want to minimize our impact outside of removing the vulnerability, so we decided to place our patch in sdiagnhost.exe before the RunScript call and check if the user-provided path contains a "$(" sequence - which is necessary for injecting a PowerShell subexpression. If one is detected, we make sure the RunScript call is bypassed while the Diagnostic Tool keeps running.
しかし、可能な限り、脆弱性を除去する以外の影響を最小限に抑えたいので、私たちは、RunScript呼び出しの前にsdiagnhost.exeにパッチを配置し、ユーザーが提供するパスに「$()」シーケンス(PowerShellサブ式の注入に必要)が含まれているかどうかをチェックすることに決めました。これが検出された場合、RunScriptの呼び出しがバイパスされ、Diagnostic Toolが実行され続けることを確認します。
パッチの詳細は公式ブログで確認可能です。