WPS Officeに影響する任意コード実行の2つの脆弱性を解析

本ブログでは、CVE-2024-7262とCVE-2024-7263を解析した技術的詳細についてお伝えします。

ESETの研究者は、Windows版WPS Officeにコード実行の脆弱性(CVE-2024-7262)を発見し、韓国とつながりのあるサイバースパイグループ「APT-C-60」がこの脆弱性を攻撃していることを特定しました。根本原因を分析したところ、欠陥のあるコード(CVE-2924-7263)を悪用できる別の方法も見つかりました。本ブログでは、技術的な詳細について解説します。

本ブログの要点:

  • APT-C-60は、Windows版WPS Officeのコード実行の脆弱性(CVE-2024-7262)を武器化して、東アジア諸国の標的を攻撃していました。
  • この脆弱性の根本原因を分析した結果と武器化の方法を合わせて説明します。
  • ESETの研究者は、このエクスプロイトを調査していく中で、この脆弱性(CVE-2024-7263)を悪用する別の方法も特定しました。

概要

ESETは、APT-C-60の活動を調査する中で、このグループが使用している多くのダウンローダーコンポーネントの1つを参照する不審なスプレッドシートドキュメントを発見しました。このスプレッドシートを分析したところ、APT-C-60によって東アジア諸国を標的としてWindows版WPS Officeにあるコード実行の脆弱性が実環境で悪用されていることを特定しました。最終的なペイロードはカスタムバックドアであり、ESETはこのバックドアをSpyGlaceと命名しました。SpyGlaceは、ThreatBookではTaskControler.dllとして公開されています。

WPSのWebサイトによると、このソフトウェアを現在利用しているユーザーは全世界で5億人を超えています。ESETは協調的な脆弱性開示プロセスに従っていましたが、DBAPPSecurityは武器化された脆弱性の分析を独自に公表し 、APT-C-60が中国のユーザーにマルウェアを配信するために脆弱性を悪用していることを確認しています。

悪意のある文書(SHA-1:7509B4C506C01627C1A4C396161D07277F044AC6)は、一般的に使用されているXLSスプレッドシート形式のファイルをMHTML形式でエクスポートしたものです。しかし、WPS Spreadsheetsアプリケーションを使用してこのエクスポートファイルをクリックすると、特別に細工されたハイパーリンクが隠されており、任意のライブラリが実行されるように設計されています。このMHTMLファイルは通常とは異なる形式になっており、ドキュメントを開くとすぐにファイルがダウンロードされます。この手法を利用して脆弱性を攻撃すると、リモートからコードが実行されます。図1は、WPS Spreadsheetsでドキュメントがどのように表示されるかを示しています。行と列にCoremailメールソリューションと書かれた画像があり、この画像がおとりとして使用されています。この画像には悪意のあるハイパーリンクが隠されています。

ESETが協調的な脆弱性開示ポリシーに従っている間に、武器化されたドキュメントがVirusTotalにアップロードされてから本ブログ記事が8月28日に公開されるまでのタイムラインを以下に示します。

  • 2024年2月29日:CVE-2024-7262を攻撃するドキュメントがVirusTotalにアップロードされた。
  • 2024-03-??日:Kingsoftは、CVE-2024-7672の脆弱性を秘密裏に修正するアップデート(サイレントパッチ)をリリースし、2024年2月29日に見つかったエクスプロイトが機能しないようにした。2024年3月から2024年4月の間に利用可能なすべてのWPS Officeリリースが分析され、この修正が遡及的に行われた。Kingsoftは、この脆弱性を修復するときに行った対策の正確な詳細は積極的に提供していなかった。
  • 2024年4月30日:ESETはVirusTotalにアップロードされた悪意のあるドキュメントを分析し、このドキュメントが、最初に悪用された時点ではゼロデイ脆弱性であったCVE-2024-7262を悪用していることを発見した。また、Kingsoftのサイレントパッチは欠陥のあるコードの一部分にしか解決しておらず、残りの欠陥のあるコードは依然として悪用可能であることも判明した。
  • 2024年5月25日:ESETはKingsoftに連絡を取り、調査結果を報告した。最初の脆弱性にはすでにパッチが適用されていたが、CVE-2022-24934の対応と同じように、CVEに登録し脆弱性を公開するように求めた。
  • 2024年5月30日:Kingsoftはこれらの脆弱性を認め、常に最新情報を提供するとESETに伝えた。
  • 2024年6月17日:ESETは最新情報を提供するように求めた。
  • 2024年6月22日:Kingsoftは、開発チームは現在もこの問題に取り組んでおり、次のバージョンで修正することを目指していると伝えてきた。
  • 2024年7月31日:その後テストを行ったところ、CVE-2024-7263にはサイレントパッチが適用されていた。ESETは、CVE-2024-7262とCVE-2024-7263を予約しており、公開する準備を行っていることをKingsoftに通知した。
  • 2024年8月11日:DBAPPSecurityチームは独自に調査結果を発表した。
  • 2024年8月15日:CVE-2024-7262CVE-2024-7263が公開された。
  • 2024年8月16日:ESETは、Kingsoftに最新情報を伝えるように再度要求した。
  • 2024年8月22日:Kingsoftは5月末までにCVE-2024-7263を修正したことを認めたが、これは2024年6月22日に同社の開発チームが「まだこの問題の修正の取り組んでいる」と主張していたことと矛盾している。
  • 2024年8月28日:Kingsoftは両方の脆弱性について認め、パッチを適用したことを明らかにした。しかし、同社はCVE-2024-7262が実環境で悪用されていることを公表することに関心を示していないことから、本ブログを公開し、Kingsoftの顧客に対して、CVE-2024-7262の脆弱性とエクスプロイトが実環境で悪用されていることと、第三者によって脆弱性が公開されていることにより、今後さらに悪用される可能性が高まっているため、WPS Officeを緊急にアップデートするよう警告した。

