iOS 18.6.1 DNG脆弱性詳細分析 (CVE-2025-43300)
脆弱性概要
CVE番号: CVE-2025-43300
CVSSスコア: 8.8 (深刻)
脆弱性タイプ: 境界外書き込み (Out-of-bounds Write)
影響コンポーネント: Apple ImageIOフレームワーク
影響バージョン: iOS 18.6.1以前、macOS Sonoma 14.7.7以前
修正バージョン: iOS 18.6.2、macOS Sonoma 14.7.8、macOS Sequoia 15.6.1
Apple社は、この脆弱性が特定の個人を対象とした「極めて複雑な攻撃」に使用されたことを確認しており、悪意のある画像ファイルの処理によってメモリ破損と任意のコード実行を引き起こす可能性があります。
技術的背景
DNGファイル形式アーキテクチャ
DNG (Digital Negative) はAdobeが開発したオープンなRAW画像形式であり、本質的に拡張されたTIFFコンテナです。DNGファイルは階層構造を採用しています。
TIFFコンテナ層: 画像メタデータ、ディレクトリ構造 (IFD)、サブディレクトリ (SubIFD) を含みます
JPEGロスレス圧縮層: RAW画像データはJPEGロスレス圧縮アルゴリズムを使用して保存されます
メタデータシステム: TIFFタグシステムは画像解析パラメータを制御します
JPEGロスレス圧縮メカニズム
JPEGロスレス圧縮はSOF3 (Start of Frame 3) マークを使用して画像構造を定義します。
SOF3マーク構造:
- マークID: 0xFFC3
- 長さフィールド: 2バイト
- 精度: 通常8または16ビット
- 画像の高さおよび幅
- コンポーネントカウント: 色コンポーネント数を定義します (重要なフィールド)
- 各コンポーネントのサンプリング係数
SamplePerPixel TIFFタグ:
- タグID: 277 (0x115)
- 各ピクセルの色コンポーネント数を定義します
- メモリ割り当てとバッファ計算に使用されます
脆弱性位置分析
脆弱性は、AppleのImageIOフレームワークのJPEGロスレスデコンプレッション実装にあり、RawCamera.bundleコンポーネント内にあります。このコンポーネントは、DNGファイルを含むさまざまなカメラRAW形式のJPEGロスレス圧縮データを処理します。
シンボルが剥ぎ取られているため、具体的な関数呼び出しパスを追跡することは困難ですが、脆弱性のトリガーポイントは、コンポーネントバッファの割り当てとデータ書き込みの境界チェックロジックにあります。
脆弱性トリガーメカニズムの詳細
重要なバイトの修正分析
最初の修正 (0x2FD00): SamplePerPixelフィールド
1元の値: 01 (1コンポーネント/ピクセル)
2修正値: 02 (2コンポーネント/ピクセル)この修正は、TIFFパーサーに各ピクセルが2つの色コンポーネントを含むことを伝え、システムはそれに応じて処理バッファの適切なサイズを割り当てます。
2番目の修正 (0x3E40B): SOF3コンポーネントカウント
1元の値: 02 (2コンポーネント)
2修正値: 01 (1コンポーネント)この修正は、JPEGデコーダーに実際には1つの色コンポーネントデータのみを処理する必要があることを伝えます。
メタデータ不一致メカニズム
これらの2つの修正は、致命的なメタデータ不一致を生み出します。
- バッファ割り当てフェーズ: システムは、SamplePerPixel = 2に基づいて、2つのコンポーネントのメモリ空間を割り当てます
- データ処理フェーズ: JPEGデコーダーは、SOF3コンポーネントカウント = 1に基づいて、処理する必要があるコンポーネントが1つだけであると認識します
- 境界外アクセス: システムが2番目のコンポーネントデータにアクセスしようとすると、境界外書き込みが発生します
コードパス差異
すべてのDNGファイルがこの脆弱性をトリガーするわけではなく、特定の条件を満たす必要があります。
- JPEGロスレス圧縮 (SOF3マーク) を使用している
- 特定のSubIFD構造を含む
- 特定のカメラまたはツールによって生成されている
Adobe DNGコンバーターまたはdnglabなどの標準ツールを使用して生成されたDNGファイルは、通常、脆弱なコードパスに到達しません。
メモリメカニズムの深い分析
ヒープメモリ割り当て戦略
ImageIOフレームワークは、DNGファイルの処理時に動的なメモリ割り当てを採用します。
- メタデータ解析: TIFFタグを読み取り、画像パラメータを決定します
- バッファ割り当て: SamplePerPixelに基づいて必要なメモリサイズを計算します
- JPEGデコード: デコーダーを初期化し、コンポーネントバッファを割り当てます
- データ書き込み: 色コンポーネントデータを順番に処理します
境界チェックの欠落
重要な問題は、バッファ境界チェックの欠落です。
1// 擬似コード例
2int samples_per_pixel = tiff_get_samples_per_pixel(); // 値は2
3int jpeg_components = sof3_get_component_count(); // 値は1
4
5// TIFFタグに基づいてバッファを割り当てます
6buffer = allocate_buffer(width * height * samples_per_pixel);
7
8// JPEGデコーダー処理 - 境界チェックがありません
9for(int i = 0; i < jpeg_components + extra_access; i++) {
10 write_component_data(buffer + i * component_size, data); // 境界外書き込み
11}メモリ破損の影響
境界外書き込みは、次のものを影響させる可能性があります。
- 隣接するヒープメモリブロック
- メモリ管理構造 (mallocメタデータなど)
- その他オブジェクトの仮想関数テーブルポインター
- 重要なシステムデータ構造
攻撃ペイロードの構築
POC構築手順
研究者によって提供された方法に基づいています。
-
基本的なDNGファイルの取得:
ダウンロード先: https://www.dpreview.com/sample-galleries/4949897610/pentax-k-3-mark-iii-sample-gallery/2771457523 -
正確なバイト修正:
bash1# SamplePerPixel (0x2FD00の位置) を修正 2xxd -p sample.dng | sed 's/01/02/' | xxd -r -p > modified.dng 3 4# SOF3コンポーネントカウント (0x3E40Bの位置) を修正 5printf '\x01' | dd of=modified.dng bs=1 seek=$((0x3E40B)) conv=notrunc -
脆弱性のトリガー:
- AirDropを使用してiOSデバイスに送信する
- 写真アプリで開く
- その他の画像処理アプリを使用して読み込む
攻撃ベクトルの特徴
隠蔽性が高い: 修正されたファイルは、ほとんどのビューアで正常に表示されます
伝播が容易: 様々なチャネル (ソーシャルメディア、メールなど) を介して伝播できます
検出が困難: 詳細なファイル形式分析が必要になります
影響範囲が広い: 修正されていないiOSおよびmacOSデバイスすべてに影響します
防御策と修正分析
Apple社の修正
Apple社は、影響を受けるシステムに「改善された境界チェック」を実装しました。
- TIFFタグとJPEGマークの相互検証を強化
- コンポーネントバッファへのアクセス前に境界チェックを追加
- メモリの割り当てと解放のセキュリティを改善
一般的な防御戦略
開発者向け:
- 入力検証: ファイル形式のすべてのフィールドを厳密に検証する
- 境界チェック: すべてのバッファアクセス前に境界検証を行う
- 相互検証: 異なるデータソース間の整合性を検証する
- 安全な割り当て: 安全なメモリ割り当てとアクセスパターンを使用する
ユーザー向け:
- タイムリーなアップデート: セキュリティアップデートをすぐにインストールする
- 慎重な処理: 出所不明の画像ファイルを開かない
- 隔離環境: 疑わしいファイルを安全な環境で処理する
検出と防御
システム管理者は、次のことを検討できます。
- ファイル形式検証ツールを導入する
- 異常なメモリアクセスパターンを監視する
- アプリケーションサンドボックス制限を実装する
- 静的解析ツールを使用して類似の脆弱性をチェックする
免責事項: この分析は、セキュリティ研究と防御の目的でのみ使用してください。関連技術を悪意のある攻撃や違法行為に使用しないでください。