CVE-2025-43300: iOS/macOS DNG画像処理におけるメモリ破壊
概要
CVE-2025-43300は、iOS 18.6.1およびmacOSシステムに影響を与える、Appleの画像処理フレームワークにおける深刻なメモリ破壊の脆弱性です。この脆弱性はRawCamera.bundle内のJPEG Lossless decompressionコードに存在し、DNGファイルのTIFFメタデータとJPEGストリームパラメータの不整合によって引き起こされます。
脆弱性の詳細
根本原因
この脆弱性は、DNG(Digital Negative)ファイルにおけるメタデータ/ストリームの不整合に起因します。
- TIFFヘッダーのSamplesPerPixelメタデータは、期待される色成分を示します
- JPEG Losslessストリーム内のSOF3 component countは、実際のデータ成分を指定します
- これらの値が異なる場合、割り当てと処理の整合性が崩れます
メモリ破壊の流れ
1. Parser reads SamplesPerPixel from TIFF metadata (e.g., 2 components)
2. System allocates buffer: width × height × 2 components
3. JPEG decoder reads SOF3 component count (e.g., 1 component)
4. Decoder writes data based on inconsistent assumptions
5. Buffer overflow occurs when more data is written than allocated
攻撃ベクター
- ゼロクリック脆弱性: ユーザーの操作は不要です
- 自動処理: 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 Modifier(hex_modifier.py)
目的: 特定のバイトを安全に変更して概念実証ファイルを作成します
主な機能:
- 変更前に期待されるバイト値を検証します
- ファイル追跡用のSHA256ハッシュを作成します
- バイナリ差分レポートを生成します
- 偶発的な破損を防ぐための安全チェックを実装します
- 手動および自動のPOC作成の両方をサポートします
使用方法:
# Create POC using known vulnerable offsets
python3 hex_modifier.py create-poc <input.dng>
# Manual byte modification
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# Generate diff report
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コンポーネント分のピクセルデータ用バッファを割り当てます
- バッファサイズ = image_width × image_height × 2
-
処理フェーズ:
- JPEG Losslessデコーダーが1コンポーネントのSOF3に遭遇します
- パースロジックが実際のデータサイズと期待されるデータサイズの間で混乱します
- 不整合な仮定に基づいてデータを書き込もうとします
-
メモリ破壊:
- 当初割り当てられたよりも多くのデータがバッファに書き込まれます
- バッファオーバーフローが隣接するメモリ領域を破壊します
- アプリケーションのクラッシュや潜在的なコード実行につながります
ファイル形式の詳細
DNGファイルは、JPEG Losslessストリームが埋め込まれたTIFFコンテナ形式を使用します:
- TIFFメタデータは、画像プロパティと色情報を記述します
- JPEGストリームには圧縮されたピクセルデータが含まれます
- 信頼関係がメタデータとストリームコンテンツの間に存在します
- 検証のギャップにより、不整合な値が処理コードに到達します
影響評価
深刻度: Critical
- 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 Start of Frame(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 を実行してファイルを実行するか、プレビューするだけで実行されます。