概要
Unity 2017.1 以降 でビルドされた Android、Windows、macOS、Linux 向けのゲームとアプリケーションに影響するセキュリティの脆弱性が確認されました。この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。この脆弱性は、Unity アプリケーションでネイティブとマネージドの拡張をロードして実行することを可能にするコマンドライン引数に起因します。脆弱性がターゲットプラットフォームにどのように影響する可能性があるかを理解するには、プラットフォーム別テクニカルノート を参照してください。
重要: プロジェクトが 2017 から現在までのパッチ適用済みリリースのいずれかの Unity バージョンでビルドされた場合は、影響を受ける可能性があります。影響を受けるプロジェクトをもつすべての開発者が、対処する必要があります。
修正のオプション
Unity 2017.1 以降を使用して Windows、Android または macOS 用にゲームやアプリケーションを開発しリリースしている場合は、対処する必要があります。この脆弱性が Linux に与えるリスクは低いため、開発者は Unity のパッチ適用済みバージョンに更新することで、十分に保護されます。
Unity は 2019.1 以降のエディターのパッチ適用済みバージョンをリリースしました。アプリケーションが Unity 2019 以降でビルドされている場合、パッチ適用済みの Unity エディターを使用してアプリケーションをリビルドすることを推奨します。ただし、"ビルド済みアプリケーションにパッチを適用する" セクションで説明するように、プロジェクトをソースからリビルドできない場合や、2017/2018 バージョンでビルドを行った場合のために、パッチ適用ツールも用意しています。
1.パッチ適用済みの Unity エディターを使用してリビルドする (推奨)
影響を受ける各 Unity エディターバージョンのパッチ適用済みリリースをダウンロードできます。パッチ適用済みの Unity エディターをダウンロードして、アプリケーションのリビルドを行えます。
パッチを適用した Unity エディターバージョンを使用してアプリケーションをリビルドする手順は以下の通りです。
- アプリケーションのビルドに使用した Unity バージョン (例: Unity 6.1、Unity 2022.2 など) に一致する Unity エディターの最新リリースを ダウンロード します。
- Unity Hub
- Unity ダウンロードアーカイブ
- 更新したエディターで プロジェクトを開きます。
- アプリケーションを リビルド し、再テスト します。
- 配信チャンネルに 再度公開 します。
2.ビルド済みアプリケーションにパッチを適用する
ソースからリビルドすることができない (またはアプリケーションのリビルド中に修正プログラムを展開したい) 場合は、Unity アプリケーションパッチャー を使用して既存の Android、Windows、または macOS ビルドを更新します。
Unity アプリケーションパッチャーの使用方法は以下の通りです。
- Unity アプリケーションパッチャーをダウンロードします。 ツールを入手
- ライセンス契約、利用ガイド、詳細オプションを確認します。詳しくは、パッチャーのドキュメントを参照してください。
- 既存のビルドに対して パッチャーツールを実行 します。(Windows または macOS 用ビルドへパッチを適用するにはインターネット接続が必要です。)
- パッチ適用後に アプリケーションをテスト し、機能することを確認します。
- 配信チャンネルに 再度公開 します。
Unity アプリケーションパッチャーが異なるプラットフォームに対してどのように機能するかを理解するには、プラットフォーム別テクニカルノートを参照してください。
注意:
- パッチャーは、一部の改ざん防止またはチート対策ソリューションによって保護されているビルドとは互換性がありません。
- パッチ適用後は必ず 、アプリケーションの整合性と機能性を検証してください。
- Unity アプリケーションパッチャーツールは Unity 6.0 で開発されており、このツールを実行するには、対応する Windows または macOS のシステム要件 が適用されます。
プラットフォーム別テクニカルノート
以下のセクションでは、セキュリティの脆弱性が Android、Windows、macOS 用アプリケーションにどのように影響するか、Unity アプリケーションパッチャーが各プラットフォームでどのように動作するかについて説明します。
リリースストリームの一部のベータとパッチリリースが影響を受ける可能性があります。正式リリース以外のリリースで配信した場合は、影響を受けるバージョンの完全なリスト を参照してください。
注意: Google、Meta、Microsoft では、プラットフォームのセキュリティをさらに強化するために、OSレベルの対策も導入しています。それでも、Unity アプリケーションを完全に安全にするためには、パッチを適用するかリビルドする必要があります。
Android
注意: この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。
Android では、Unity アプリケーションが Unity 2019.1 以降を使ってビルドされた 場合は、特別な権限や設定に関係なく 対処する必要があります。
さらに、アプリケーションが Unity 2017 以降でビルドされ、かつ Mono ランタイム (32 ビットのみ) を使用している場合は、脆弱である可能性があります。正式リリース以外のリリースで配信した場合は、影響を受けるバージョンの完全なリスト を参照してください。
- Android では、一般にアプリケーションは互いに分離されており、脆弱性や誤った設定を悪用しなければ、通常アプリケーション間でコードのインジェクションはできません。
- この脆弱性が原因で、特別に細工されたインテントとコマンドライン引数
xrsdk-pre-init-library、または Mono でビルドされた 32 ビットアプリケーションのoverrideMonoSearchPathを使用して、デバイス上の他のアプリケーションが Unity アプリケーションを起動し、悪意のあるネイティブライブラリの挿入を許可する可能性があります。 - Android アプリケーションは、コマンドライン引数
datafolderやmonoProfilerに対して 脆弱ではありません。
Android での破壊的変更
Android でこの脆弱性に対処することに関連した破壊的変更はありません。
Android 用 Unity アプリケーションパッチャー
Android では、Unity アプリケーションパッチャーは APK または AAB を解凍し、脆弱なコードパスをブロックするために libunity.so と boot.config をローカルで変更してから、APK または AAB の再パッケージと再署名を行います。
Unity アプリケーションパッチャーは、脆弱なコードパスをブロックするために、libunity.so と boot.config の両方で 文字列 xrsdk-pre-init-library を 8rsdk-pre-init-library に変更します。このようにすると、引数の解析方法により、それをコマンドライン引数 (または Android の Intent Extra) として使用できなくなります。boot.config 設定としては引き続き機能するため、boot.config ファイル内でのすべての使用に対してもパッチが適用されます。
また、Unity アプリケーションパッチャーは、libunity.so 内の文字列 overrideMonoSearchPath の先頭文字を無効な Unicode 文字 0xC0 に置き換えることによって Mono を使用した 32 ビットビルドの引数 overrideMonoSearchPath を使えなくします。
Windows
注意: この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。
Windows のようなデスクトッププラットフォームでは、実行中のプロセスにコードを挿入するさまざまな方法があります。ただし、それらの方法は通常、システムの特権レベルとセキュリティ境界によって制限されています。ほとんどの場合、自身で開始したプロセスにのみコードを挿入することができ、それを行っても、自身のプロセスがすでに持っている能力以上の追加能力は許可されません。
ただし、この状況では、Unity アプリケーションが カスタム URL スキーマハンドラーとして登録されている場合、特権昇格に対して 脆弱である可能性があります。この登録は、自身のアプリケーションによって実行される場合もあれば (例えば、ディープリンクやブラウザーからの起動をサポートするため)、他のアプリケーション (サードパーティのゲームランチャーやストアフロントなど) によって実行される場合もあります。
サードパーティのアプリケーションによって自身のアプリケーションがスキーマハンドラーとして登録されることを防ぐ方法はなく、それを検出する方法さえないため、Unity では、予防策として Unity のすべての Windows 向けアプリケーションにパッチを適用すること を推奨します。
- 登録された URL スキームを使用すると、より低い整合性レベル (サンドボックス化されたプロセスや権限の低いプロセスなど) でコードを実行している攻撃者が、Unity のこの脆弱性を悪用してアプリケーションを起動し、DLL を挿入して、通常よりも高い権限で攻撃者が用意したコードをアプリケーションに実行させることができるようになります。
- インジェクションは、前述した脆弱なコマンドライン引数のいずれかを介して発生する可能性があります。
Windows での破壊的変更
- アプリケーションで
データフォルダーを再配置するためにコマンドライン引数-datafolderを使用する場合、代わりにカスタムデータフォルダーを 2 番目の引数として UnityMain 関数に渡す必要があります。 int UnityMain(HINSTANCE hInst, LPCWSTR customDataFolder, LPWSTR szCmdLine, int nCmdShow)- アプリケーションで、XR プロバイダーの切り替えのために
xrsdk-pre-init-libraryをコマンドライン引数として使用した場合は、OpenXR を使用するか、個別のビルドを提供することを推奨します。 overrideMonoSearchPathは削除されます。個別のアプリケーションをビルドするか、すべてのスクリプトを同じビルドに入れることを推奨します。
Windows 用 Unity アプリケーションパッチャー
Windows 向けビルドの場合、Unity アプリケーションパッチャーツールは、Unity のバージョンに適したパッチ適用済みの UnityPlayer.dll (または、Unity 2017.1 でビルドされたアプリケーションの場合は .exe) をダウンロードし、ビルドされたアプリケーションの脆弱なファイルの代わりとして置き換えます。
注意: Unity アプリケーションパッチャーは、Unity のサーバーからパッチ適用済みのバイナリを取得し、受け取る前にテストと検証が行われたことを確認します。
UnityPlayer.dll は、脆弱性のあるコマンドラインパラメーターをスキップするように修正されました。
xrsdk-pre-init-library は、boot.config 設定として引き続き機能します。
重要: アプリケーションでコマンドライン引数 -datafolder を使用して データフォルダー (Unity 2022.2 で導入) を再配置する場合、"Windows での破壊的変更" セクションに示されている新しいパターンを採用する必要があります。
macOS
注意: この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。
macOS では、カメラやユーザーのドキュメントフォルダーへのアクセスなど、多くの権限がアプリケーションごとに管理されています。これらの権限の不正使用を防ぐため、macOS には Hardened Runtime 機能を含む複数のメカニズムが実装されています。デフォルトでは、Hardened Runtime を使用してビルドされたアプリケーションは、署名されていないコードや、異なる署名を持つコードをロードすることができません。
Hardened Runtime を使用することは公証の要件であり、Mac App Store 以外で配布する場合に推奨されます。Mac App Store での配布の場合、厳密にはそれは必須ではなく、アプリケーションは少なくとも App Sandbox を使用する必要があります。App Sandbox により、システム上でアプリケーションがアクセスできる対象が制限されますが、アプリケーション自体のプロセスへのコードインジェクションは防げません。Hardened Runtime を使用しなくても、DYLD_INSERT_LIBRARIES などの手法がすでに可能であるため、この脆弱性によってその環境での悪用の可能性が高まることはありません。それでも Unity では、影響を受けるすべての macOS アプリケーションに対してパッチ適用またはリビルドを行い、脆弱性のあるコードパスを除去し、後で Hardened Runtime が有効化された場合や、Mac App Store 以外での配布に移行する場合でも、安全な状態を維持することをお勧めします。
アプリケーションが Unity 2017.1 以降 (Mono スクリプティングバックエンドを使用) または Unity 2019.1 以降 (任意のスクリプティングバックエンドを使用) でビルドされていて、Hardened Runtime とともに構築され、かつコードインジェクション保護を弱める 特定のランタイム例外 が有効になっている場合は、対処が必要です。アプリケーションを脆弱にする例外は以下の通りです。
- ライブラリ検証を無効にする (
com.apple.security.cs.disable-library-validation) — 署名されていない、または異なる署名を持つプラグインやフレームワークをロードすることを可能にします。これにより、引数xrsdk-pre-init-libraryまたはdatafolderの使用時に、悪意のあるネイティブの.dylibファイルがロードされる可能性があります。 - JIT コンパイルされたコードの実行を許可する (
com.apple.security.cs.allow-jit) — 引数datafolderまたはoverrideMonoSearchPathが悪用されると、悪意のあるマネージコードの実行が可能になる場合があります。この例外を許可することは、Mono スクリプトバックエンドのすべての使用の条件であることに注意してください。 - 署名されていない実行可能メモリを許可する (
com.apple.security.cs.allow-unsigned-executable-memory) — 同様に、引数datafolderが悪用されると、悪意のあるマネージコードの実行が可能になることがあります。 - アプリケーションが Unity 2023.2 以降でビルドされている場合。これらの例外がなくても
datafolderが悪用される可能性があります。
Hardened Runtime は通常、一般的なコードインジェクション方法をブロックし、そのような攻撃からアプリケーションを保護します。影響される Unity アプリケーションで上記のいずれかの例外が有効になっている場合、攻撃者はコマンドライン引数 xrsdk-pre-init-library、datafolder または overrideMonoSearchPath を介してコードを挿入できる可能性があります。
これにより、攻撃者がプロセス内に悪意のある .dylib またはマネージアセンブリを挿入できる可能性があります。アプリケーション自体にない権限へのアクセスを許可することはできません。
macOS での破壊的変更
- アプリケーションで
データフォルダーを再配置するために、コマンドライン引数-datafolderを使用する場合、代わりにシンボリックリンクを使用することを推奨します。 overrideMonoSearchPathは削除されます。個別のアプリケーションをビルドするか、すべてのスクリプトを同じビルドに入れることを推奨します。
macOS 用 Unity アプリケーションパッチャー
macOS プロジェクトの場合、Unity アプリケーションパッチャーツールは、Unity のバージョンに適したパッチ適用済みの UnityPlayer.dylib をダウンロードし、ビルド済みのアプリケーションの脆弱なファイルと置き換えます。boot.config 変数 xrsdk-pre-init-library が 8rsdk-pre-init-library に変更されました。これにより、コマンドライン引数として使用できなくなります。引数の解析方法が理由です。引き続き boot.config 設定として機能するため、boot.config 内でのすべての使用に対してもパッチを適用します。
Unity アプリケーションパッチャー 1.3 の新しい動作
- パッチャーは、Hardened Runtime またはエンタイトルメントに関係なく、すべての macOS アプリケーションの
UnityPlayer.dylibにパッチを適用します。 com.apple.security.cs.disable-library-validationエンタイトルメントなしに Hardened Runtime を使用するアプリケーションには、パッチ適用後にパッチャーによる署名は行われません。- パッチャーがアプリケーションに署名しない場合、手動で署名しないと実行できないという警告が表示されます。
- この変更により、パッチが適用されたアプリケーションは、開発者が明示的に再署名しない限り、セキュリティが弱まった状態で実行されなくなります。
アプリケーションがパッチャーによって署名されると、ローカルテストにアドホック署名が使用されます。アプリケーションが以前に開発者 ID 証明書で署名され、Apple による公証を得ている場合、パッチ処理によってその公証は無効化されます。ソフトウェア配布に関する Apple の推奨事項 に従って、リリース前に再署名と再公証を行ってください。
Linux
注意: この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。
Linux では、Unity の脆弱なコマンドライン引数は LD_PRELOAD メカニズムと同様に機能します。Linux の標準的なセキュリティモデルのもとでは、これらの引数は権限の境界を超えることはなく、したがって、LD_PRELOAD で起こりうるリスクに比べて追加のリスクをもたらすことはありません。
AppArmor、Bubblewrap、Firejail、SELinux などの環境では、制限された処理がその制限を超えて Unity アプリケーションを起動できる場合、すでに任意のコード実行が可能であり、この脆弱性によってさらにリスクが増加することはありません。特定の SELinux または AppArmor の設定では、一般的なインジェクション方法 (LD_PRELOAD、ptrace) はブロックされる可能性がありますが、任意の引数を使用して Unity を起動することは可能です。この場合、脆弱な引数がポリシーの制限を回避し、有効な攻撃経路となる可能性があります。
軽減策
リスクプロファイルが低いことから、Unity アプリケーションパッチャーの Linux バージョンはリリースされて いません。必要に応じて、特にアクセス制御ポリシーが厳格な環境では、脆弱なコードパスを取り除くために、パッチ適用済みの Unity エディターを使用して Linux アプリケーションをリビルドしてください。
その他のプラットフォーム (iOS、コンソールなど)
iOS を含む他のすべての Unity が対応するプラットフォームでは、この脆弱性が悪用可能であることを示す報告はありません。セキュリティを最大限に高めるために、パッチを適用した最新の Unity エディターを使用してアプリケーションをリビルドすることを推奨します。
リソース
- パッチ適用済み Unity エディターをダウンロード
- Unity アプリケーションパッチャーをダウンロード
- Unity セキュリティアドバイザリー
- CVE の詳細
- Unity Support Services
皆さんのアプリケーションを保護しユーザーを保護するために、対処が必要です。ご質問やサポートについては、Unityサポート までご連絡ください。
FAQ
この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。CVE セキュリティレーティングは “重要 (High)” であり、ゲームやアプリケーションをできる限り早く更新することを強くお勧めします。
CVE (共通脆弱性識別子) は、攻撃の容易さや潜在的な被害などの要素に基づいてセキュリティの脆弱性を開示する業界標準のプロセスです。深刻度の評価は、注意 (Low)、警告 (Medium)、重要 (High)、緊急 (Critical) に分かれています。評価が “重要 (High)” の場合は、ゲームまたはアプリケーションに対して速やかにパッチを適用することが推奨されます。
包括的な技術的詳細については、パッチ適用ツール、修正ガイド、および セキュリティアドバイザリー を参照してください。
Valve に確認したところ、Steam クライアント向けに追加の保護策を提供するとのことです。Windows に関しては、Microsoft Defender が更新済みであり、脆弱性を検出しブロックします。
これらのプラットフォームに関しては、この脆弱性が悪用可能であることを示唆する報告はありません。最大限の保護のために、お使いの Unity バージョンに応じた最新のパッチリリースのご使用を常にお勧めします。
Unity の更新されたバージョンは、脆弱性のないプラットフォームにも使用できます。ただし、影響を受けないプラットフォームで Unity バージョンをアップグレードできない場合は、脆弱なプラットフォームのビルド後のステップとして、パッチ適用ツールをビルド処理に統合することをお勧めします。
Microsoft Defender に加えて、Crowdstrike、Fortinet、Sophos、BitDefender、その他の EDR (Endpoint Detection and Response) ベンダーと協力して、保護強化に努めています。
最初に脆弱性を見つけたのはサードパーティのセキュリティ研究者です。
弊社の知る限り、この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。包括的な技術的詳細については、パッチ適用ツール、修正ガイド、および セキュリティアドバイザリー を参照してください。
弊社はこの脆弱性に対処する予防的な修正プログラムを提供しており、それはすでにすべての開発者に対して利用可能になっています。さらに、プラットフォームパートナーは、プラットフォームのセキュリティをさらに強化しました。
- 開発者が何も対処しないことを選んだ場合、2017.1 以降でビルドされたアプリケーションやゲームに脆弱性が残る可能性があります。特に、今後問題が悪用された場合に、エンドユーザーやデバイスの機能がリスクにさらされる可能性があります。
- Google、Meta、および Microsoft によって、プラットフォームのセキュリティを確保するためにさらなる対策が講じられましたが、開発者も予防策としてゲームやアプリケーションにパッチを適用するか、再コンパイルすることを強くお勧めします。
- エンドユーザーにも、デバイスとアプリケーションを最新バージョンのソフトウェアに更新し、自動更新をオンにして、疑わしいダウンロードの使用を避け、セキュリティのベストプラクティスに従うことを強くお勧めします。
弊社は、社内外のセキュリティ研究者との継続的な連携の一環として "責任ある開示" ポリシーを採用しており、さらに、バグ報奨金プログラムを実施しています。バグ報奨金プログラムの詳細については、security@unity3d.com にお問い合わせいただくか、Bugcrowd のバグ報奨金プログラムをご覧ください。
- 弊社では、リスクや脆弱性を特定し、製品のセキュリティをさらに高める機会 (新たな発見に応じてツールやプロセスを更新するなど) として活用し、包括的な SSDLC (安全なソフトウェア開発のためのライフサイクル) プログラムを継続的に進化させています。
- 類似した脆弱性を特定し対処する能力を高めるために、さらに新しいスキャンツールを導入してツール戦略の強化を進め、更新したガイドラインを適用し、包括的な侵入テストプロセスを含むステップをテストプロセスに追加しました。
既知のセキュリティ上の脆弱性を持つアプリケーションを削除するポリシーに関しては、該当するアプリストアに問い合わせてください。
- この脆弱性が悪用された証拠はなく、エンドユーザーに対する影響も発生していません。
- 弊社はこの脆弱性に対処する予防的な修正プログラムを提供しており、それはすでにすべての開発者に対して利用可能になっています。さらに、プラットフォームパートナーは、プラットフォームのセキュリティとエンドユーザーの保護をさらに強化しました。
- 顧客に対して、デバイスとアプリケーションを最新バージョンのソフトウェアに更新し、自動更新をオンにして、疑わしいダウンロードの使用を避け、セキュリティのベストプラクティスに従うように促すことができます。
- Android では、パッチ適用ツールは脆弱性が悪用されないように libunity.so ファイルを修正します。
- Windows では、パッチ適用ツールはゲームの Unity Runtime バージョンに対応したパッチ適用済み UnityPlayer.dll をダウンロードし、元のファイルと置き換えます。
- macOS では、パッチ適用ツールはゲームの Unity Runtime バージョンに対応したパッチ適用済み UnityPlayer.dll をダウンロードし、元のファイルと置き換えます。
- アプリケーションが改ざん防止技術を使用している場合、パッチは機能しないことに注意してください。修正を安全かつ確実に適用する唯一の方法は、アプリケーションをソースからリビルドすることです。
大抵のゲームで、この修正がゲームを壊す可能性は低いと考えられます。詳細については、修正ガイド を参照してください。
弊社と Google との協力により、すでにライブであり、かつ弊社が提供するパッチツールを使用してパッチを適用した Android SDK 向けのアプリケーションに限定して、提出ルールの一時的例外が認められます。この例外は、独自のバージョン要件を持つ他の Google SDK には適用されず、再提出前にこれらの SDK を更新が必要となる場合があります。詳細情報や特定の例外が必要な場合は、Google にお問い合わせください。
アプリケーションのうち、Mono ランタイムを使用して Unity 2017 または 2018 でビルドされ今でも流通しているものの数はきわめて少なく、これらのバージョンに修正をバックポートするために遅延が発生してしまうことは適切ではないと判断しました。Unity 2017 または 2018 でビルドされたアプリケーションの場合は、パッチ適用ツールを使用することでアプリケーションを十分保護できます。
パッチ適用ツールが適切なソリューションとならない場合は、support.unity.com でチケットを提出してください。
Android、Windows、macOS と比較すると、Linux ではこの脆弱性によるリスクが大幅に低くなります。最大限の保護のために、お使いの Unity バージョンに応じた最新のパッチリリースのご使用を常にお勧めします。
Pico はサポートされている Unity プラットフォームではないので、プラットフォームが脆弱かどうか確かではありません。Android ベースであるため、アプリケーションの安全のために更新する必要があります。パッチ適用ツールは Pico のプラットフォームと互換性があるように構築されていません。また、適用ツールが Pico のアプリケーション強化の機能と競合するという報告が、パッチ開発者からいくつかあげられています。アプリケーションの脆弱性を確実に解決したい開発者に、パッチ適用済みのエディターリリースを使ってゲームをリビルドすることをお勧めします。
どのプラットフォームであっても、ゲームやアプリケーションを削除する必要はありません。この脆弱性が悪用された証拠はなく、ユーザーまたはお客様に対する影響も発生していません。Unityは、脆弱性に対処する修正を開発者に予防的に提供しており、プラットフォームパートナーの多くも追加の保護を導入しています。