CVE-2024-7262の脆弱性は、攻撃者が指定するファイルパスが適切にサニタイズされておらず、読み込まれるプラグインも検証されていないことに起因していました。Kingsoftが公開したパッチを分析した結果、さらにロジックのバグを利用してこの脆弱性を悪用する別の方法も見つかりました。

CVE-2024-7262

このセクションでは、APT-C-60によって悪用されたバグについて説明します。このバグでは、WPS Officeプラグインコンポーネントpromecefpluginhost.exeの制御フローを乗っ取り、任意のコードを実行します。また、この脆弱性が攻撃で利用され、偽装されたスプレッドシートドキュメントという形で武器化された方法についても説明します。

根本原因分析

Windows版WPS Officeをインストールすると、このソフトウェアは、ユーザーがURIスキームksoqing://で始まるURLをクリックするときに毎回、外部アプリケーションの実行を許可するksoqingと呼ばれる独自のプロトコルハンドラを登録します。Windowsオペレーティングシステムでは、独自のプロトコルハンドラの登録は、レジストリで行われます。このケースでは、HKCR\ksoqing\shell\open\commandキーにあるデフォルト値によって、WindowsはC:\Users\\AppData\Local\Kingsoft\WPS Office\\office6\wps.exeを引数/qingbangong "%1"を使用して実行するように指示されます。%1は完全なURLに置換されます。このプロセスを説明するために、WPS Spreadsheetsアプリケーション(et.exe)の独自のプロトコルksoqingを使用して、ユーザーがハイパーリンクをクリックしたときの処理を図2に示します。

図3に、CVE-2024-7262に対するエクスプロイトの制御フローの概要を示します。

wps.exeが起動されると、qingbangong.dllが読み込まれます。これは、ハイパーリンクの特定のパラメータを解析および検証するコンポーネントです。ESETが発見したエクスプロイトファイルにある悪意のあるリンクの形式は、ksoqing://type=ksolaunch&cmd=&token=&launchname=promecefpluginhost.exeとなっています。ESETの分析とテストによると、このリンクによって、攻撃者が指定したbase64エンコードされたコマンドラインで、システムにすでに存在するアプリケーション(この場合、promecefpluginhost.exe)が実行されます。

tokenパラメータは、cmdパラメータのエンコードされた値と、文字列_qingLaunchKey_にlaunchnameパラメータをエンコードした値が付けられたものを連結したMD5ハッシュです。最後の1つは、C:\Users\\AppData\Local\Kingsoft\WPS Office\\office6\の下にあり、Kingsoftの有効な証明書で署名された実行ファイルでなければなりません。

このcmdパラメータをデコードした結果、コマンドライン/qingbangong -CefParentID=1 -JSCefServicePath=がpromecefpluginhost.exeに渡されていることがわかりました。いくつかの初期化処理を行った後で、ksojscore.dllライブラリがロードされ、JSCefServicePathパラメータがデコードされます。これにより、QtのQLibrary::loadメソッドへのパラメータとして渡される文字列が指定されます。このファイルパスは攻撃者が定義できるため、任意のDLLをロードしてコードを実行することが可能です。図4は、攻撃者が制御するJSCefServicePathパラメータがksojscore.dllによって処理される方法を示しています。

