Pixar OpenUSD には、さまざまな攻撃に利用される可能性がある複数の脆弱性が含まれています。
OpenUSD は「Open Universal Scene Descriptor」の略称です。Pixar はこのソフトウェアを使用してさまざまなアニメーションタスクを実行します。たとえば、複数の要素で構成される任意の 3D シーンの入れ替えなどのタスクです。OpenUSD はプロのアニメーションスタジオ向けに開発されたソフトウェアであるため、拡張性とスピードを重視した設計となっています。OpenUSD は、デジタル アニメーション プロセスのさまざまな側面を結び付けるパイプラインとして機能します。OpenUSD は、ほとんどのユースケースで安定的に入力を処理できるよう設計されているため、セキュリティが犠牲になっている部分が見られます。
Apple 社の ARKit(拡張現実)、SceneKit(3D シーン構成)、ModelIO(3-D モデリングおよびアニメーション)フレームワーク内では、USD ファイル形式自体が交換ファイル形式として使用されます。最近 Apple 社は、同社の拡張現実プラットフォームの基盤として USD を採用することを決定しており、今後 USD が攻撃者の関心を引く可能性も考えられます。macOS と iOS の両方のプラットフォームで AR アプリケーションが拡張されることになるため、研究者の間ではこのソフトウェアの脆弱性が大きな関心事となっています。
macOS のデフォルト設定では、QuickLook を通じてサムネイルハンドラとプレビューハンドラの両方が登録され、USD ファイル形式のサムネイル表示とプレビューに使用されます。USD ファイルを開く際にデフォルトで起動するアプリケーションは、プレビューアプリケーションです。iOS では、AR アプリケーションがデフォルトのハンドラになります。USD ファイルは、Web ページ内に埋め込んだり、メッセージを通じて送信したりすることができます。ファイルをクリックすると、AR アプリケーションが開きます。
このソフトウェアには数種類の脆弱性が含まれています。一部のバグが攻撃者に悪用されると、被害者のマシン上で悪意のあるアクションが実行されて、メモリが破損する可能性があります。Talos は情報開示方針に従って Pixar 社 および Apple 社と協力し、今回の脆弱性が解決済みであり、影響を受けた利用者向けにアップデートが利用可能であることを確認しています。
脆弱性の詳細
Pixar OpenUSD バイナリファイル形式の圧縮された値の rep 配列に起因するコード実行の脆弱性(TALOS-2020-1101/CVE-2020-6155)
Pixar OpenUSD 20.05 には、USD バイナリファイル内で圧縮された値の rep 配列を解析する際にヒープオーバーフローを引き起こす脆弱性が存在します。細工された不正なファイルによりヒープオーバーフローが引き起こされ、その結果として任意コードをリモートで実行される危険性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
Pixar OpenUSD バイナリファイル形式のトークン文字列に起因する情報漏えいの脆弱性(TALOS-2020-1103/CVE-2020-13494)
Pixar OpenUSD 20.05 には、USD バイナリファイル内の圧縮文字列トークンを解析する際にヒープオーバーフローを引き起こす脆弱性が存在します。細工された不正なファイルによってヒープオーバーフローが引き起こされ、その結果として境界外メモリアクセスが発生し、情報漏えいが起きる危険性があります。攻撃者はこの脆弱性をエクスプロイトすることで緩和策をバイパスし、別のエクスプロイトを実行できる可能性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
Pixar OpenUSD バイナリファイル形式のオフセットシークに起因する情報漏えいの脆弱性(TALOS-2020-1104/CVE-2020-13495)
Pixar OpenUSD 20.05 には、USD バイナリファイルのファイルオフセットを処理する際にエクスプロイト可能な脆弱性が存在します。細工された不正なファイルによって任意の境界外メモリアクセスが引き起こされ、機密情報の漏えいが起きる危険性があります。攻撃者はこの脆弱性をエクスプロイトすることで緩和策をバイパスし、別のエクスプロイトを実行できる可能性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
Pixar OpenUSD バイナリファイル形式のインデックスタイプ値に起因する情報漏えいの脆弱性(TALOS-2020-1105/CVE-2020-13496-CVE-2020-13498)
Pixar OpenUSD 20.05 には、特定のエンコードタイプを解析する際にエクスプロイト可能な脆弱性が存在します。細工された不正なファイルによって任意の境界外メモリアクセスが引き起こされ、情報漏えいが起きる危険性があります。攻撃者はこの脆弱性をエクスプロイトすることで緩和策をバイパスし、別のエクスプロイトを実行できる可能性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
Pixar OpenUSD バイナリファイル形式の圧縮解除パスの再構築に起因するメモリ破損(TALOS-2020-1120/CVE-2020-13520)
Pixar OpenUSD 20.05 には、USD バイナリファイルからパスを再構築する際に境界外メモリ破損を引き起こす脆弱性が存在します。細工された不正なファイルにより境界外メモリ変更が引き起こされ、リモートでコードを実行される危険性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
Pixar OpenUSD バイナリファイル形式の仕様に起因するメモリ破損(TALOS-2020-1125/CVE-2020-13524)
Pixar OpenUSD 20.05 には、USD バイナリファイルからパスを再構築する際に境界外メモリ破損を引き起こす脆弱性が存在します。細工された不正なファイルにより境界外メモリ変更が引き起こされ、リモートでコードを実行される危険性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
Pixar OpenUSD の SDF レイヤパスに起因するリモートコード実行の脆弱性(TALOS-2020-1145/CVE-2020-13531)
Pixar OpenUSD 20.08 には、参照パスのテキスト形式 USD ファイルを処理する際に解放済みメモリ使用(use after free)を引き起こす脆弱性が存在します。細工されたファイルにより解放済みメモリ使用が引き起こされ、メモリ破損が発生して任意のコードが実行される危険性があります。攻撃者がこの脆弱性をトリガーするには、被害者に不正なファイルを送り付けて開かせる必要があります。
脆弱性に関する詳細は、アドバイザリ全文をご覧ください。
脆弱性の詳細
USD では、ファイルタイプ(拡張子)として「.usdz」、「.usda」、「.usdc」の 3 種類が定義されています。一部のファイルでは、短縮形の「.usd」という拡張子も使用できます。USDZ は圧縮されていない ZIP アーカイブで、USD モデルやその他のアセット(テクスチャなど)が格納されます。
上記の「toy_biplane.usdz」サンプルファイルには、「toy_biplane.usdc」と、それに関連する PNG ファイル形式のテクスチャが含まれています。
USDA ファイル形式と USDC ファイル形式の使用目的は同じですが、まったく異なる形式です。USDA の「A」は ASCII を表します。このファイルタイプでは、USD のモデルやシーンがテキスト形式で表現され、人間にも判読できる内容となっています。一方、USDC は、保存や読み込みを高速に行えるバイナリファイルです。2 つのファイルタイプには完全な互換性があり、いずれの形式でも「.usd」拡張子を使用できます。その場合、ファイルタイプの判別はソフトウェアによって行われます。
USD パーサーは、macOS と iOS に追加されて以来、不正な入力の危険にさらされています。そこで Talos では、これらのファイル形式を詳しく調べ、対応するソフトウェアの潜在的な脆弱性を調査することにしました。
まず、バイナリファイル形式の分析を行いました。USD バイナリファイル形式の内容は、簡単に言うと、USD ファイルに保存されるモデル、シーン、アセットをシリアル化したものです。このファイル形式のトップレベルは非常にシンプルです。まず、目次を示すヘッダーがあり、目次では 6 つの異なるセクション(トークン、文字列、フィールド、フィールドセット、パス、仕様)が示されます。エンコーディングはセクションごとに異なります。文字列配列のように単純なセクション(トークン)もあれば、さまざまな種類のエンコード済みデータを含む複雑なフィールドもあります。ファイルを開くと、これらすべてが解析され、メモリ内のモデルが再構築されます。今回明らかになった脆弱性からわかるように、データの検証はほとんど行われていません。
前述のように、USDC ファイルと USDA ファイルには互換性があり、情報を失うことなく相互に変換できます。OpenUSD には、相互変換を行うためのユーティリティ(usdcat)も用意されています。プレビューにはバイナリファイル形式を使用し、手動での検査や編集にはテキスト形式を使用するのが一般的なためです。次の例は、USD アセットのテキスト表現を示しています。
この例ではキューブのモデルが定義されていて、既存のプリミティブが使用されています。このテキスト表現はプログラミング言語に似ていますが、実際にはマークアップ言語に近いものです。冒頭にはファイルタイプとバージョンを定義するヘッダーがあり、バイナリファイル形式と区別するために使用されます。その後には、他のスキーマで意味が定義されているさまざまなプロパティの設定が続きます。その後には、「mesh」と呼ばれる「prim」(プリミティブ)の定義があります。mesh には別の Scope 型の定義がネストされ、その中にキューブを表す mesh の定義が含まれます。キューブは、特定の数の頂点を持つ面のメッシュとして定義されます。USD ファイルでは、こうしたネスト構造が一般的に使用されます。このモデルを「cube.usd」として保存すると、他のモデルやシーンで参照またはインポートしたり、別途「合成」したりできるようになります。この言語で表現できる概念は多岐にわたるため、パーサーとレンダラーは非常に複雑になっています。そのため、文法ベースのファジングを目論む攻撃者にとって格好のターゲットとなっています。
いずれのファイル形式でも極めて複雑な表現が可能であるため、攻撃者にエクスプロイトされる可能性が非常に高くなっています。異なる USD ファイル間で相互参照が可能であり、複数の USD ファイルを 1 つの USDZ アーカイブにパッケージ化できるため、最新のプラットフォームに存在するエクスプロイト緩和策が簡単にバイパスされる可能性があります。
脆弱性が確認されたバージョン
Talos は検証により、TALOS-2020-1145 を除くすべての脆弱性が、Pixar OpenUSD バージョン 20.05 および Apple macOS Catalina バージョン 10.15.3 に影響することを確認済みです。TALOS-2020-1145 はバージョン 20.08 および 10.15.6 に影響します。
カバレッジ
脆弱性のエクスプロイトは、以下の SNORTⓇ ルールで検出できます。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新のルールの詳細については、Firepower Management Center または Snort.org を参照してください。
Snort ルール:54415、54416、54467 〜 54472、54488 〜 54493、54922、54923
本稿は 2020 年 11 月 12 日に Talos Group のブログに投稿された「Vulnerability Spotlight: Multiple vulnerabilities in Pixar OpenUSD affects some versions of macOS」の抄訳です。