Appleの最新Mach-Oアーカイブパーサーに新たに開示されたメモリ安全性の脆弱性により、悪意ある静的ライブラリがXcodeのビルドツールをクラッシュさせたり、ビルドログを通じて限定的なメモリ情報漏洩を引き起こしたりする可能性があることが分かりました。
この問題は、Appleの新しいリンカであるld-primeが使用するパーサーに加え、libtool、ranlib、そして最新のXcodeおよびCommand Line Toolsインストール環境におけるdyldinfoにも影響する可能性があります。
SecureLayer7の研究者は2026年5月23日にこのバグをApple Product Securityに報告しましたが、90日以上経過してもパッチの提供や対応予定の告知はなかったと述べています。
この脆弱性はmacho::Archive::Entry::name()に存在します。これはUnixのarアーカイブメンバーヘッダー内にある16バイトのar_nameフィールドから末尾のスペースを取り除くルーチンです。静的ライブラリ(.aファイル)は、コンパイル済みのオブジェクトファイルをパッケージ化する際にこのアーカイブ形式を使用します。
このパーサーは符号なしのsize_t型カウンターを使用しており、名前フィールド内にスペースが含まれている間、繰り返しカウンターを減算します。名前フィールドがすべてスペースで構成された不正なアーカイブメンバーを用意すると、カウンターがゼロを下回って減算され続け、SIZE_MAXへとラップアラウンドしてしまい、フィールドの先頭を超えて逆方向に読み込みを継続してしまいます。
このルーチンは、不正な名前を拒否する代わりに、有効なポインタと最大値に近い長さを持つstd::string_viewを返してしまいます。この破損した長さの値は、その後ツールチェーン内を伝播し、後続のフォーマット処理や文字列割り当て処理にまで影響を及ぼします。
研究者らは、小さなデータのみで構成されたアーカイブから3種類の結果を実証しました。悪意あるライブラリは、実行コードや権限昇格、ユーザーの操作、認証を一切必要とせず、ビルド入力として供給されるだけで済みます。
別の概念実証(PoC)では、範囲外への前方読み込みがアーカイブのマッピング領域を越え、隣接する実行可能ファイルのマッピング領域にまで達しました。このツールは複数の外部バイトを標準エラー出力に表示したとされ、限定的な情報漏洩状態が生じることが確認されています。
SecureLayer7は、CIログは一般的に保持・複製され、開発者やサードパーティサービスからアクセス可能な状態に置かれることが多いため、特に注意が必要だと指摘しています。実際の攻撃ベクトルとしては、汚染されたサードパーティ製、あるいは間接的な依存関係にある.aファイルが想定されます。
ビルドシステムは、パッケージレジストリやベンダー、ソースリポジトリ、社内のアーティファクトストアなどから、コンパイル済みの静的ライブラリを日常的に取り込んでいます。そのため、依存関係が侵害されると、ローカルの開発者によるビルドや無人で実行されるCIジョブが妨害される恐れがあります。
今回の報告によれば、Appleの旧来型リンカであるld-classicは、より古いcctoolsアーカイブ解析コードを使用しているため、この脆弱性の影響を受けません。影響はAppleの新しいツールチェーンに集中しており、このツールチェーンはXcode 15以降、arm64、arm64e、x86_64向けビルドにおけるデフォルトのリンカ経路となっています。
組織は、外部から入手した静的アーカイブを、信頼できないビルド入力として扱うべきです。
この脆弱性は、コンパイル時に処理される不正な形式のデータが、たとえそのライブラリが一度も実行されなかったとしても、ソフトウェアサプライチェーンにおけるセキュリティ上の問題になり得ることを浮き彫りにしています。
16,000以上の組織から得られる最新のインテリジェンスにより、脅威検出率を58%向上。TIフィードを統合し、貴社のSOCを強化しましょう
翻訳元: https://cyberpress.org/apple-xcode-mach-o-parser-flaw/