つまり、ksoqingスキームプロトコルを悪用すると、クリックされたときに指定されたリモートファイルパスからライブラリをロードするハイパーリンクを作成することが可能です。APT-C-60はこの脆弱性を武器化して、トロイの木馬のダウンローダーコンポーネント(SHA-1:08906644B0EF1EE6478C45A6E0DD28533A9EFC29)を配信して、攻撃の第一段階として使用します。

脆弱性の攻撃

この脆弱性を攻撃するためには、攻撃者は標的のコンピュータがアクセス可能な場所、つまりシステムまたはリモートの共有フォルダに悪意のあるライブラリを保存し、そのファイルパスを事前に把握しておく必要があります。この脆弱性のエクスプロイトを開発した攻撃者は、これを実現するためのいくつかの手法を理解していました。

MHTML形式を利用したリモートファイルのダウンロード

このエクスプロイトを作成した攻撃者は、サポートされているMHTMLファイル形式の特定の機能を利用して、悪意のあるコンポーネントをダウンロードさせ、システムの予測可能な場所に保存させています。この形式のファイルは、ユーザーがブラウザでドキュメントを表示できるようにするために、Microsoft WordやExcelアプリケーションで提供されているエクスポート形式です。これは、ドキュメントを簡単に表示できるようにするHTML、CSS、JavaScriptファイルが含まれる複数のパートから構成されるアーカイブです。これらのHTMLファイルの1つにimgタグを挿入すると、ドキュメントがロードされる時にWPS Spreadsheetsアプリケーションにリモートファイルをダウンロードさせることができます。imgタグとsrc要素によってローカルに保存されたライブラリを指定するテストファイルの1つをFigure 5に例として示します。

WPS Spreadsheets(et.exe)アプリケーションでスプレッドシートドキュメントを開くと、リモートライブラリが自動的にダウンロードされ、ディスクに保存されます。ProcMonで観察されたこの結果を図6に示します。

予測できるファイルパスの特定

ファイルパスを予測できなければ攻撃を実行できませんが、ダウンロードされたファイルは%localappdata%Temp\wpsINetCacheの下に保存され、ファイル名はUTF 16LEでエンコードされたURLのMD5ハッシュであることがわかりました。例えば、ESETのライブラリのURLはhttp://localhost/Dll1.dllで、MD5ハッシュは914CBE6372D5B7C93ADDC4FEB5E964CDになります。しかし、JSCefServicePath変数をそのようなファイルパスを指定するように設定すると、%localappdata%KingsoftWPS Office<VERSION>office6の下にあるWPS Officeアプリケーションのルートディレクトリと連結されます。ファイルが見つからない場合、promecefpluginhost.exeは、図7に示すように、他のパスからライブラリを取得しようとします。

ただし、..\..\..\..\Temp\wps\INetCache\914cbe6372d5b7c93addc4feb5e964cdのように、WPS Officeアプリケーションのルートディレクトリからの相対パスを使用することができます。

ファイル拡張子の問題

攻撃を成功させるための最後の難関があります。勘のいい読者の方は、.dllという拡張子が、promecefpluginhost.exeプロセスがライブラリをロードするときに、ファイル名に追加されていることに気が付かれたのではないでしょうか。図6に示しているように、ダウンロードされるファイルを作成するときにはこの拡張子は追加されません。このエクスプロイトを作成した攻撃者は、このケースでも、Windows APIの知識を悪用してこの制限を回避しています。前に説明したように、QLibrary::Loadメソッドは、LoadLibraryWを呼び出すライブラリをロードします。この関数に渡されるlpLibFileNameパラメータのドキュメントには、末尾のドット文字(.)を追加すると、この関数が.dll拡張子を追加できなくなると記載されています。つまり、この相対パスにこの文字を追加すれば、ライブラリをロードできます。

エクスプロイトの再現

ここまで説明してきた攻撃フローをまとめて、このエクスプロイトを再現するために、以下の操作を実行しました。

  • Webサーバーに独自のライブラリをホストする。
  • URLのMD5ハッシュを計算する。
  • このハッシュと一致するハイパーリンクを構築する。
  • スプレッドシートドキュメントを作成し、ハイパーリンクを挿入し、MHTMLファイルとしてエクスポートする。
  • エクスポートしたファイルにimgタグを挿入し、このURLを指定する。

