CVE-2025-43300: iOS/macOS DNG画像処理におけるメモリ破壊
概要
CVE-2025-43300 は、Apple の画像処理フレームワークにおける深刻なメモリ破壊の脆弱性で、iOS 18.6.1 および macOS システムに影響します。この脆弱性は RawCamera.bundle 内の JPEG Lossless デコードコードに存在し、DNG ファイル内の TIFF メタデータと JPEG ストリームパラメータの不整合によって引き起こされます。
脆弱性の詳細
根本原因
この脆弱性は、DNG(Digital Negative)ファイルにおけるメタデータとストリームの不整合に起因します:
- TIFF ヘッダー内の SamplesPerPixel メタデータは、期待されるカラーコンポーネントを示します
- JPEG Lossless ストリーム内の SOF3 コンポーネント数 は、実際のデータコンポーネントを指定します
- これらの値が異なる場合、割り当てと処理が不整合になります
メモリ破壊のフロー
1. パーサーが TIFF メタデータから SamplesPerPixel を読み取る(例: 2コンポーネント)
2. システムがバッファを割り当てる: width × height × 2コンポーネント
3. JPEGデコーダーが SOF3 コンポーネント数を読み取る(例: 1コンポーネント)
4. デコーダーは不整合な想定に基づいてデータを書き込む
5. 割り当てられた量よりも多くのデータが書き込まれるとバッファオーバーフローが発生する
攻撃ベクトル
- ゼロクリックの脆弱性: ユーザーの操作は不要
- 自動処理: DNG ファイルの表示、インポート、または受信によってトリガーされます
- クロスプラットフォームへの影響: iOS および macOS システムの両方に影響します
- メモリ破壊: アプリケーションのクラッシュや潜在的なコード実行につながる可能性があります
ツール概要
このリポジトリには、CVE-2025-43300 を分析および再現するための 2 つの Python ツールが含まれています:
1. DNG脆弱性アナライザー (dng_vulnerability_analyzer.py)
目的: DNG ファイル構造を分析して脆弱性の条件を特定します
主な特徴:
- IFD および SubIFD を含む TIFF/DNG ファイル構造を解析します
- SamplesPerPixel メタデータタグを特定します
- JPEG Lossless SOF3 マーカーとコンポーネント数を識別します
- メタデータとストリームの不整合を検出します
- 変更のための正確なバイトオフセットを報告します
使用方法:
python3 dng_vulnerability_analyzer.py <dng_file>
出力:
- ファイル構造の分析
- メタデータタグの位置と値
- JPEG ストリームのコンポーネント情報
- 脆弱性の評価
- POC 作成のための具体的なオフセット
2. 安全な Hex 修正ツール (hex_modifier.py)
目的: 特定のバイトを安全に変更して概念実証(POC)ファイルを作成します
主な特徴:
- 変更前に期待されるバイト値を検証します
- ファイル追跡用の SHA256 ハッシュを作成します
- バイナリ差分レポートを生成します
- 偶発的な破損を防ぐための安全チェックを実装します
- 手動および自動の両方の POC 作成をサポートします
使用方法:
# 既知の脆弱なオフセットを使用してPOCを作成
python3 hex_modifier.py create-poc <input.dng>
# 手動によるバイト修正
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# 差分レポートの生成
python3 hex_modifier.py diff <original.dng> <modified.dng>
POC 作成プロセス
ステップ 1: 対象ファイルの分析
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
これにより以下が特定されます:
- SamplesPerPixel メタデータの位置
- JPEG SOF3 コンポーネント数の位置
- 現在の値と推奨される変更
ステップ 2: 脆弱なサンプルの作成
POC には 2 つの特定のバイト変更が必要です:
- SamplesPerPixel メタデータの増加(通常は 1 から 2 へ)
- SOF3 コンポーネント数の減少(通常は 2 から 1 へ)
python3 hex_modifier.py create-poc IMGP0847.DNG
ステップ 3: POC の検証
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
不整合が存在し、脆弱性がトリガーされることを確認します。
POC が機能する理由
技術的メカニズム
-
割り当てフェーズ:
- 画像パーサーが SamplesPerPixel = 2 を読み取る
- 2コンポーネント分のピクセルデータ用にバッファを割り当てる
- バッファサイズ = 画像幅 × 画像高さ × 2
-
処理フェーズ:
- JPEG Lossless デコーダーが 1コンポーネントの SOF3 に遭遇する
- 解析ロジックが実際のデータサイズと期待されるデータサイズについて混乱する
- 不整合な想定に基づいてデータを書き込もうとする
-
メモリ破壊:
- 元に割り当てられたよりも多くのデータがバッファに書き込まれる
- バッファオーバーフローが隣接するメモリ領域を破損させる
- アプリケーションのクラッシュや潜在的なコード実行につながる
ファイル形式の詳細
DNG ファイルは、埋め込まれた JPEG Lossless ストリームを備えた TIFF コンテナ形式を使用します:
- TIFF メタデータ は、画像プロパティと色情報を記述します
- JPEG ストリーム には、圧縮されたピクセルデータが含まれます
- 信頼関係 はメタデータとストリームコンテンツの間に存在します
- 検証のギャップ により、不整合な値が処理コードに到達できます
影響評価
深刻度: 重大
- CVSS スコア: 高(ゼロクリック、メモリ破壊、広範囲への影響)
- 影響を受けるシステム: iOS 18.6.1、同様の画像処理を備えた macOS システム
- 攻撃ベクトル: ネットワーク/ローカルファイル転送
- ユーザー操作: 不要
- 影響範囲: DNG ファイルを処理するすべてのデバイス
現実世界のシナリオ
- DNG ファイルを含むメール添付ファイル
- AirDrop 転送
- クラウド写真同期
- 写真家のサンプルの Web ダウンロード
- メッセージングアプリでのメディア共有
緩和策とパッチ
ベンダーの対応
- iOS 18.6.2 で修正: Apple は適切なメタデータ検証を実装しました
- macOS アップデート: 同様の修正が macOS 画像処理に適用されました
- 根本原因: メタデータとストリームパラメータの間の整合性チェックが追加されました
推奨される緩和策
- システムを更新する: iOS 18.6.2 以降をインストールします
- 入力検証: カスタムパーサーでメタデータの整合性を検証します
- 境界チェック: 厳格なバッファサイズ検証を実装します
- ファジング: ファイル形式パーサーの定期的なテスト
ファイル構造と技術的詳細
TIFF/DNG 構造
TIFF Header → IFD Chain → SubIFDs → Image Data
├── Metadata Tags (SamplesPerPixel, Compression, etc.)
├── JPEG Lossless Streams (SOF3 markers)
└── Pixel Data (compressed)
主な脆弱性の場所
- SamplesPerPixel タグ: IFD 構造内の TIFF タグ 0x0115
- SOF3 マーカー: JPEG Lossless フレーム開始(0xFFC3)
- コンポーネント数: SOF3 マーカーから +9 バイトのオフセット
- 重大な不一致: タグ値 ≠ コンポーネント数の場合
テストガイドライン
安全なテスト環境
- 隔離されたシステムを使用する: VM または専用テストデバイス
- スナップショットを作成する: POC ファイルをテストする前
- クラッシュを監視する: システムログとクラッシュレポートを確認
- ネットワーク分離: 意図しないファイル共有を防ぐ
期待される動作
- 脆弱なシステム: アプリケーションのクラッシュ、メモリ破壊エラー
- パッチ適用済みシステム: 適切なエラーハンドリングまたは正しい処理
- ログの指標: メモリアクセス違反、セグメンテーションフォールト
技術リファレンス
ファイル形式のドキュメント
- TIFF 6.0 仕様: タグ構造と IFD 形式
- DNG 仕様: Adobe Digital Negative 形式
- JPEG 標準: ロスレス圧縮(ITU-T T.87)
セキュリティ研究
- メモリ破壊テクニック: バッファオーバーフローの基礎
- ファイル形式ファジング: 自動化された脆弱性発見
- パーサーセキュリティ: 入力検証のベストプラクティス
免責事項: この調査は、教育および防衛的なセキュリティ目的のみで提供されています。ユーザーは、適用される法律および倫理ガイドラインの遵守に責任を負います。
注意
クラッシュがトリガーされるまで約 1〜3 分かかります。楽しんでください。
また、POC については、open vuln_file.dng を実行するか、プレビューするだけで実行されます。