図8に、ハイパーリンクの作成方法を示します。

ドキュメントを開くと、ハイパーリンクを一度クリックしただけで脆弱性が攻撃され、ESETが準備したカスタムライブラリがロードされました。このプロセスを図9に示します。図10にはさらに詳細なプロセスを示しています。

ESETのライブラリがロードされると、PID、管理者権限の有無、ホストプロセスのファイルパスをログファイルに書き込まれます。図11に示すように、Windows版WPS Officeのいくつかのバージョンでこのエクスプロイトを再現しました。

この脆弱性は1回クリックするだけで攻撃できるため、エクスプロイトの開発者は、ユーザーを欺き、ドキュメントが通常のスプレッドシートであると信じ込ませるために、スプレッドシートの行と列の画像をスプレッドシートに埋め込んでいました。悪意のあるハイパーリンクは画像にリンクされており、図12で再現しているように、画像のセルをクリックするとエクスプロイトが実行される仕組みになっていました。

この脆弱性でもう一つの注意しなければならないのは、Windowsエクスプローラーのプレビュー画面で一度クリックするだけでも、この脆弱性が攻撃されることです。

影響を受けるバージョン

影響を受けるWindows版WPS Officeバージョンは、2023年8月頃にリリースされた12.2.0.13110から、2024年3月にパッチがリリースされたバージョン12.1.0.16412までです。武器化されたドキュメントは2月に初めてVirusTotalにアップロードされました。PEのタイムスタンプから、いくつかの悪意のあるコンポーネントは2月に作成されたことが分かります。

CVE-2024-7263

このセクションでは、CVE-2024-7262に対するパッチの分析と、分析の結果発見された、同じWPS Officeのプラグインコンポーネント(promecefpluginhost.exe)の制御フローを乗っ取ることで可能になる別のコード実行の脆弱性について説明します。

根本原因分析

最初の脆弱性の影響を受けるバージョンを特定する過程で、CVE-2024-7262の問題を修正するためにバージョン12.1.0.16412(2024年3月頃にリリース)で導入されたサイレントパッチを分析しました。基本的に、攻撃者が制御していたJSCefServicePath変数を検証するために、promecefpluginhost.exeとksojscore.dllコンポーネントの内部でチェック機能が追加されていました。しかし、パッチCefPluginPathU8では、同じような変数への対応が行われていませんでした。

最初のチェックは、promecefpluginhost.exeが異なるコマンドライン引数を使用して繰り返し実行するときに行われます。パラメータが前に説明した変数の1つと同じ名前である場合(大文字小文字が区別され比較されます)、図13に示すようにパラメータは破棄されます。

その後、jscefservice.dllが保存されているJSCefServicePathのファイルパスを検索します。実際のパスは、図14に示すように、%LOCALAPPDATA%\Kingsoft\WPS Office\\office6\addons\kcef\でなければなりません。同じ処理がCefPluginPathU8に対して行われます。その実際のパスは%LOCALAPPDATA%\Kingsoft\WPS Office\\office6\addons\cef\を指定していなければなりません。

新しいコマンドラインは、受け入れられたコマンドラインパラメータによって構築され、名前付き変数によって識別され取得されたファイルパスが続きます。promecefpluginhost.exeは次にksojscore.dllライブラリをロードし、そのエクスポートCefRenderEntryPointが再構築されたコマンドラインで呼び出されます。両方の名前付き変数がチェックされますが、ここでは大文字小文字は区別されません(図15の2行目を参照)。

ここにロジックの最初の欠陥があります。名前付き変数の少なくとも1文字が大文字または小文字に変更されている場合、大文字と小文字を区別する最初のチェックでは攻撃者が指定したパラメータは拒否されず、コマンドラインは次のようになります。

-JSCEfServicePath= -JSCefServicePath=(最初の変数名の最初文字Eが小文字から大文字に変化しています)。

このようなコマンドラインがksojscore.dllに渡されると、最初の変数だけが使用され、攻撃者が制御する変数が常に有効な変数の前に置かれます。

しかし、JSCefServicePathファイルパスで指定されるライブラリをロードする前に、2つ目のチェック機能が導入されました。krt::ksafe::KProcess::verifyZhuHaiKingsoftCertSigner関数は、図16に示すように、ライブラリの証明書をチェックし、Kingsoftが所有するライブラリであることを確認するために呼び出されます。そのため、攻撃者は任意のライブラリをロードすることはできません。

しかし、CefPluginPathU8変数は正しくチェックされません。ここに2つ目の欠陥があります。JSCefServicePathファイルパスを検証した後、ライブラリjscefservice.dllがロードされ、CefPluginPathU8によって提供されたファイルパスは、署名がチェックされずに、文字列liblibcef.dllと連結され、LoadLibraryExWが呼び出されます。

CefPluginPathU8変数の少なくとも1文字が変更されている場合、jscefservice.dllは、図17に示すように、変数で指定された攻撃者が制御するファイルパスに保存されたlibcef.dllライブラリをロードします。

脆弱性の攻撃

この脆弱性を攻撃するときの主な制限は、ファイルパスに追加される文字列libcef.dllです。このブログの執筆時点では、ファイルをダウンロードしてそのファイル名を選択する方法は見つかっていません。しかし、LoadLibraryExWはネットワークパスを指定できるため、ローカルネットワークの共有でライブラリをホストし、変数CefPluginPathU8によってそのライブラリを指定する方法があります。図18のスクリーンショットは、promecefpluginhost.exe(2024年4月下旬にリリースされたバージョン12.2.0.16909)の制御フローが、ネットワークパスを使用して乗っ取られた方法を示しています。

影響を受けるバージョン

2023年8月頃にリリースされた12.2.0.13110から、2024年5月末にパッチがリリースされたバージョン12.2.0.17119までのWindows版WPS Officeバージョンがこれらの脆弱性の影響を受けます。

結論

WPS Officeは主にアジア各国で利用されているソフトウェアであり、今回明らかになった攻撃からAPT-C-60グループが、東アジア諸国の標的を侵害することに執着していることが実証されました。このグループがCVE-2024-7262のエクスプロイトを開発したのか購入したのかは分かりませんが、このエクスプロイトの開発にあたっては、WPS Officeアプリケーション内部の研究や、Windowsのロードプロセスの仕組みについての知識が必要です。このエクスプロイトは狡猾であり、ユーザーを騙して正規のスプレッドシートをクリックさせる巧妙な仕掛けを取り入れており、非常に効果的で攻撃が成功する可能性が高くなっています。攻撃者は、MHTMLファイル形式を選択することで、コード実行の脆弱性をリモートからのコード実行の脆弱性へと進化させています。

さらに、CVE-2024-7263はESETによって発見されましたが、これはパッチを慎重に検証するプロセスと、中核的な問題が完全に解決されていることの確認が重要であることを示しています。

Windows版WPS Officeをお使いの方は、ソフトウェアを最新リリースにアップデートすることを強くお勧めします。

IOC(セキュリティ侵害の痕跡)

IoC(セキュリティ侵害の痕跡)の詳細なリストと検体は、ESETのGitHubリポジトリに掲載されています。

ファイル

SHA-1ファイル名検出説明
7509B4C506C01627C1A4C396161D07277F044AC6input.htmHTML/Agent.HQMHTML形式のWPS Spreadsheetsのエクスプロイト - CVE 2024 7262。
08906644B0EF1EE6478C45A6E0DD28533A9EFC29WPS_TEST_DLL.dllWin32/TrojanDownloader.Agent.HRPダウンローダーコンポーネント。

ネットワーク

IPドメインホスティングプロバイダー最初に確認された日付詳細
162.222.214[.]48
131.153.206[.]231
rammenale[.]comPhoenixNAP2024-03-08次の段階をホスティングするC&Cサーバー。

MITRE ATT&CKの技術

この表は、MITRE ATT&CKフレームワークのバージョン15を使用して作成されています。

手法ID名前説明
リソース開発T1583.001ドメインAPT-C-60はC&Cサーバーのドメイン名を取得しています。
T1583.004サーバーAPT-C-60はC&C用のサーバーを取得しています。
T1608.001マルウェアのアップロードAPT-C-60の次の攻撃段階はC&Cサーバーにアップロードされています。
T1587.004エクスプロイトAPT-C-60はCVE-2024-7262のエクスプロイトを開発または購入しています。
実行T1203クライアントを実行するための攻撃APT-C-60はCVE-2024-7262を攻撃して、目的を達成しています。
T1204.001悪意のあるリンクAPT-C-60が使用するエクスプロイトは、ハイパーリンクをユーザーにクリックさせます。